196 lines
7.5 KiB
Python
196 lines
7.5 KiB
Python
from craton.tests.functional.test_variable_calls import \
|
|
APIV1ResourceWithVariablesTestCase
|
|
|
|
|
|
class APIV1CellTest(APIV1ResourceWithVariablesTestCase):
|
|
|
|
resource = 'cells'
|
|
|
|
def setUp(self):
|
|
super(APIV1CellTest, self).setUp()
|
|
self.cloud = self.create_cloud()
|
|
self.region = self.create_region()
|
|
|
|
def tearDown(self):
|
|
super(APIV1CellTest, self).tearDown()
|
|
|
|
def create_cloud(self):
|
|
return super(APIV1CellTest, self).create_cloud(name='cloud-1')
|
|
|
|
def create_region(self):
|
|
return super(APIV1CellTest, self).create_region(
|
|
name='region-1',
|
|
cloud=self.cloud,
|
|
variables={"region": "one"},
|
|
)
|
|
|
|
def create_cell(self, name, variables=None):
|
|
return super(APIV1CellTest, self).create_cell(
|
|
name=name,
|
|
cloud=self.cloud,
|
|
region=self.region,
|
|
variables=variables
|
|
)
|
|
|
|
def test_cell_create_with_variables(self):
|
|
variables = {'a': 'b'}
|
|
cell = self.create_cell('cell-a', variables=variables)
|
|
self.assertEqual('cell-a', cell['name'])
|
|
self.assertEqual(variables, cell['variables'])
|
|
|
|
def test_create_cell_supports_vars_ops(self):
|
|
cell = self.create_cell('new-cell', {'a': 'b'})
|
|
self.assert_vars_get_expected(cell['id'], {'a': 'b'})
|
|
self.assert_vars_can_be_set(cell['id'])
|
|
self.assert_vars_can_be_deleted(cell['id'])
|
|
|
|
def test_cell_create_with_no_name_fails(self):
|
|
url = self.url + '/v1/cells'
|
|
payload = {'region_id': self.region['id']}
|
|
cell = self.post(url, data=payload)
|
|
self.assertEqual(400, cell.status_code)
|
|
|
|
def test_cell_create_with_duplicate_name_fails(self):
|
|
self.create_cell('test-cell')
|
|
url = self.url + '/v1/cells'
|
|
payload = {'name': 'test-cell', 'region_id': self.region['id'],
|
|
"cloud_id": self.cloud['id']}
|
|
cell = self.post(url, data=payload)
|
|
self.assertEqual(409, cell.status_code)
|
|
|
|
def test_cell_create_with_extra_id_property_fails(self):
|
|
url = self.url + '/v1/cells'
|
|
payload = {'region_id': self.region['id'],
|
|
'cloud_id': self.cloud['id'], 'name': 'a', 'id': 3}
|
|
cell = self.post(url, data=payload)
|
|
self.assertEqual(400, cell.status_code)
|
|
msg = ["Additional properties are not allowed ('id' was unexpected)"]
|
|
self.assertEqual(cell.json()['errors'], msg)
|
|
|
|
def test_cell_create_with_extra_created_at_property_fails(self):
|
|
url = self.url + '/v1/cells'
|
|
payload = {'region_id': self.region['id'],
|
|
'cloud_id': self.cloud['id'], 'name': 'a',
|
|
'created_at': "some date"}
|
|
cell = self.post(url, data=payload)
|
|
self.assertEqual(400, cell.status_code)
|
|
msg = ["Additional properties are not allowed "
|
|
"('created_at' was unexpected)"]
|
|
self.assertEqual(cell.json()['errors'], msg)
|
|
|
|
def test_cell_create_with_extra_updated_at_property_fails(self):
|
|
url = self.url + '/v1/cells'
|
|
payload = {'region_id': self.region['id'],
|
|
'cloud_id': self.cloud['id'], 'name': 'a',
|
|
'updated_at': "some date"}
|
|
cell = self.post(url, data=payload)
|
|
self.assertEqual(400, cell.status_code)
|
|
msg = ["Additional properties are not allowed "
|
|
"('updated_at' was unexpected)"]
|
|
self.assertEqual(cell.json()['errors'], msg)
|
|
|
|
def test_cells_get_all_with_details(self):
|
|
self.create_cell('cell1', variables={'a': 'b'})
|
|
self.create_cell('cell2', variables={'c': 'd'})
|
|
url = self.url + '/v1/cells?details=all'
|
|
resp = self.get(url)
|
|
cells = resp.json()['cells']
|
|
self.assertEqual(2, len(cells))
|
|
for cell in cells:
|
|
self.assertTrue('variables' in cell)
|
|
|
|
for cell in cells:
|
|
if cell['name'] == 'cell1':
|
|
expected = {'a': 'b', "region": "one"}
|
|
self.assertEqual(expected, cell['variables'])
|
|
if cell['name'] == 'cell2':
|
|
expected = {'c': 'd', "region": "one"}
|
|
self.assertEqual(expected, cell['variables'])
|
|
|
|
def test_cells_get_all_for_region(self):
|
|
# Create a cell first
|
|
self.create_cell('cell-1')
|
|
url = self.url + '/v1/cells?region_id={}'.format(self.region['id'])
|
|
resp = self.get(url)
|
|
cells = resp.json()['cells']
|
|
self.assertEqual(1, len(cells))
|
|
self.assertEqual(['cell-1'], [i['name'] for i in cells])
|
|
|
|
def test_cells_get_all_for_cloud(self):
|
|
# Create a cell first
|
|
for i in range(2):
|
|
self.create_cell('cell-{}'.format(str(i)))
|
|
url = self.url + '/v1/cells?cloud_id={}'.format(self.cloud['id'])
|
|
resp = self.get(url)
|
|
cells = resp.json()['cells']
|
|
self.assertEqual(2, len(cells))
|
|
self.assertEqual(['cell-0', 'cell-1'], [i['name'] for i in cells])
|
|
|
|
def test_cell_get_all_with_name_filter(self):
|
|
self.create_cell('cell1')
|
|
self.create_cell('cell2')
|
|
url = self.url + '/v1/cells?name=cell2'
|
|
resp = self.get(url)
|
|
cells = resp.json()['cells']
|
|
self.assertEqual(1, len(cells))
|
|
self.assertEqual({'cell2'}, {cell['name'] for cell in cells})
|
|
|
|
def test_get_cell_details(self):
|
|
cellvars = {"who": "that"}
|
|
cell = self.create_cell('cell1', variables=cellvars)
|
|
url = self.url + '/v1/cells/{}'.format(cell['id'])
|
|
resp = self.get(url)
|
|
cell_with_detail = resp.json()
|
|
self.assertEqual('cell1', cell_with_detail['name'])
|
|
|
|
def test_get_cell_resolved_vars(self):
|
|
cellvars = {"who": "that"}
|
|
cell = self.create_cell('cell1', variables=cellvars)
|
|
url = self.url + '/v1/cells/{}'.format(cell['id'])
|
|
resp = self.get(url)
|
|
cell_with_detail = resp.json()
|
|
self.assertEqual('cell1', cell_with_detail['name'])
|
|
self.assertEqual({"who": "that", "region": "one"},
|
|
cell_with_detail['variables'])
|
|
|
|
def test_get_cell_unresolved_vars(self):
|
|
cellvars = {"who": "that"}
|
|
cell = self.create_cell('cell1', variables=cellvars)
|
|
cell_id = cell['id']
|
|
url = self.url + '/v1/cells/{}?resolved-values=false'.format(cell_id)
|
|
resp = self.get(url)
|
|
cell_with_detail = resp.json()
|
|
self.assertEqual('cell1', cell_with_detail['name'])
|
|
self.assertEqual({"who": "that"}, cell_with_detail['variables'])
|
|
|
|
def test_cell_update(self):
|
|
cell = self.create_cell('cell-1')
|
|
url = self.url + '/v1/cells/{}'.format(cell['id'])
|
|
data = {'note': 'Updated cell note.'}
|
|
resp = self.put(url, data=data)
|
|
self.assertEqual(200, resp.status_code)
|
|
cell = resp.json()
|
|
self.assertEqual(data['note'], cell['note'])
|
|
|
|
def test_cell_delete(self):
|
|
cell1 = self.create_cell('cell-1')
|
|
self.create_cell('cell-2')
|
|
url = self.url + '/v1/cells'
|
|
resp = self.get(url)
|
|
self.assertEqual(200, resp.status_code)
|
|
cells = resp.json()['cells']
|
|
self.assertEqual(2, len(cells))
|
|
self.assertEqual({'cell-1', 'cell-2'},
|
|
{cell['name'] for cell in cells})
|
|
|
|
delurl = self.url + '/v1/cells/{}'.format(cell1['id'])
|
|
resp = self.delete(delurl)
|
|
self.assertEqual(204, resp.status_code)
|
|
|
|
resp = self.get(url)
|
|
self.assertEqual(200, resp.status_code)
|
|
cells = resp.json()['cells']
|
|
self.assertEqual(1, len(cells))
|
|
self.assertEqual({'cell-2'},
|
|
{cell['name'] for cell in cells})
|