diff --git a/app/tests/conftest.py b/app/tests/conftest.py index e10ec471..bd6af348 100644 --- a/app/tests/conftest.py +++ b/app/tests/conftest.py @@ -6,7 +6,9 @@ from app.models import ( IaCTemplateGenerationDocker, IaCTemplateGenerationEC2, IaCTemplateGenerationS3, IaCTemplateGenerationIAM, IaCTemplateGenerationArgoCD, IaCTemplateGenerationELB, IaCTemplateGenerationEFS, SyncPolicy, ArgoApplication, - HelmTemplateGeneration, Pod, Persistance, Ingress, Environment, IaCBasicInput, IaCBugfixInput, IaCInstallationInput + HelmTemplateGeneration, Pod, Persistance, Ingress, Environment, IaCBasicInput, IaCBugfixInput, IaCInstallationInput, + AnsibleInstallNginx, AnsibleInstallDocker, AnsibleInstallKuber, Build, Service, Network, PreCreatedNetwork, + DockerCompose ) @@ -154,4 +156,59 @@ def iac_install_invalid_sample_input(): return { 'os': 'Kali', # Unsupported OS 'service': 'terraform', - } \ No newline at end of file + } + + +@pytest.fixture +def ansible_nginx_sample_input(): + return AnsibleInstallNginx().model_dump() + + +@pytest.fixture +def ansible_nginx_invalid_sample_input(): + sample_input = AnsibleInstallNginx().model_dump() + sample_input['os'] = 'Kali' + return sample_input + + +@pytest.fixture +def ansible_docker_sample_input(): + return AnsibleInstallDocker().model_dump() + + +@pytest.fixture +def ansible_docker_invalid_sample_input(): + sample_input = AnsibleInstallDocker().model_dump() + sample_input['os'] = 'Kali' + return sample_input + + +@pytest.fixture +def ansible_kuber_sample_input(): + return AnsibleInstallKuber( + k8s_worker_nodes=['node-1', 'node-2'], + k8s_master_nodes=['node-1', 'node-2'] + ).model_dump() + + +@pytest.fixture +def ansible_kuber_invalid_sample_input(): + sample_input = AnsibleInstallKuber( + k8s_worker_nodes=['node-1', 'node-2'], + k8s_master_nodes=['node-1', 'node-2'] + ).model_dump() + sample_input['os'] = 'Kali' + return sample_input + + +@pytest.fixture +def docker_compose_sample_input(): + return DockerCompose().model_dump() + + +@pytest.fixture +def docker_compose_invalid_sample_input(): + sample_input = DockerCompose().model_dump() + sample_input['services']['web']['build'] = None + sample_input['services']['web']['image'] = None + return sample_input diff --git a/app/tests/test_ansible.py b/app/tests/test_ansible.py new file mode 100644 index 00000000..0d0a2570 --- /dev/null +++ b/app/tests/test_ansible.py @@ -0,0 +1,46 @@ +from unittest.mock import MagicMock, patch, mock_open + +class TestAnsibleInstall: + def setup_method(self): + mock_client_instance = MagicMock() + mock_client_instance.chat.completions.create.return_value = MagicMock( + choices=[MagicMock(message=MagicMock(content='Mocked OpenAI Response'))] + ) + + self.mock_execute_python_file = patch('app.main.execute_pythonfile').start() + self.mock_edit_directory_generator = patch('app.main.edit_directory_generator').start() + self.mock_gpt_service = patch('app.main.gpt_service', return_value='Mocked GPT Response').start() + self.mock_openai = patch('app.gpt_services.OpenAI', return_value=mock_client_instance).start() + self.mock_builtin_open = patch('builtins.open', mock_open()).start() + self.mock_os_makedirs = patch('os.makedirs').start() + self.mock_os_path_join = patch('os.path.join', side_effect=lambda *args: '/'.join(args)).start() + self.mock_shutil_copy = patch('shutil.copy').start() + self.mock_shutil_rmtree = patch('shutil.rmtree').start() + + self.ansible_nginx_url = '/api/ansible-install/nginx/' + self.ansible_docker_url = '/api/ansible-install/docker/' + self.ansible_kuber_url = '/api/ansible-install/kuber/' + + def test_ansible_nginx_input(self, client, ansible_nginx_sample_input): + response = client.post(self.ansible_nginx_url, json=ansible_nginx_sample_input) + assert response.status_code == 200 + + def test_ansible_nginx_invalid_input(self, client, ansible_nginx_invalid_sample_input): + response = client.post(self.ansible_nginx_url, json=ansible_nginx_invalid_sample_input) + assert response.status_code == 422 + + def test_ansible_docker_input(self, client, ansible_docker_sample_input): + response = client.post(self.ansible_docker_url, json=ansible_docker_sample_input) + assert response.status_code == 200 + + def test_ansible_docker_invalid_input(self, client, ansible_docker_invalid_sample_input): + response = client.post(self.ansible_docker_url, json=ansible_docker_invalid_sample_input) + assert response.status_code == 422 + + def test_ansible_kuber_input(self, client, ansible_kuber_sample_input): + response = client.post(self.ansible_kuber_url, json=ansible_kuber_sample_input) + assert response.status_code == 200 + + def test_ansible_kuber_invalid_input(self, client, ansible_kuber_invalid_sample_input): + response = client.post(self.ansible_kuber_url, json=ansible_kuber_invalid_sample_input) + assert response.status_code == 422 diff --git a/app/tests/test_docker_compose.py b/app/tests/test_docker_compose.py new file mode 100644 index 00000000..eff56357 --- /dev/null +++ b/app/tests/test_docker_compose.py @@ -0,0 +1,13 @@ + + +class TestDockerCompose: + def setup_method(self): + self.url = '/api/docker-compose/' + + def test_docker_compose_input(self, client, docker_compose_sample_input): + response = client.post(self.url, json=docker_compose_sample_input) + assert response.status_code == 200 + + def test_docker_compose_invalid_input(self, client, docker_compose_invalid_sample_input): + response = client.post(self.url, json=docker_compose_invalid_sample_input) + assert response.status_code == 422