refactor: rename drop functions for clarity and update tests
This commit is contained in:
@@ -69,18 +69,18 @@ for (const k of baseResponse) {
|
|||||||
hyperlinkarray.push(k.file_url);
|
hyperlinkarray.push(k.file_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function drop() {
|
export async function dropRule() {
|
||||||
if (hyperlinkarray.length === 0) {
|
if (hyperlinkarray.length === 0) {
|
||||||
await refresh();
|
await refresh();
|
||||||
return await drop();
|
return await dropRule();
|
||||||
}
|
}
|
||||||
return hyperlinkarray.pop()!;
|
return hyperlinkarray.pop()!;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function drop5() {
|
export async function dropRule5() {
|
||||||
let tmp = "";
|
let tmp = "";
|
||||||
for (let i = 0; i < 5; i++) {
|
for (let i = 0; i < 5; i++) {
|
||||||
tmp += await drop() + "\n";
|
tmp += await dropRule() + "\n";
|
||||||
}
|
}
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Bot, Message } from "npm:discordeno@18.0.1";
|
import { Bot, Message } from "npm:discordeno@18.0.1";
|
||||||
import { drop5, drop, refresh } from "./api.ts";
|
import { dropRule5, dropRule, refresh } from "./api.ts";
|
||||||
import { logMessage } from "@root/logging.ts";
|
import { logMessage } from "@root/logging.ts";
|
||||||
import { defaultString } from "@root/defaultString.ts";
|
import { defaultString } from "@root/defaultString.ts";
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ export async function rule34MessageHandler(bot: Bot, message: Message) {
|
|||||||
message.guildId === undefined
|
message.guildId === undefined
|
||||||
) {
|
) {
|
||||||
bot.helpers.sendMessage(message.channelId, {
|
bot.helpers.sendMessage(message.channelId, {
|
||||||
content: defaultString(await drop()),
|
content: defaultString(await dropRule()),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -24,7 +24,7 @@ export async function rule34MessageHandler(bot: Bot, message: Message) {
|
|||||||
message.guildId === undefined
|
message.guildId === undefined
|
||||||
) {
|
) {
|
||||||
bot.helpers.sendMessage(message.channelId, {
|
bot.helpers.sendMessage(message.channelId, {
|
||||||
content: defaultString(await drop5()),
|
content: defaultString(await dropRule5()),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { assert } from "jsr:@std/assert"
|
import { assert } from "jsr:@std/assert";
|
||||||
import {refresh, drop} from "@root/plugins/rule34/api.ts"
|
import { dropRule, refresh } from "@root/plugins/rule34/api.ts";
|
||||||
|
|
||||||
Deno.test("Test Drop", async() => {
|
Deno.test("Test Drop", async () => {
|
||||||
await refresh()
|
await refresh();
|
||||||
const link = await drop()
|
const link = await dropRule();
|
||||||
assert(link !== "", "Empty String was dropped!")
|
assert(link !== "", "Empty String was dropped!");
|
||||||
})
|
});
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
const apiUrl ="https://yande.re/post.json?api_version=2";
|
import { assert } from "@std/assert/assert";
|
||||||
|
|
||||||
|
const apiUrl = "https://yande.re/post.json?api_version=2";
|
||||||
|
|
||||||
type APIResponse = {
|
type APIResponse = {
|
||||||
posts: {
|
posts: {
|
||||||
@@ -49,7 +51,9 @@ type APIResponse = {
|
|||||||
|
|
||||||
let page = 1;
|
let page = 1;
|
||||||
|
|
||||||
let baseRequest = await fetch(apiUrl, { headers: { "Accept": "application/json" } })
|
let baseRequest = await fetch(apiUrl, {
|
||||||
|
headers: { "Accept": "application/json" },
|
||||||
|
})
|
||||||
.then(async (response) => {
|
.then(async (response) => {
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error("Network response was not ok");
|
throw new Error("Network response was not ok");
|
||||||
@@ -57,25 +61,26 @@ let baseRequest = await fetch(apiUrl, { headers: { "Accept": "application/json"
|
|||||||
return <APIResponse> await response.json();
|
return <APIResponse> await response.json();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const hyperlinkarray: string[] = [];
|
const hyperlinkarray: string[] = [];
|
||||||
for (const k of baseRequest.posts) {
|
for (const k of baseRequest.posts) {
|
||||||
hyperlinkarray.push(k.file_url);
|
hyperlinkarray.push(k.file_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setPage(newpage: number) {
|
export async function setPage(newpage: number) {
|
||||||
page = newpage;
|
page = newpage;
|
||||||
hyperlinkarray.length = 0;
|
hyperlinkarray.length = 0;
|
||||||
refresh();
|
await refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPage() {
|
export function getPage() {
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//duplicate code, also found in rule34/api.ts
|
||||||
export async function refresh() {
|
export async function refresh() {
|
||||||
await fetch(`${apiUrl}&page=${page}`, { headers: { "Accept": "application/json" } })
|
await fetch(`${apiUrl}&page=${page}`, {
|
||||||
|
headers: { "Accept": "application/json" },
|
||||||
|
})
|
||||||
.then(async (response) => {
|
.then(async (response) => {
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error("Network response was not ok");
|
throw new Error("Network response was not ok");
|
||||||
@@ -110,3 +115,14 @@ export async function dropYandere5() {
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Test Stack resize when fetching new data
|
||||||
|
Deno.test("Refresh Stack", async () => {
|
||||||
|
await refresh();
|
||||||
|
const previousStack = [...hyperlinkarray];
|
||||||
|
await new Promise((r) => setTimeout(r, 10000));
|
||||||
|
await refresh();
|
||||||
|
assert(
|
||||||
|
previousStack.length <= hyperlinkarray.length,
|
||||||
|
"Stack-size did not increase as expected!",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|||||||
32
src/plugins/yandere/test.ts
Normal file
32
src/plugins/yandere/test.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import { assert } from "@std/assert/assert";
|
||||||
|
import {
|
||||||
|
dropYandere,
|
||||||
|
getPage,
|
||||||
|
refresh,
|
||||||
|
setPage,
|
||||||
|
} from "@root/plugins/yandere/api.ts";
|
||||||
|
import { assertEquals } from "@std/assert/equals";
|
||||||
|
//tests
|
||||||
|
/*
|
||||||
|
get page,
|
||||||
|
switch page,
|
||||||
|
drop,
|
||||||
|
*/
|
||||||
|
|
||||||
|
Deno.test("Get default Page", async () => {
|
||||||
|
assertEquals(getPage(), 1);
|
||||||
|
});
|
||||||
|
|
||||||
|
Deno.test("Switching page", async () => {
|
||||||
|
assertEquals(getPage(), 1);
|
||||||
|
await setPage(2);
|
||||||
|
assertEquals(getPage(), 2);
|
||||||
|
await setPage(100);
|
||||||
|
assertEquals(getPage(), 100);
|
||||||
|
});
|
||||||
|
|
||||||
|
Deno.test("Test Drop", async () => {
|
||||||
|
await refresh();
|
||||||
|
const link = await dropYandere();
|
||||||
|
assert(link !== "", "Empty String was dropped!");
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user