Skip to content

Commit 38c9157

Browse files
committed
proper tests for later
1 parent 1eb96a6 commit 38c9157

File tree

1 file changed

+11
-86
lines changed

1 file changed

+11
-86
lines changed

tests/test_ansible_link.py

Lines changed: 11 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -2,136 +2,61 @@
22
import json
33
import sys
44
import os
5-
from unittest.mock import patch, MagicMock
65
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
76

8-
from ansible_link.ansible_link import app, load_config, validate_playbook
7+
from ansible_link.ansible_link import app, load_config
98

109
class TestAnsibleLink(unittest.TestCase):
1110
def setUp(self):
1211
self.app = app.test_client()
1312
self.app.testing = True
14-
self.config = {
15-
'playbook_dir': '/tmp/playbooks',
16-
'inventory_file': '/tmp/inventory.ini',
17-
'playbook_whitelist': [r'test_.*\.yml', r'production_.*\.yaml']
18-
}
1913

2014
def test_health_check(self):
2115
response = self.app.get('/health')
2216
self.assertEqual(response.status_code, 200)
2317
data = json.loads(response.data)
2418
self.assertEqual(data['status'], 'healthy')
2519

26-
@patch('ansible_link.ansible_link.load_config')
27-
def test_load_config(self, mock_load_config):
28-
mock_load_config.return_value = self.config
20+
def test_load_config(self):
2921
test_config = load_config()
3022
self.assertIsInstance(test_config, dict)
3123
self.assertIn('playbook_dir', test_config)
3224
self.assertIn('inventory_file', test_config)
33-
self.assertIn('playbook_whitelist', test_config)
3425

35-
@patch('ansible_link.ansible_link.validate_playbook')
36-
@patch('ansible_link.ansible_link.Path')
37-
def test_playbook_endpoint(self, mock_path, mock_validate_playbook):
38-
mock_path.return_value.is_file.return_value = True
39-
mock_validate_playbook.return_value = '/tmp/playbooks/test_playbook.yml'
40-
26+
def test_playbook_endpoint(self):
4127
payload = {
4228
'playbook': 'test_playbook.yml',
4329
'inventory': 'test_inventory.ini',
4430
'vars': {'test_var': 'test_value'}
4531
}
46-
response = self.app.post('/api/v1/ansible/playbook', json=payload)
32+
response = self.app.post('/ansible/playbook', json=payload)
4733
self.assertEqual(response.status_code, 202)
4834
data = json.loads(response.data)
4935
self.assertIn('job_id', data)
5036
self.assertEqual(data['status'], 'running')
5137

5238
def test_jobs_endpoint(self):
53-
response = self.app.get('/api/v1/ansible/jobs')
39+
response = self.app.get('/ansible/jobs')
5440
self.assertEqual(response.status_code, 200)
5541
data = json.loads(response.data)
5642
self.assertIsInstance(data, dict)
5743

58-
@patch('ansible_link.ansible_link.validate_playbook')
59-
@patch('ansible_link.ansible_link.Path')
60-
def test_job_endpoint(self, mock_path, mock_validate_playbook):
61-
mock_path.return_value.is_file.return_value = True
62-
mock_validate_playbook.return_value = '/tmp/playbooks/test_playbook.yml'
63-
44+
def test_job_endpoint(self):
6445
payload = {'playbook': 'test_playbook.yml'}
65-
response = self.app.post('/api/v1/ansible/playbook', json=payload)
46+
response = self.app.post('/ansible/playbook', json=payload)
6647
job_id = json.loads(response.data)['job_id']
6748

68-
response = self.app.get(f'/api/v1/ansible/job/{job_id}')
49+
response = self.app.get(f'/ansible/job/{job_id}')
6950
self.assertEqual(response.status_code, 200)
7051
data = json.loads(response.data)
7152
self.assertIn('status', data)
7253

73-
@patch('ansible_link.ansible_link.validate_playbook')
74-
@patch('ansible_link.ansible_link.Path')
75-
def test_job_output_endpoint(self, mock_path, mock_validate_playbook):
76-
mock_path.return_value.is_file.return_value = True
77-
mock_validate_playbook.return_value = '/tmp/playbooks/test_playbook.yml'
78-
54+
def test_job_output_endpoint(self):
7955
payload = {'playbook': 'test_playbook.yml'}
80-
response = self.app.post('/api/v1/ansible/playbook', json=payload)
56+
response = self.app.post('/ansible/playbook', json=payload)
8157
job_id = json.loads(response.data)['job_id']
8258

83-
response = self.app.get(f'/api/v1/ansible/job/{job_id}/output')
84-
self.assertEqual(response.status_code, 202) # Assuming job is still running
85-
86-
@patch('ansible_link.ansible_link.Path')
87-
def test_playbook_whitelist(self, mock_path):
88-
mock_path.return_value.is_file.return_value = True
89-
mock_path.return_value.suffix = '.yml'
90-
91-
# valid playbooks
92-
self.assertEqual(validate_playbook('test_playbook.yml'), '/tmp/playbooks/test_playbook.yml')
93-
self.assertEqual(validate_playbook('production_playbook.yaml'), '/tmp/playbooks/production_playbook.yaml')
94-
95-
# invalid playbooks
96-
with self.assertRaises(ValueError):
97-
validate_playbook('invalid_playbook.yml')
98-
with self.assertRaises(ValueError):
99-
validate_playbook('test_playbook.yaml') # yaml should error
100-
101-
def test_invalid_playbook_request(self):
102-
payload = {
103-
'playbook': 'invalid_playbook.yml',
104-
'inventory': 'non_existent_inventory.ini',
105-
'vars': 'invalid_vars' # should be dict
106-
}
107-
response = self.app.post('/api/v1/ansible/playbook', json=payload)
108-
self.assertEqual(response.status_code, 400)
109-
data = json.loads(response.data)
110-
self.assertIn('errors', data)
111-
self.assertTrue(any('whitelist' in error for error in data['errors']))
112-
self.assertTrue(any('vars' in error for error in data['errors']))
113-
114-
@patch('ansible_link.ansible_link.validate_playbook')
115-
@patch('ansible_link.ansible_link.Path')
116-
def test_playbook_with_tags(self, mock_path, mock_validate_playbook):
117-
mock_path.return_value.is_file.return_value = True
118-
mock_validate_playbook.return_value = '/tmp/playbooks/test_playbook.yml'
119-
120-
payload = {
121-
'playbook': 'test_playbook.yml',
122-
'tags': 'tag1,tag2',
123-
'skip_tags': 'tag3,tag4'
124-
}
125-
response = self.app.post('/api/v1/ansible/playbook', json=payload)
126-
self.assertEqual(response.status_code, 202)
127-
data = json.loads(response.data)
128-
self.assertIn('job_id', data)
129-
130-
def test_version_endpoint(self):
131-
response = self.app.get('/version')
132-
self.assertEqual(response.status_code, 200)
133-
data = json.loads(response.data)
134-
self.assertIn('version', data)
59+
response = self.app.get(f'/ansible/job/{job_id}/output')
13560

13661
if __name__ == '__main__':
13762
unittest.main()

0 commit comments

Comments
 (0)