Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add tests for initial deployment #48

Merged
merged 2 commits into from
May 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions server/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,8 @@ def _read_secrets_from_vault(self, secret_path_url):
)
if response.status_code != 200:
return None
return response.json()
res_json = response.json()
return res_json["data"]["data"]

def _create_env_placeholder(self):
# check whether we can copy env vars from the default-dev-secrets path
Expand All @@ -418,20 +419,21 @@ def _create_env_placeholder(self):
break
self._write_secrets_to_vault(self._default_secret_url, sample_envs)
self._write_secrets_to_vault(self._secret_url, sample_envs)
else:
self._write_secrets_to_vault(self._secret_url, default_response)
return sample_envs

self._write_secrets_to_vault(self._secret_url, default_response)
return default_response

def inject_env_variables(self, project_path):
secret_data = self._read_secrets_from_vault(self._secret_url)

if not secret_data:
logger.info(f"No secrets found in vault for {self._secrets_namespace}")
self._create_env_placeholder()
return
secret_data = self._create_env_placeholder()

logger.info(f"Found secrets for {self._secrets_namespace}")
with open(os.path.join(project_path, ".env"), "w") as file:
for key, value in secret_data["data"]["data"].items():
for key, value in secret_data.items():
file.write(f'{key}="{value}"\n')

def cleanup_deployment_variables(self):
Expand Down
61 changes: 52 additions & 9 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,43 @@ def test_inject_env_variables_with_secrets_found(
# mock_open().write.assert_called_once_with('key="secret-value"\n')


@patch("server.utils.os")
@patch("server.utils.requests")
def test_inject_env_variables_with_default_secrets_found(
mock_requests, mock_os, secrets_helper_instance, mocker
):
# Mocking necessary dependencies
mock_response1 = MagicMock()
mock_response1.status_code = 200
mock_response1.json.return_value = {"data": {"data": {}}}

mock_response2 = MagicMock()
mock_response2.status_code = 200
mock_response2.json.return_value = {"data": {"data": {"key": "secret-value"}}}

mock_requests.get.side_effect = [mock_response1, mock_response2]

mock_open = MagicMock()
mock_os.path.join.return_value = "/path/to/project/.env"
with patch("builtins.open", mock_open):
# Calling the method under test
secrets_helper_instance.inject_env_variables("/path/to/project")

# Assertions
assert mock_requests.get.call_args_list == [
call(
url="http://vault:8200/v1/kv/data/project_name/branch_name",
headers={"X-Vault-Token": "hvs.randomToken"},
),
call(
url="http://vault:8200/v1/kv/data/project_name/default-dev-secrets",
headers={"X-Vault-Token": "hvs.randomToken"},
),
]

mock_open.assert_called_once_with("/path/to/project/.env", "w")


@patch("server.utils.os")
@patch("server.utils.requests")
def test_inject_env_variables_with_no_secrets(
Expand All @@ -425,18 +462,24 @@ def test_inject_env_variables_with_no_secrets(
mock_response.status_code = 404
mock_requests.get.return_value = mock_response
mock_create_env_placeholder = MagicMock()
mock_create_env_placeholder.return_value = {"key": "test"}

with patch.object(
secrets_helper_instance, "_create_env_placeholder", mock_create_env_placeholder
):
# Calling the method under test
secrets_helper_instance.inject_env_variables("/path/to/project")

# Assertions
mock_requests.get.assert_called_once_with(
url="http://vault:8200/v1/kv/data/project_name/branch_name",
headers={"X-Vault-Token": "hvs.randomToken"},
)
mock_create_env_placeholder.assert_called_once_with()
mock_open = MagicMock()
mock_os.path.join.return_value = "/path/to/project/.env"
with patch("builtins.open", mock_open):
# Calling the method under test
secrets_helper_instance.inject_env_variables("/path/to/project")

# Assertions
mock_requests.get.assert_called_once_with(
url="http://vault:8200/v1/kv/data/project_name/branch_name",
headers={"X-Vault-Token": "hvs.randomToken"},
)
mock_create_env_placeholder.assert_called_once()
mock_open.assert_called_once_with("/path/to/project/.env", "w")


@patch("server.utils.requests.delete", autospec=True)
Expand Down
Loading