def test_get_sub_with_pk_and_matching_parent_pk_should_200(self): # arrange basic_class = DataGenerator.set_up_basic_class() model = DataGenerator.set_up_model_with_parent_resource(basic_class=basic_class) url = '/basicClasses/{0}/modelWithParentResources/{1}'.format(basic_class.id, model.id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(status.HTTP_200_OK, result.status_code)
def test_get_with_include_that_has_excludes_removes_fields_properly(self): # arrange model_with_sensitive_data = DataGenerator.set_up_model_with_sensitive_data() basic_class = DataGenerator.set_up_basic_class(model_with_sensitive_data=model_with_sensitive_data) url = '/basicClass/{0}?include=model_with_sensitive_data'.format(basic_class.id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(status.HTTP_200_OK, result.status_code) self.assertNotIn('topSecret', result.data['modelWithSensitiveData'].keys())
def test_get_with_fields_from_foriegnkey(self): # arrange child_class_one = DataGenerator.set_up_child_class() basic_class = DataGenerator.set_up_basic_class(child_one=child_class_one) url = '/basicClass/{0}?fields=child_one_id'.format(basic_class.id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK) self.assertEqual(len(result.data.keys()), 1)
def test_get_list_sub(self): # arrange child_one = DataGenerator.set_up_child_class() basic_class = DataGenerator.set_up_basic_class(child_one=child_one) url = '/basicClass/{0}/childOne'.format(basic_class.id) # act result = self.api_client.get(url, format='json') # assert basic_class.refresh_from_db() self.assertEqual(child_one.id, result.data['id'])
def test_get_with_include_that_has_no_nested_child_returns_null(self): # arrange child_one = DataGenerator.set_up_child_class('test') basic_class = DataGenerator.set_up_basic_class(child_one=child_one) url = '/basicClass/{0}?include=child_one__nested_child'.format( basic_class.id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(status.HTTP_200_OK, result.status_code) self.assertIsNone(result.data['childOne']['nestedChild'])
def test_get_with_cache_without_cache_time(self): # arrange child_one = DataGenerator.set_up_child_class() basic_class = DataGenerator.set_up_basic_class(child_one=child_one) url = '/basicClass/{0}/childOne'.format(basic_class.id) # act result = self.api_client.get(url, format='json') cached_result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK) self.assertEqual(cached_result.status_code, status.HTTP_200_OK) self.assertFalse(cached_result.has_header('Hit'))
def test_delete_sub(self): # arrange child_one = DataGenerator.set_up_child_class() basic_class = DataGenerator.set_up_basic_class(child_one=child_one) url = '/basicClass/{0}/childClass/{1}'.format(basic_class.id, child_one.id) # act result = self.api_client.delete(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK) with self.assertRaises(ObjectDoesNotExist) as ex: ChildClass.objects.get(pk=child_one.id) self.assertIsInstance(ex.exception, ObjectDoesNotExist)
def test_filterable_property_properly_filters(self): # arrange community_one = DataGenerator.set_up_community() community_two = DataGenerator.set_up_community(phase_group=community_one.phase_group) application = Application.get_lead_mgmt_application() community_application_one = DataGenerator.set_up_community_application(community=community_one, application=application, active=False) community_application_two = DataGenerator.set_up_community_application(community=community_one, application=application, active=False) url = '/phaseGroups?filters=active=True' # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK) self.assertEqual(len(result.data), 0)
def test_post_sub_resource_to_linking_class_with_id_with_no_linking_cls(self): # arrange basic_class = DataGenerator.set_up_basic_class() child_class = DataGenerator.set_up_child_class() url = '/basicClasses/{0}/childClassNoLinker'.format(basic_class.id) body = { 'id': child_class.id } # act result = self.api_client.post(url, body, format='json') # assert self.assertEqual(result.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(result.data['errorMessage'], ErrorMessages.POST_SUB_WITH_ID_AND_NO_LINKING_CLASS. format(ChildClass.__name__))
def test_encrypted_field_returns_decrypted_value(self): value = '123456789' encrypted_class = DataGenerator.set_up_encrypted_class(value=value) encrypted_return = EncryptedClass.objects.get(id=encrypted_class.id) self.assertEqual(value[-4:], encrypted_return.encrypted_val[-4:]) self.assertEqual(len(encrypted_return.encrypted_val), 4)
def test_post_sub_resource_to_linking_class_with_id(self): # arrange basic_class = DataGenerator.set_up_basic_class() child_class = DataGenerator.set_up_child_class() url = '/basicClasses/{0}/childClass'.format(basic_class.id) body = {'id': child_class.id} # act result = self.api_client.post(url, body, format='json') # assert basic_class.refresh_from_db() linking_classes = LinkingClass.objects.filter(basic_class=basic_class, child_class=child_class) child_classes = ChildClass.objects.filter(name=child_class.name) self.assertEqual(len(linking_classes), 1) self.assertEqual(len(child_classes), 1)
def test_encrypted_field_returns_full_descrypted_value(self): value = '123456789abcdefgfff' encrypted_class = DataGenerator.set_up_encrypted_class_with_no_display_value( value=value) encrypted_return = EncryptedClassNoDisplayChars.objects.get( id=encrypted_class.id) self.assertEqual(value, encrypted_return.encrypted_val)
def test_get_with_bool_filter_of_false(self): # arrange basic_class = DataGenerator.set_up_basic_class(active=False) url = '/basicClass?filters=active=False'.format(basic_class.id) # act result = self.api_client.get(url, format='json') # assert self.assertFalse(result.data[0].get('active'))
def test_get_list_sub_with_no_child_resource(self): # arrange basic_class = DataGenerator.set_up_basic_class(child_one=None) url = '/basicClass/{0}/childOne'.format(basic_class.id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.data, {})
def test_get_meta(self): # arrange meta_data_class = DataGenerator.set_up_meta_data_class() url = '/metaDataClass?meta=true'.format(meta_data_class.id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK)
def test_get_with_contains_all_filter_list(self): # arrange basic_class = DataGenerator.set_up_basic_class(active=False) url = '/basicClass?filters=child_three__id__contains_all={0}'.format(basic_class.child_three.first().id) # act result = self.api_client.get(url, format='json') # assert self.assertFalse(result.data[0].get('active'))
def test_get_one_to_one(self): # arrange oto = DataGenerator.set_up_ont_to_one_class() url = '/oneToOne/{0}'.format(oto.alternative_id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.data['alternativeId'], oto.alternative_id)
def test_get(self): # arrange basic_class = DataGenerator.set_up_basic_class() url = '/basicClass/{0}'.format(basic_class.id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK) self.assertEqual(result.data['id'], basic_class.id)
def test_get_with_revicontains_matches(self): # arrange basic_class = DataGenerator.set_up_basic_class() url = '/basicClasses?filters=name__revicontains={0}'.format(basic_class.name + generate_str(7)) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(status.HTTP_200_OK, result.status_code) self.assertEqual(len(result.data), 1)
def test_get_should_return_value_in_read_db_not_write_db(self): # arrange basic_class = DataGenerator.set_up_basic_class(write_db='readreplica') url = '/readReplicaBasicClass/{0}'.format(basic_class.id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK) self.assertEqual(result.data['name'], basic_class.name)
def test_json_text_field_returns_json_value_as_none(self): # arrange json_text = None jt_class = DataGenerator.set_up_json_text_field_class( json_text=json_text) # act jt_return = JsonTextFieldClass.objects.get(id=jt_class.id) # assert self.assertIsNone(jt_return.json_text)
def test_get_should_fail_if_data_in_default_db(self): # arrange basic_class = DataGenerator.set_up_basic_class() url = '/readReplicaBasicClass/{0}'.format(basic_class.id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_400_BAD_REQUEST) self.assertEqual(result.data['errorMessage'], ErrorMessages.DOES_NOT_EXIST.format(BasicClass.__name__, basic_class.id))
def test_post_sub_resource_to_child_(self): # arrange basic_class = DataGenerator.set_up_basic_class() url = '/basicClasses/{0}/childOne'.format(basic_class.id) body = {'name': 'test 123'} # act result = self.api_client.post(url, body, format='json') # assert basic_class.refresh_from_db() self.assertEqual(basic_class.child_one.name, result.data['name'])
def test_get_list_no_count(self): # arrange basic_class_1, basic_class_2, basic_class_3 = [DataGenerator.set_up_basic_class() for x in range(3)] url = '/basicClass?page=1&pageSize=3&noCount=true' # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK) self.assertEqual(result.data['count'], None) self.assertGreater(len(result.data['data']), 1)
def test_get_list_count_by_page_zero(self): # arrange basic_class_1, basic_class_2, basic_class_3 = [DataGenerator.set_up_basic_class() for x in range(3)] url = '/basicClass?pageSize=0' # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK) self.assertGreater(result.data['count'], 2) self.assertEqual(len(result.data['data']), 0)
def test_filterable_property_properly_filters(self): # todo: this is a bad test due to how they are linked -- it can also cause issues expanding result set # arrange community_one = DataGenerator.set_up_community() community_two = DataGenerator.set_up_community( phase_group=community_one.phase_group) application = Application.get_lead_mgmt_application() community_application_one = DataGenerator.set_up_community_application( community=community_one, application=application, active=False) community_application_two = DataGenerator.set_up_community_application( community=community_two, application=application, active=False) url = '/phaseGroups?filters=active=True|id__in={0}'.format( community_one.phase_group.id) # act result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK) self.assertEqual(len(result.data), 0)
def test_json_text_field_returns_json_value_as_list(self): # arrange json_text = json.loads( '[{ "description": "isn\'t it beautiful outside?" }]') jt_class = DataGenerator.set_up_json_text_field_class( json_text=json_text) # act jt_return = JsonTextFieldClass.objects.get(id=jt_class.id) # assert self.assertIsNotNone(jt_return) self.assertTrue(isinstance(jt_return.json_text, List))
def test_json_text_field_calls_mock_to_python_when_set( self, mock_to_python): # arrange mock_to_python.return_value = [] json_text = json.loads( '[{ "description": "isn\'t it beautiful outside?" }]') # act jt_class = DataGenerator.set_up_json_text_field_class( json_text=json_text) # assert self.assertTrue(mock_to_python.called)
def test_get_with_cache(self): # arrange basic_class = DataGenerator.set_up_basic_class() url = '/basicClass/{0}'.format(basic_class.id) # act result = self.api_client.get(url, format='json') cached_result = self.api_client.get(url, format='json') # assert self.assertEqual(result.status_code, status.HTTP_200_OK) self.assertEqual(cached_result.status_code, status.HTTP_200_OK) self.assertTrue(cached_result.has_header('Hit'))
def test_json_text_field_calls_mock_from_db_value_when_retrieved_from_db( self, mock_from_db): # arrange mock_from_db.return_value = [] json_text = json.loads( '[{ "description": "isn\'t it beautiful outside?" }]') jt_class = DataGenerator.set_up_json_text_field_class( json_text=json_text) # act jt_return = JsonTextFieldClass.objects.get(id=jt_class.id) # assert self.assertTrue(mock_from_db.called)