84 lines
3.5 KiB
Python
84 lines
3.5 KiB
Python
from lyra_worker.monitor import MonitorConfig, enqueue_due
|
|
from tests.conftest import insert_monitored_release
|
|
|
|
CFG = MonitorConfig(enabled=True, retry_interval_hours=6, quality_cutoff=2, upgrade_window_days=14)
|
|
|
|
|
|
def _job_count_for(conn, rel_id):
|
|
with conn.cursor() as cur:
|
|
cur.execute(
|
|
'SELECT count(*) FROM "Request" r JOIN "Job" j ON j."requestId" = r.id '
|
|
'WHERE r."monitoredReleaseId" = %s',
|
|
(rel_id,),
|
|
)
|
|
return cur.fetchone()[0]
|
|
|
|
|
|
def _state(conn, rel_id):
|
|
with conn.cursor() as cur:
|
|
cur.execute('SELECT state FROM "MonitoredRelease" WHERE id = %s', (rel_id,))
|
|
return cur.fetchone()[0]
|
|
|
|
|
|
def test_enqueues_a_wanted_release(conn):
|
|
rel_id = insert_monitored_release(conn, artist_name="John Mayer", album="Continuum",
|
|
rg_mbid="rg-1", monitored=True, state="wanted")
|
|
assert enqueue_due(conn, CFG) == 1
|
|
assert _job_count_for(conn, rel_id) == 1
|
|
with conn.cursor() as cur:
|
|
cur.execute(
|
|
'SELECT artist, album FROM "Request" WHERE "monitoredReleaseId" = %s', (rel_id,)
|
|
)
|
|
assert cur.fetchone() == ("John Mayer", "Continuum")
|
|
|
|
|
|
def test_skips_unmonitored_and_fulfilled(conn):
|
|
insert_monitored_release(conn, rg_mbid="rg-a", monitored=False, state="wanted")
|
|
insert_monitored_release(conn, rg_mbid="rg-b", monitored=True, state="fulfilled")
|
|
assert enqueue_due(conn, CFG) == 0
|
|
|
|
|
|
def test_skips_when_recently_searched(conn):
|
|
insert_monitored_release(conn, rg_mbid="rg-1", monitored=True, state="wanted",
|
|
last_searched_sql="now() - interval '1 hour'") # < 6h retry
|
|
assert enqueue_due(conn, CFG) == 0
|
|
|
|
|
|
def test_skips_release_with_active_job(conn):
|
|
rel_id = insert_monitored_release(conn, rg_mbid="rg-1", monitored=True, state="wanted")
|
|
assert enqueue_due(conn, CFG) == 1 # first sweep enqueues
|
|
assert enqueue_due(conn, CFG) == 0 # active (requested) job blocks a second
|
|
|
|
|
|
def test_grabbed_within_window_below_cutoff_re_searches(conn):
|
|
rel_id = insert_monitored_release(conn, rg_mbid="rg-1", monitored=True, state="grabbed",
|
|
current_quality_class=1, first_grabbed_sql="now() - interval '1 day'")
|
|
assert enqueue_due(conn, CFG) == 1
|
|
|
|
|
|
def test_grabbed_past_window_is_fulfilled_not_enqueued(conn):
|
|
rel_id = insert_monitored_release(conn, rg_mbid="rg-1", monitored=True, state="grabbed",
|
|
current_quality_class=1, first_grabbed_sql="now() - interval '30 days'")
|
|
assert enqueue_due(conn, CFG) == 0
|
|
assert _state(conn, rel_id) == "fulfilled"
|
|
|
|
|
|
def test_already_in_library_at_cutoff_is_fulfilled(conn):
|
|
rel_id = insert_monitored_release(conn, artist_name="A", album="B", rg_mbid="rg-1",
|
|
monitored=True, state="wanted")
|
|
with conn.cursor() as cur:
|
|
cur.execute(
|
|
'INSERT INTO "Request" (id, artist, album, status, "createdAt") '
|
|
"VALUES (gen_random_uuid()::text, 'A', 'B', 'completed', now()) RETURNING id"
|
|
)
|
|
req = cur.fetchone()[0]
|
|
cur.execute(
|
|
'INSERT INTO "LibraryItem" (id, "requestId", artist, album, path, source, format, '
|
|
'"qualityClass", "importedAt") '
|
|
"VALUES (gen_random_uuid()::text, %s, 'A', 'B', '/m/A/B', 'qobuz', 'FLAC', 2, now())",
|
|
(req,),
|
|
)
|
|
conn.commit()
|
|
assert enqueue_due(conn, CFG) == 0
|
|
assert _state(conn, rel_id) == "fulfilled"
|