def test_owner_id_is_user_when_valid_jwt(self): payload = {'data': {'email': '*****@*****.**', 'groups': ['pirates']}} auth_token = jwt.encode(payload, 'test', algorithm='HS256') data = valid_material_params() r, status = self.post('/materials', data=data, headers=[('X-Authorisation', auth_token)]) self.assert201(status) r, status = self.get('materials', '', r['_id']) self.assertEqual(r['owner_id'], '*****@*****.**')
def test_verify_ownership_materials_belong_to_owner_id(self): materials_data = utils.merge_dict(valid_material_params(), {'owner_id': 'abc'}) r1, _ = self.post('/materials', data=materials_data) r2, _ = self.post('/materials', data=materials_data) r3, _ = self.post('/materials', data=materials_data) data = {'owner_id': 'abc', 'materials': [r1['_id'], r2['_id'], r3['_id']]} r, status = self.post('/materials/verify_ownership', data=data) self.assert200(status)
def test_out_of_lower_range_col(self): materials_response, status = self.post('/materials', valid_material_params()) data = valid_container_params({ 'slots': [{ 'address': 'H:0', 'material': materials_response['_id'], }] }) response, status = self.post('/containers', data=data) self.assertValidationErrorStatus(status) self.assertEqual(response['_issues']['slots']['0'], {'address': "Column out of range: 'H:0'"})
def test_bulk_search_materials(self): query = {'owner_id': 'abc'} query_empty = {'owner_id': 'xyz'} abc_materials_data = utils.merge_dict(valid_material_params(), query) r1, _ = self.post('/materials', data=abc_materials_data) r, status = self.post('/materials/search', data={'where': query}) self.assert200(status) self.assertEqual(len(r['_items']), 1) r, status = self.post('/materials/search', data={'where': query_empty}) self.assert200(status) self.assertEqual(len(r['_items']), 0)
def test_out_of_range_both_numeric(self): materials_response, status = self.post('/materials', valid_material_params()) data = valid_container_params({ 'row_is_alpha': False, 'slots': [{ 'address': '97', 'material': materials_response['_id'], }] }) response, status = self.post('/containers', data=data) self.assertValidationErrorStatus(status) self.assertEqual(response['_issues']['slots']['0'], {'address': "Address out of range: '97'"})
def test_address_both_numerical(self): materials_response, status = self.post('/materials', valid_material_params()) data = valid_container_params({ 'row_is_alpha': False, 'col_is_alpha': False, 'slots': [{ 'address': '1', 'material': materials_response['_id'], }] }) response, status = self.post('/containers', data=data) self.assert201(status)
def test_multiple_addresses_all_duplicates(self): materials_response, status = self.post('/materials', valid_material_params()) data = valid_container_params({ 'slots': [{ 'address': 'A:1', 'material': materials_response['_id'], }, { 'address': 'A:1', 'material': materials_response['_id'], }] }) response, status = self.post('/containers', data=data) self.assertValidationErrorStatus(status) self.assertValidationError(response, {'slots': "Address A:1 is a duplicate"})
def test_address_row_alpha_incorrect(self): materials_response, status = self.post('/materials', valid_material_params()) data = valid_container_params({ 'slots': [{ 'address': '1:A', 'material': materials_response['_id'] }] }) response, status = self.post('/containers', data=data) self.assertValidationErrorStatus(status) self.assertEqual(response['_issues']['slots']['0'], {'address': "Invalid address format: '1:A'"})
def test_multiple_addresses_no_duplicates(self): materials_response, status = self.post('/materials', valid_material_params()) data = valid_container_params({ 'slots': [{ 'address': 'A:1', 'material': materials_response['_id'], }, { 'address': 'B:2', 'material': materials_response['_id'], }, { 'address': 'C:3', 'material': materials_response['_id'], }] }) response, status = self.post('/containers', data=data) self.assert201(status)
def test_materials_can_be_embedded(self): materials_response, status = self.post('/materials', valid_material_params()) data = valid_container_params({ 'slots': [{ 'address': 'A:1', 'material': materials_response['_id'], }] }) container, _ = self.post('/containers', data=data) response, status = self.get('containers/' + container['_id'] + '?embedded={"slots.material": 1}') self.assert200(status) del materials_response['_links'] del materials_response['_status'] self.assertEqual(response['slots'][0]['material'], materials_response)
def test_returns_401_when_invalid_jwt(self): data = valid_material_params() r, status = self.post('/materials', data=data, headers=[('X-Authorisation', 'jibberish.jwt.rubbish')]) self.assert401(status)
def test_hmdmc_not_required_confirmed_by_blank(self): data = valid_material_params() data['hmdmc_not_required_confirmed_by'] = '' r, status = self.post('/materials', data=data) self.assertValidationErrorStatus(status) self.assertValidationError(r, {'hmdmc_not_required_confirmed_by': 'blank'})
def test_hmdmc_with_spaces_set_by(self): data = valid_material_params() data['hmdmc_set_by'] = ' ' r, status = self.post('/materials', data=data) self.assertValidationErrorStatus(status) self.assertValidationError(r, {'hmdmc_set_by': 'blank'})
def test_hmdmc_with_set_by(self): data = valid_material_params() r, status = self.post('/materials', data=data) self.assert201(status)
def test_hmdmc_missing_set_by(self): data = valid_material_params() del data['hmdmc_set_by'] r, status = self.post('/materials', data=data) self.assertValidationErrorStatus(status) self.assertValidationError(r, {'hmdmc_set_by': 'hmdmc'})
def test_material_creation(self): r, status = self.post(self.domain['materials']['url'], valid_material_params()) self.assert201(status) self.assertRegexpMatches(r['_id'], '[a-f0-9]{8}-?[a-f0-9]{4}-?4[a-f0-9]{3}-?[89ab][a-f0-9]{3}-?[a-f0-9]{12}')