예제 #1
0
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)