"""Document utility tests.""" import pytest from utils import document import util # noqa LONG_ISRC_LIST = ['' for i in range(1024)] @pytest.mark.parametrize('source, cleaned', [ # remove 'fields' on delete ( { 'type': 'delete', 'id': 'rel5555', 'fields': { 'pizza': 'party' } }, { 'type': 'delete', 'id': 'rel5555' } ), # date_utc field formatting ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'sale_start_date': '2018-05-14', 'release_date': '2018-05-14' } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'sale_start_date': '2018-05-14T00:00:00Z', 'release_date': '2018-05-14T00:00:00Z' } } ), # date_utc field null ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 55555, 'sale_start_date': None, 'release_date': None, 'preorder_date': None } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 55555 } } ), # date_utc field zero ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 55555, 'sale_start_date': '0000-00-00', 'release_date': '0000-00-00', 'preorder_date': '0000-00-00' } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 55555 } } ), # date_utc field year is less than minimal ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 55555, 'sale_start_date': '0007-08-15', } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 55555 } } ), # date_utc field has stale data ( { 'type': 'add', 'id': 'rel1111', 'fields': { 'release_id': 1111, 'sale_start_date': 'abcd-08-15', } }, { 'type': 'add', 'id': 'rel1111', 'fields': { 'release_id': 1111 } } ), # integer field is null ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': None, 'product_type_id': 0, 'release_date': '2018-05-14' } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'product_type_id': 0, 'release_date': '2018-05-14T00:00:00Z' } } ), # string value with unicode ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 5555, 'release_name': 'Hello\u0014', 'vendor_catalog_number': 'Hello\u0019 Pizza\u001a', 'track_list': ['Hello\u0019 Pizza\u001a'] } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 5555, 'release_name': 'Hello', 'vendor_catalog_number': 'Hello Pizza', 'track_list': ['Hello Pizza'] } } ), # string value empty ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 5555, 'product_code': None, 'vendor_catalog_number': '' } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 5555, 'vendor_catalog_number': '' } } ), # array value empty ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'isrc_list': None, 'track_list': [ 'bees', 'lasers', 'pizza' ] } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'isrc_list': [], 'track_list': [ 'bees', 'lasers', 'pizza' ] } } ), # fields translate to {} ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': None, 'release_name': None, 'sale_start_date': None } }, False ), # long ISRC list ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'isrc_list': LONG_ISRC_LIST } }, False ), # long track_type list ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'track_type': LONG_ISRC_LIST } }, False ), # not existing field ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 5555, 'vendor_catalog_number': '', 'non_existing_field': 'remove me' } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 5555, 'vendor_catalog_number': '' } } ), # not_for_distribution field has AccountingDummy ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 5555, 'not_for_distribution': 'AccountingDummy' } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 5555, 'not_for_distribution': 'AccountingDummy' } } ), # not_for_distribution field is blank ( { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 5555, 'not_for_distribution': None } }, { 'type': 'add', 'id': 'rel5555', 'fields': { 'release_id': 5555, } } ), ]) def test_prepare_for_upload(source, cleaned): """Test unicode cleanup.""" prepared = document.prepare_for_upload( util.parse_spec_file('releases'), source) assert cleaned == prepared