feat: schedule next airing episode

happens when new title is saved, or when new episode internal route is run successfully
This commit is contained in:
2024-09-09 03:53:34 -05:00
parent 38195776c2
commit 336701a84b
14 changed files with 353 additions and 19 deletions

View File

@@ -0,0 +1,16 @@
import { HttpResponse, graphql } from "msw";
export function getAnilistNextAiringEpisode() {
return graphql.query(
"GetNextEpisodeAiringAt",
({ variables: { titleId } }) => {
return HttpResponse.json({
data: {
Media: {
nextAiringEpisode: null,
},
},
});
},
);
}

View File

@@ -3,6 +3,7 @@ import { getAnifySources } from "./anify/sources";
import { getAnifyTitle } from "./anify/title";
import { deleteAnilistMediaListEntry } from "./anilist/deleteMediaListEntry";
import { getAnilistMediaListEntry } from "./anilist/mediaListEntry";
import { getAnilistNextAiringEpisode } from "./anilist/nextAiringEpisode";
import { getAnilistSearchResults } from "./anilist/search";
import { getAnilistTitle } from "./anilist/title";
import { updateAnilistWatchStatus } from "./anilist/updateWatchStatus";
@@ -14,6 +15,7 @@ import { mockFcmMessageResponse } from "./fcm";
export const handlers = [
deleteAnilistMediaListEntry(),
getAnilistMediaListEntry(),
getAnilistNextAiringEpisode(),
getAnilistSearchResults(),
getAnilistTitle(),
updateAnilistWatchStatus(),

View File

@@ -2,9 +2,14 @@ import { SignatureError } from "@upstash/qstash";
import { mock } from "bun:test";
class MockQstashMessages {
delete = mock();
}
class MockQstashClient {
batchJSON = mock();
publishJSON = mock();
publishJSON = mock().mockResolvedValue({ messageId: "123" });
messages = new MockQstashMessages();
}
class MockQstashReceiver {