Skip to content

Commit 020aef5

Browse files
Add new tests for ansible and docker-compose (#139)
* test (ansible): add new tests for ansible models: nginx, docker, and kuber New Tests #138 * test(docker-compose): add new test for docker-compose model New Tests: #138
1 parent 5383fcb commit 020aef5

File tree

3 files changed

+118
-2
lines changed

3 files changed

+118
-2
lines changed

app/tests/conftest.py

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
from app.models import (
77
IaCTemplateGenerationDocker, IaCTemplateGenerationEC2, IaCTemplateGenerationS3, IaCTemplateGenerationIAM,
88
IaCTemplateGenerationArgoCD, IaCTemplateGenerationELB, IaCTemplateGenerationEFS, SyncPolicy, ArgoApplication,
9-
HelmTemplateGeneration, Pod, Persistance, Ingress, Environment, IaCBasicInput, IaCBugfixInput, IaCInstallationInput
9+
HelmTemplateGeneration, Pod, Persistance, Ingress, Environment, IaCBasicInput, IaCBugfixInput, IaCInstallationInput,
10+
AnsibleInstallNginx, AnsibleInstallDocker, AnsibleInstallKuber, Build, Service, Network, PreCreatedNetwork,
11+
DockerCompose
1012
)
1113

1214

@@ -154,4 +156,59 @@ def iac_install_invalid_sample_input():
154156
return {
155157
'os': 'Kali', # Unsupported OS
156158
'service': 'terraform',
157-
}
159+
}
160+
161+
162+
@pytest.fixture
163+
def ansible_nginx_sample_input():
164+
return AnsibleInstallNginx().model_dump()
165+
166+
167+
@pytest.fixture
168+
def ansible_nginx_invalid_sample_input():
169+
sample_input = AnsibleInstallNginx().model_dump()
170+
sample_input['os'] = 'Kali'
171+
return sample_input
172+
173+
174+
@pytest.fixture
175+
def ansible_docker_sample_input():
176+
return AnsibleInstallDocker().model_dump()
177+
178+
179+
@pytest.fixture
180+
def ansible_docker_invalid_sample_input():
181+
sample_input = AnsibleInstallDocker().model_dump()
182+
sample_input['os'] = 'Kali'
183+
return sample_input
184+
185+
186+
@pytest.fixture
187+
def ansible_kuber_sample_input():
188+
return AnsibleInstallKuber(
189+
k8s_worker_nodes=['node-1', 'node-2'],
190+
k8s_master_nodes=['node-1', 'node-2']
191+
).model_dump()
192+
193+
194+
@pytest.fixture
195+
def ansible_kuber_invalid_sample_input():
196+
sample_input = AnsibleInstallKuber(
197+
k8s_worker_nodes=['node-1', 'node-2'],
198+
k8s_master_nodes=['node-1', 'node-2']
199+
).model_dump()
200+
sample_input['os'] = 'Kali'
201+
return sample_input
202+
203+
204+
@pytest.fixture
205+
def docker_compose_sample_input():
206+
return DockerCompose().model_dump()
207+
208+
209+
@pytest.fixture
210+
def docker_compose_invalid_sample_input():
211+
sample_input = DockerCompose().model_dump()
212+
sample_input['services']['web']['build'] = None
213+
sample_input['services']['web']['image'] = None
214+
return sample_input

app/tests/test_ansible.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from unittest.mock import MagicMock, patch, mock_open
2+
3+
class TestAnsibleInstall:
4+
def setup_method(self):
5+
mock_client_instance = MagicMock()
6+
mock_client_instance.chat.completions.create.return_value = MagicMock(
7+
choices=[MagicMock(message=MagicMock(content='Mocked OpenAI Response'))]
8+
)
9+
10+
self.mock_execute_python_file = patch('app.main.execute_pythonfile').start()
11+
self.mock_edit_directory_generator = patch('app.main.edit_directory_generator').start()
12+
self.mock_gpt_service = patch('app.main.gpt_service', return_value='Mocked GPT Response').start()
13+
self.mock_openai = patch('app.gpt_services.OpenAI', return_value=mock_client_instance).start()
14+
self.mock_builtin_open = patch('builtins.open', mock_open()).start()
15+
self.mock_os_makedirs = patch('os.makedirs').start()
16+
self.mock_os_path_join = patch('os.path.join', side_effect=lambda *args: '/'.join(args)).start()
17+
self.mock_shutil_copy = patch('shutil.copy').start()
18+
self.mock_shutil_rmtree = patch('shutil.rmtree').start()
19+
20+
self.ansible_nginx_url = '/api/ansible-install/nginx/'
21+
self.ansible_docker_url = '/api/ansible-install/docker/'
22+
self.ansible_kuber_url = '/api/ansible-install/kuber/'
23+
24+
def test_ansible_nginx_input(self, client, ansible_nginx_sample_input):
25+
response = client.post(self.ansible_nginx_url, json=ansible_nginx_sample_input)
26+
assert response.status_code == 200
27+
28+
def test_ansible_nginx_invalid_input(self, client, ansible_nginx_invalid_sample_input):
29+
response = client.post(self.ansible_nginx_url, json=ansible_nginx_invalid_sample_input)
30+
assert response.status_code == 422
31+
32+
def test_ansible_docker_input(self, client, ansible_docker_sample_input):
33+
response = client.post(self.ansible_docker_url, json=ansible_docker_sample_input)
34+
assert response.status_code == 200
35+
36+
def test_ansible_docker_invalid_input(self, client, ansible_docker_invalid_sample_input):
37+
response = client.post(self.ansible_docker_url, json=ansible_docker_invalid_sample_input)
38+
assert response.status_code == 422
39+
40+
def test_ansible_kuber_input(self, client, ansible_kuber_sample_input):
41+
response = client.post(self.ansible_kuber_url, json=ansible_kuber_sample_input)
42+
assert response.status_code == 200
43+
44+
def test_ansible_kuber_invalid_input(self, client, ansible_kuber_invalid_sample_input):
45+
response = client.post(self.ansible_kuber_url, json=ansible_kuber_invalid_sample_input)
46+
assert response.status_code == 422

app/tests/test_docker_compose.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
3+
class TestDockerCompose:
4+
def setup_method(self):
5+
self.url = '/api/docker-compose/'
6+
7+
def test_docker_compose_input(self, client, docker_compose_sample_input):
8+
response = client.post(self.url, json=docker_compose_sample_input)
9+
assert response.status_code == 200
10+
11+
def test_docker_compose_invalid_input(self, client, docker_compose_invalid_sample_input):
12+
response = client.post(self.url, json=docker_compose_invalid_sample_input)
13+
assert response.status_code == 422

0 commit comments

Comments
 (0)