"""Integrity checks for the station content banks (space/content.py).""" import os import sys sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) import content import arc # noqa: E402 def test_song_recs_well_formed(): have = 0 for s in content.SONGS: rb = s.get("recommended_by", "") if rb: have += 1 assert rb.startswith("@") and " " not in rb, rb assert have >= 8, "expected a healthy fraction of songs to carry a request" def test_rejoins_name_the_dj(): assert content.REJOINS for line in content.REJOINS: assert arc.DJ_NAME in line, line def test_caller_intros_nonempty(): assert content.CALLER_INTROS for line in content.CALLER_INTROS: assert isinstance(line, str) and len(line) > 10 def test_songs_have_required_fields_and_valid_enums(): assert len(content.SONGS) >= 24 pairs = set() for s in content.SONGS: for k in ("title", "artist", "vibe", "key", "scale", "tempo", "timbre"): assert k in s and s[k] != "", "song missing %s: %r" % (k, s) assert s["key"] in ( "C", "C#", "D", "Eb", "E", "F", "F#", "G", "Ab", "A", "Bb", "B" ), s["key"] assert s["scale"] in content.SCALES, s["scale"] assert s["timbre"] in content.TIMBRES, s["timbre"] assert 50 <= int(s["tempo"]) <= 100, s["tempo"] pairs.add((s["title"], s["artist"])) assert len(pairs) == len(content.SONGS), "duplicate title/artist pair" def test_other_banks_nonempty_and_shaped(): assert content.STATION_IDS and content.WEATHER and content.DEDICATIONS assert isinstance(content.SONIC_LOGO, str) and content.SONIC_LOGO for d in content.DEDICATIONS: assert "name" in d and "message" in d