craton/craton/tests/functional/test_cell_calls.py

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})