feat: support removing watch status when null

A user can choose to remove a show from being in their media list completely, by setting the watch status to null
This commit is contained in:
2024-07-04 18:18:57 -04:00
parent ad84175d6b
commit 2becf1aa3b
8 changed files with 222 additions and 11 deletions

View File

@@ -1,3 +1,5 @@
import { eq } from "drizzle-orm";
import { beforeEach, describe, expect, it } from "bun:test";
import app from "~/index";
@@ -5,7 +7,7 @@ import { getTestDb } from "~/libs/test/getTestDb";
import { getTestEnv } from "~/libs/test/getTestEnv";
import { resetTestDb } from "~/libs/test/resetTestDb";
import { server } from "~/mocks";
import { deviceTokensTable } from "~/models/schema";
import { deviceTokensTable, watchStatusTable } from "~/models/schema";
server.listen();
@@ -89,4 +91,109 @@ describe("requests the /watch-status route", () => {
expect(res.json()).resolves.toEqual({ success: true });
expect(res.status).toBe(200);
});
it("watch status is null, should succeed", async () => {
await db
.insert(deviceTokensTable)
.values({ deviceId: "123", token: "asd" });
const res = await app.request(
"/watch-status",
{
method: "POST",
headers: new Headers({
"x-anilist-token": "asd",
"Content-Type": "application/json",
}),
body: JSON.stringify({
deviceId: "123",
watchStatus: null,
titleId: 10,
}),
},
getTestEnv(),
);
expect(res.json()).resolves.toEqual({ success: true });
expect(res.status).toBe(200);
});
it("watch status is null, title does not exist, should succeed", async () => {
await db
.insert(deviceTokensTable)
.values({ deviceId: "123", token: "asd" });
const res = await app.request(
"/watch-status",
{
method: "POST",
headers: new Headers({
"x-anilist-token": "asd",
"Content-Type": "application/json",
}),
body: JSON.stringify({
deviceId: "123",
watchStatus: null,
titleId: -1,
}),
},
getTestEnv(),
);
expect(res.json()).resolves.toEqual({ success: true });
expect(res.status).toBe(200);
});
it("watch status is null, title exists, fails to delete entry, should succeed", async () => {
await db
.insert(deviceTokensTable)
.values({ deviceId: "123", token: "asd" });
const res = await app.request("/watch-status", {
method: "POST",
headers: new Headers({
"x-anilist-token": "asd",
"Content-Type": "application/json",
}),
body: JSON.stringify({
deviceId: "123",
watchStatus: null,
titleId: 139518,
}),
});
expect(res.json()).resolves.toEqual({ success: true });
expect(res.status).toBe(200);
});
it("watch status is null, should delete entry", async () => {
await db
.insert(deviceTokensTable)
.values({ deviceId: "123", token: "asd" });
await db.insert(watchStatusTable).values({ deviceId: "123", titleId: 10 });
await app.request(
"/watch-status",
{
method: "POST",
headers: new Headers({
"x-anilist-token": "asd",
"Content-Type": "application/json",
}),
body: JSON.stringify({
deviceId: "123",
watchStatus: null,
titleId: 10,
}),
},
getTestEnv(),
);
const row = await db
.select()
.from(watchStatusTable)
.where(eq(watchStatusTable.titleId, 10))
.get();
expect(row).toBeUndefined();
});
});