def test_normalize_field_categories_skips_normalized_fields():
    json_dict = {
        'field_categories': [
            {
                'scheme': 'INSPIRE'
            },
            {
                '_scheme': 'foo'
            },
            {
                '_term': 'bar'
            },
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            'scheme': 'INSPIRE'
        },
        {
            '_scheme': 'foo'
        },
        {
            '_term': 'bar'
        },
    ]
def test_normalize_field_categories_skips_normalized_fields():
    json_dict = {
        'field_categories': [
            {'scheme': 'INSPIRE'},
            {'_scheme': 'foo'},
            {'_term': 'bar'},
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {'scheme': 'INSPIRE'},
        {'_scheme': 'foo'},
        {'_term': 'bar'},
    ]
def test_normalize_field_categories_selects_first_scheme():
    json_dict = {
        'field_categories': [
            {'scheme': ['foo', 'bar']},
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': 'foo',
            'scheme': None,
            '_term': None,
            'term': None,
        },
    ]
def test_normalize_field_categories_ignores_missing_terms():
    json_dict = {
        'field_categories': [
            {'scheme': 'foo'},
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': 'foo',
            'scheme': None,
            '_term': None,
            'term': None,
        },
    ]
def test_normalize_field_categories_changes_source_to_inspire():
    json_dict = {
        'field_categories': [
            {'source': 'automatically'},
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': None,
            'scheme': None,
            '_term': None,
            'term': None,
            'source': 'INSPIRE',
        },
    ]
def test_normalize_field_categories_retains_source():
    json_dict = {
        'field_categories': [
            {'source': 'foo'},
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': None,
            'scheme': None,
            '_term': None,
            'term': None,
            'source': 'foo',
        },
    ]
def test_normalize_field_categories_selects_first_scheme():
    json_dict = {
        'field_categories': [
            {
                'scheme': ['foo', 'bar']
            },
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': 'foo',
            'scheme': None,
            '_term': None,
            'term': None,
        },
    ]
def test_normalize_field_categories_ignores_missing_terms():
    json_dict = {
        'field_categories': [
            {
                'scheme': 'foo'
            },
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': 'foo',
            'scheme': None,
            '_term': None,
            'term': None,
        },
    ]
def test_normalize_field_categories_ignores_unknown_terms_from_unknown_schemes():
    json_dict = {
        'field_categories': [
            {
                'scheme': 'foo',
                'term': 'bar',
            },
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': 'foo',
            'scheme': None,
            '_term': 'bar',
            'term': 'Other',
        },
    ]
def test_normalize_field_categories_recognizes_known_terms():
    json_dict = {
        'field_categories': [
            {
                'scheme': 'foo',
                'term': 'alg-geom',
            },
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': 'foo',
            'scheme': 'INSPIRE',
            '_term': 'alg-geom',
            'term': 'Math and Math Physics',
        },
    ]
def test_normalize_field_categories_changes_source_to_inspire():
    json_dict = {
        'field_categories': [
            {
                'source': 'automatically'
            },
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': None,
            'scheme': None,
            '_term': None,
            'term': None,
            'source': 'INSPIRE',
        },
    ]
def test_normalize_field_categories_retains_source():
    json_dict = {
        'field_categories': [
            {
                'source': 'foo'
            },
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': None,
            'scheme': None,
            '_term': None,
            'term': None,
            'source': 'foo',
        },
    ]
def test_normalize_field_categories_recognizes_known_terms():
    json_dict = {
        'field_categories': [
            {
                'scheme': 'foo',
                'term': 'alg-geom',
            },
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': 'foo',
            'scheme': 'INSPIRE',
            '_term': 'alg-geom',
            'term': 'Math and Math Physics',
        },
    ]
def test_normalize_field_categories_ignores_unknown_terms_from_unknown_schemes(
):
    json_dict = {
        'field_categories': [
            {
                'scheme': 'foo',
                'term': 'bar',
            },
        ],
    }

    normalize_field_categories(json_dict)

    assert json_dict['field_categories'] == [
        {
            '_scheme': 'foo',
            'scheme': None,
            '_term': 'bar',
            'term': 'Other',
        },
    ]