From a1eef8ed985d2f5fd33f6919054b19deadb44e0c Mon Sep 17 00:00:00 2001 From: dicenull Date: Tue, 3 Sep 2024 23:05:40 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=9A=2024=E4=BB=A5=E5=86=85=E4=BA=A4?= =?UTF-8?q?=E6=B5=81=E3=81=AE=E3=83=86=E3=82=B9=E3=83=88=E3=82=B1=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E3=82=92=E5=A2=97=E3=82=84=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deno.lock | 2 + tests/distilled_user_test.js | 103 ++++++++++++++++++++++++++++++----- 2 files changed, 92 insertions(+), 13 deletions(-) diff --git a/deno.lock b/deno.lock index 9249366..19336b5 100644 --- a/deno.lock +++ b/deno.lock @@ -31,6 +31,8 @@ "https://deno.land/std@0.151.0/path/posix.ts": "c1f7afe274290ea0b51da07ee205653b2964bd74909a82deb07b69a6cc383aaa", "https://deno.land/std@0.151.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9", "https://deno.land/std@0.151.0/path/win32.ts": "bd7549042e37879c68ff2f8576a25950abbfca1d696d41d82c7bca0b7e6f452c", + "https://deno.land/std@0.193.0/testing/_test_suite.ts": "30f018feeb3835f12ab198d8a518f9089b1bcb2e8c838a8b615ab10d5005465c", + "https://deno.land/std@0.193.0/testing/bdd.ts": "0c760348442712ca3ae6102dbb3aa76b49a95ee08fee86c8a0932de53a00e308", "https://deno.land/std@0.224.0/assert/_constants.ts": "a271e8ef5a573f1df8e822a6eb9d09df064ad66a4390f21b3e31f820a38e0975", "https://deno.land/std@0.224.0/assert/assert.ts": "09d30564c09de846855b7b071e62b5974b001bb72a4b797958fe0660e7849834", "https://deno.land/std@0.224.0/assert/assert_almost_equals.ts": "9e416114322012c9a21fa68e187637ce2d7df25bcbdbfd957cd639e65d3cf293", diff --git a/tests/distilled_user_test.js b/tests/distilled_user_test.js index fb91bfa..2380b4b 100644 --- a/tests/distilled_user_test.js +++ b/tests/distilled_user_test.js @@ -1,21 +1,98 @@ +import { + afterAll, + afterEach, + beforeAll, + describe, + it, +} from "https://deno.land/std@0.193.0/testing/bdd.ts"; import { assertEquals } from "https://deno.land/std@0.224.0/assert/mod.ts"; import { distilledUserWithin24Hours } from "../library/distilled_user_within_24hour.js"; import { getNowTime } from "../library/get_time.js"; -Deno.test("24時間以内に交流したユーザだけ取得できる", async () => { - const kv = await Deno.openKv(); - const user1 = { User: 2, time: getNowTime() }; - const user2 = { User: 3, time: getNowTime() }; - kv.set(["SP", 1, 2], user1); - kv.set(["SP", 2, 3], user2); +describe("24時間以内に交流したユーザ判定", () => { + let kv; - const userList = await distilledUserWithin24Hours(1, kv); + beforeAll(async () => { + kv = await Deno.openKv(":memory:"); + }); - assertEquals(userList, [{ - sourceId: 1, - destinationId: 2, - time: user1.time, - }]); + afterAll(async () => { + await kv.close(); + }); - await kv.close(); + afterEach(async () => { + for await (const entry of kv.list({ prefix: [] })) { + await kv.delete(entry.key); + } + }); + + it("ユーザがSPを贈ると、交流したとこになる", async () => { + const user = { User: 2, time: getNowTime() }; + kv.set(["SP", 1, 100], user); + + const userList = await distilledUserWithin24Hours(1, kv); + + assertEquals(userList, [{ + sourceId: 1, + destinationId: 2, + time: user.time, + }]); + }); + + it("ユーザがSPを貰っても、交流したことになる", async () => { + const user = { User: 1, time: getNowTime() }; + kv.set(["SP", 2, 100], user); + + const userList = await distilledUserWithin24Hours(1, kv); + + assertEquals(userList, [{ + sourceId: 2, + destinationId: 1, + time: user.time, + }]); + }); + + it("交流履歴があるユーザだけ取得できる", async () => { + const user1 = { User: 2, time: getNowTime() }; + const user2 = { User: 3, time: getNowTime() }; + kv.set(["SP", 1, 100], user1); + kv.set(["SP", 2, 101], user2); + + const userList = await distilledUserWithin24Hours(1, kv); + + assertEquals(userList, [{ + sourceId: 1, + destinationId: 2, + time: user1.time, + }]); + }); + + it("24時間以内に交流したユーザだけ取得できる", async () => { + // 1日前に交流したユーザ + const user1 = { + User: 2, + time: new Date(getNowTime()).getTime() - 24 * 60 * 60 * 1000, + }; + // 1時間前に交流したユーザ + const user2 = { + User: 3, + time: new Date(getNowTime()).getTime() - 60 * 60 * 1000, + }; + // 1週間に交流したユーザ + const user3 = { + User: 4, + time: new Date(getNowTime()).getTime() - 7 * 24 * 60 * 60 * 1000, + }; + kv.set(["SP", 1, 100], user1); + kv.set(["SP", 1, 101], user2); + kv.set(["SP", 1, 102], user3); + + const userList = await distilledUserWithin24Hours(1, kv); + + assertEquals(userList, [{ + sourceId: 1, + destinationId: 3, + time: user2.time, + }]); + }); });