"""Test art_relations module.""" import json import sys import pytest from src.common.utils import compress_payload from src.common.utils import decompress_payload SFN_PAYLOAD_LIMIT_BYTES = 262144 class TestPayloadCompressDecompress: """Test payload compress and decompress functions.""" @pytest.fixture def big_product_metadata(self): """Mock a product with a high number of tracks and its participations.""" participation_mock = { 'participated_as': 'track_writer', 'participant': { 'uuid': '4a003746f7-dff1-4e96-afb5-54db6dbec3', 'name': 'Some Test Participant Name', 'appleMusicId': '12345678', 'spotifyId': 'Ss3JN0yXE3aLRufBGvsefF' } } track_mock = { 'isrc': 'ABCDE12345678', 'tuid': '123456789', 'participations': [participation_mock for _ in range(5)], 'labelSoundRecording': { 'id': '54db6dbec3-4e96-dff1-afx3-4a003746f7', 'isrc': 'ABCDE12345678' } } json_metadata = { 'data': { 'product': { 'product_id': 123456789, 'upc': '123456789000', 'participations': [participation_mock for _ in range(10)], 'tracks': [track_mock for _ in range(400)] } } } return json_metadata @pytest.fixture def original_size(self, big_product_metadata): """Mock of payloads original size in bytes.""" return sys.getsizeof(json.dumps(big_product_metadata)) def test_compress_payload(self, big_product_metadata, original_size): """Test compress payload function.""" compressed = compress_payload(big_product_metadata) compressed_size = sys.getsizeof(json.dumps(compressed)) assert compressed_size < original_size assert compressed_size < SFN_PAYLOAD_LIMIT_BYTES def test_decompress_payload(self, big_product_metadata, original_size): """Test decompress payload function.""" compressed = compress_payload(big_product_metadata) decompressed = decompress_payload(compressed) decompressed_size = sys.getsizeof(json.dumps(decompressed)) decompressed_tracks = decompressed['data']['product']['tracks'] assert decompressed_size == original_size assert len(decompressed_tracks) == len(big_product_metadata['data']['product']['tracks'])