feat: LibraryItem.requestId nullable (scanned haves need no request) + test cleanup
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "LibraryItem" ALTER COLUMN "requestId" DROP NOT NULL;
|
||||||
@@ -72,8 +72,8 @@ model Candidate {
|
|||||||
|
|
||||||
model LibraryItem {
|
model LibraryItem {
|
||||||
id String @id @default(cuid())
|
id String @id @default(cuid())
|
||||||
request Request @relation(fields: [requestId], references: [id], onDelete: Cascade)
|
request Request? @relation(fields: [requestId], references: [id], onDelete: Cascade)
|
||||||
requestId String @unique
|
requestId String? @unique
|
||||||
artist String
|
artist String
|
||||||
album String
|
album String
|
||||||
path String
|
path String
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ beforeEach(async () => {
|
|||||||
// Job cascades from Request; Request.monitoredReleaseId is SetNull. Delete children first.
|
// Job cascades from Request; Request.monitoredReleaseId is SetNull. Delete children first.
|
||||||
await prisma.job.deleteMany();
|
await prisma.job.deleteMany();
|
||||||
await prisma.request.deleteMany();
|
await prisma.request.deleteMany();
|
||||||
|
await prisma.libraryItem.deleteMany();
|
||||||
await prisma.monitoredRelease.deleteMany();
|
await prisma.monitoredRelease.deleteMany();
|
||||||
await prisma.watchedArtist.deleteMany();
|
await prisma.watchedArtist.deleteMany();
|
||||||
await prisma.config.deleteMany();
|
await prisma.config.deleteMany();
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ def conn():
|
|||||||
with connection.cursor() as cur:
|
with connection.cursor() as cur:
|
||||||
cur.execute('DELETE FROM "Job"')
|
cur.execute('DELETE FROM "Job"')
|
||||||
cur.execute('DELETE FROM "Request"')
|
cur.execute('DELETE FROM "Request"')
|
||||||
|
cur.execute('DELETE FROM "LibraryItem"')
|
||||||
cur.execute('DELETE FROM "MonitoredRelease"')
|
cur.execute('DELETE FROM "MonitoredRelease"')
|
||||||
cur.execute('DELETE FROM "WatchedArtist"')
|
cur.execute('DELETE FROM "WatchedArtist"')
|
||||||
cur.execute('DELETE FROM "Config"')
|
cur.execute('DELETE FROM "Config"')
|
||||||
@@ -33,6 +34,7 @@ def conn():
|
|||||||
with connection.cursor() as cur:
|
with connection.cursor() as cur:
|
||||||
cur.execute('DELETE FROM "Job"')
|
cur.execute('DELETE FROM "Job"')
|
||||||
cur.execute('DELETE FROM "Request"')
|
cur.execute('DELETE FROM "Request"')
|
||||||
|
cur.execute('DELETE FROM "LibraryItem"')
|
||||||
cur.execute('DELETE FROM "MonitoredRelease"')
|
cur.execute('DELETE FROM "MonitoredRelease"')
|
||||||
cur.execute('DELETE FROM "WatchedArtist"')
|
cur.execute('DELETE FROM "WatchedArtist"')
|
||||||
cur.execute('DELETE FROM "Config"')
|
cur.execute('DELETE FROM "Config"')
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
def test_library_item_can_have_null_request(conn):
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
cur.execute(
|
||||||
|
'INSERT INTO "LibraryItem" (id, "requestId", artist, album, path, source, format, '
|
||||||
|
'"qualityClass", "importedAt") '
|
||||||
|
"VALUES (gen_random_uuid()::text, NULL, 'A', 'B', '/m/A/B', 'scan', 'FLAC', 2, now()) "
|
||||||
|
"RETURNING id"
|
||||||
|
)
|
||||||
|
lib_id = cur.fetchone()[0]
|
||||||
|
conn.commit()
|
||||||
|
with conn.cursor() as cur:
|
||||||
|
cur.execute('SELECT "requestId" FROM "LibraryItem" WHERE id = %s', (lib_id,))
|
||||||
|
assert cur.fetchone()[0] is None
|
||||||
Reference in New Issue
Block a user