/
/
1"""Tests for external media identifier helpers."""
2
3from music_assistant_models.enums import ExternalID
4
5from music_assistant.helpers.external_ids import (
6 barcode_to_upc,
7 external_id_lookup_values,
8 external_id_lookup_values_untyped,
9 is_valid_barcode,
10 normalize_external_id,
11 normalize_external_ids,
12)
13
14
15def test_normalize_gtin_variants() -> None:
16 """Equivalent UPC/EAN/GTIN representations normalize to GTIN-14."""
17 canonical = "00724354283857"
18
19 assert normalize_external_id(ExternalID.BARCODE, "724354283857") == canonical
20 assert normalize_external_id(ExternalID.BARCODE, "0724354283857") == canonical
21 assert normalize_external_id(ExternalID.BARCODE, canonical) == canonical
22 assert normalize_external_id(ExternalID.BARCODE, "000724354283857") == canonical
23
24
25def test_invalid_gtin_is_preserved() -> None:
26 """Invalid provider barcode data remains available for exact matching."""
27 assert normalize_external_id(ExternalID.BARCODE, "0724354283858") == "0724354283858"
28 assert normalize_external_id(ExternalID.BARCODE, "catalog-123") == "catalog-123"
29
30
31def test_legacy_gtin_lookup_values() -> None:
32 """A canonical barcode lookup includes legacy zero-padded storage forms."""
33 values = external_id_lookup_values(ExternalID.BARCODE, "0724354283857")
34
35 assert "724354283857" in values
36 assert "0724354283857" in values
37 assert "00724354283857" in values
38 assert "000724354283857" in values
39
40
41def test_untyped_lookup_values_and_itunes_upc() -> None:
42 """Untyped lookups normalize formatted IDs and canonical GTINs convert to UPC."""
43 assert "USRC17607839" in external_id_lookup_values_untyped("US-RC1-76-07839")
44 assert barcode_to_upc("00724354283857") == "724354283857"
45
46
47def test_normalize_isrc_and_mbid() -> None:
48 """Formatted ISRCs and MusicBrainz UUIDs use canonical representations."""
49 mbid = "B1A9C0E9-D987-4042-AE91-78D6A3267D69"
50
51 assert normalize_external_id(ExternalID.ISRC, "us-rc1-76-07839") == "USRC17607839"
52 assert normalize_external_id(ExternalID.ISRC, "invalid-isrc") == "invalid-isrc"
53 assert normalize_external_id(ExternalID.MB_RECORDING, f"{{{mbid}}}") == mbid.lower()
54
55
56def test_normalize_external_ids_deduplicates_values() -> None:
57 """Equivalent identifier forms collapse to one canonical pair."""
58 result = normalize_external_ids(
59 {
60 (ExternalID.BARCODE, "0724354283857"),
61 (ExternalID.BARCODE, "000724354283857"),
62 }
63 )
64
65 assert result == {(ExternalID.BARCODE, "00724354283857")}
66
67
68def test_is_valid_barcode() -> None:
69 """A structurally valid GTIN is recognized regardless of UPC/EAN notation."""
70 assert is_valid_barcode("888072439412") is True
71 assert is_valid_barcode("0888072439412") is True
72 assert is_valid_barcode("00888072439412") is True
73 # bad check digit, wrong length or non-numeric data is not a usable barcode
74 assert is_valid_barcode("602445790392") is False
75 assert is_valid_barcode("12345") is False
76 assert is_valid_barcode("catalog-123") is False
77