def test_assign_measures_to_commodities(mock_combine_duties, commodity_list,
                                        measure_list,
                                        expected_assigned_measure):
    mock_combine_duties.return_value = None
    application = mock.MagicMock(country_name='spain')
    document = Document(application)

    commodity_list = [
        Commodity(commodity_code) for commodity_code in commodity_list
    ]
    measure_list = [
        get_measure(**measure_properties)
        for measure_properties in measure_list
    ]

    document.commodity_list = commodity_list
    document.measure_list = measure_list
    for commodity in commodity_list:
        assert commodity.measure_list == []

    document.assign_measures_to_commodities()
    for commodity in document.commodity_list:
        if expected_assigned_measure:
            assert len(commodity.measure_list) == 1
            # TODO: MPP not a very dynamic test as it makes assumptions. Consider a better way to assert
            assert commodity.measure_list[0].measure_sid == measure_list[
                0].measure_sid
        else:
            assert commodity.measure_list == []
def test_assign_duties_to_measures(mock_combine_duties, duty_list,
                                   measure_list, expected_assigned_duty):
    mock_combine_duties.return_value = None
    application = mock.MagicMock(country_name='spain')
    document = Document(application)

    duty_list = [
        get_duty_object(**duty_properties) for duty_properties in duty_list
    ]
    measure_list = [
        get_measure(**measure_properties)
        for measure_properties in measure_list
    ]

    document.duty_list = duty_list
    document.measure_list = measure_list
    for measure in measure_list:
        assert measure.duty_list == []

    document.assign_duties_to_measures()
    for measure in document.measure_list:
        if expected_assigned_duty:
            assert len(measure.duty_list) == 1
            # TODO: MPP not a very dynamic test as it makes assumptions. Consider a better way to assert
            assert measure.duty_list[0].measure_sid == measure_list[
                0].measure_sid
        else:
            assert measure.duty_list == []
def test_combine_duties(mock_combine_duties, measure_list,
                        expected_combine_duties_call_count):
    mock_combine_duties.return_value = None
    application = mock.MagicMock(country_name='spain')
    document = Document(application)
    document.measure_list = [
        get_measure(measure_sid=measure_sid) for measure_sid in measure_list
    ]
    document.combine_duties()
    assert mock_combine_duties.call_count == expected_combine_duties_call_count