def test_classification_search_given_raw_data_returns_data_for_builders_v2(): # Given # a classification search with a simple classifications standardiser = pet_standardiser() classification_collection = ethnicity_classification_collection_from_classification_list( [ethnicity_classification_with_cats_and_dogs_data()]) classification_finder = EthnicityClassificationFinder( standardiser, classification_collection) # When # we search with data that will fit the classification raw_values = ["FELINE", "Canine "] search_outputs = classification_finder.find_classifications(raw_values) # Then # we expect the data section will contain data needed to display first_classification_data = search_outputs[0]["data"] expected = [ { "raw_value": "FELINE", "standard_value": "Cat", "display_value": "Cat", "parent": "Cat", "order": 1 }, { "raw_value": "Canine ", "standard_value": "Dog", "display_value": "Dog", "parent": "Dog", "order": 2 }, ] assert expected == first_classification_data
def build_external_classification_collection(): return ethnicity_classification_collection_from_classification_list( [ get_external_classification_simple(), get_complex_external_classification_with_parents_and_optionals(), get_complex_external_classification_without_parents(), ] )
def test_synchronise_saves_only_one_internal_classification_for_external_pair_with_and_without_parents( ): # given a synchroniser synchroniser = reset_test_synchroniser() # when we synchronise with 5A and 5A+ (which are a pair with and without parent values) classification_collection = ethnicity_classification_collection_from_classification_list( [get_5A(), get_5A_plus()]) synchroniser.synchronise_classifications(classification_collection) # then we have a classification link assert len(internal_classification_service.get_all_classifications()) == 1
def test_synchronise_adds_external_classifications_to_internal_classification_service( ): # given a synchroniser synchroniser = reset_test_synchroniser() # when we synchronise with a very simple categorisation list classification_collection = ethnicity_classification_collection_from_classification_list( [get_2A()]) synchroniser.synchronise_classifications(classification_collection) # a classification is saved to the assert len(internal_classification_service.get_all_classifications()) == 1
def test_synchronise_saves_overwrites_internal_classification_name(): # given a synchroniser synchroniser = reset_test_synchroniser() # when we synchronise values with a simple classification collection from external classification 2A classification_collection = ethnicity_classification_collection_from_classification_list( [get_2A()]) synchroniser.synchronise_classifications(classification_collection) # then we have an internal classification from 2A with expected name classification_2a = internal_classification_service.get_classification_by_id( "2A") assert classification_2a.title == "White and Other" # when we now synchronise values with a version of 2A with an alternate name alt_collection = ethnicity_classification_collection_from_classification_list( [get_2A_named_test_example()]) synchroniser.synchronise_classifications(alt_collection) # then the internal classification now has the new expected name classification_2a = internal_classification_service.get_classification_by_id( "2A") assert classification_2a.title == "test example"
def test_classification_collection_identifies_valid_classification(): # GIVEN # a simple classification collect classification = ethnicity_classification_with_cats_and_dogs_data() classification_collection = ethnicity_classification_collection_from_classification_list([classification]) standardiser = pet_standardiser() raw_values = ["Cat", "Dog"] # WHEN # we request valid classifications valid_classifications = classification_collection.get_valid_classifications(raw_values, standardiser) # THEN # we expect our assert 1 == len(valid_classifications) assert classification.get_id() == valid_classifications[0].get_id()
def test_classification_collection_will_not_return_invalid_classifications(): # GIVEN # a collection with two classifications and raw_values that could apply to only the first classification_1 = ethnicity_classification_with_required_fish_cat_and_dog_data() classification_2 = ethnicity_classification_with_required_fish_and_mammal_data() classification_collection = ethnicity_classification_collection_from_classification_list( [classification_1, classification_2] ) standardiser = pet_standardiser() raw_values = ["Cat", "Dog", "Fish"] # WHEN # we request valid classifications valid_classifications = classification_collection.get_valid_classifications(raw_values, standardiser) # THEN # only 1 classification is returned assert 1 == len(valid_classifications)
def test_classification_collection_can_return_multiple_valid_classifications(): # GIVEN # a collection with two classifications and raw_values that could apply to either classification_1 = ethnicity_classification_with_required_fish_cat_and_dog_data() classification_2 = ethnicity_classification_with_required_fish_and_mammal_data() classification_collection = ethnicity_classification_collection_from_classification_list( [classification_1, classification_2] ) standardiser = pet_standardiser() raw_values = ["Cat", "Dog", "Fish", "Mammal"] # WHEN # we request valid classifications valid_classifications = classification_collection.get_valid_classifications(raw_values, standardiser) # THEN # we 2 classifications to have been returned assert 2 == len(valid_classifications)
def test_classification_search_given_raw_data_returns_only_output_for_valid_classifications(): # Given # a classification search with multiple classifications standardiser = pet_standardiser() classification_collection = ethnicity_classification_collection_from_classification_list( [ ethnicity_classification_with_required_fish_and_mammal_data(), ethnicity_classification_with_required_fish_cat_and_dog_data(), ] ) classification_finder = EthnicityClassificationFinder(standardiser, classification_collection) # When # we search with data that will fit only one classification raw_values = ["Cat", "Dog", "Fish"] search_outputs = classification_finder.find_classifications(raw_values) # Then # we expect output from one classification will be returned (plus the custom classification) assert 2 == len(search_outputs)