From 3a2d940b65f8c26b3e5c0a79a4f0aab495bec0ac Mon Sep 17 00:00:00 2001 From: Aarav Borthakur Date: Mon, 30 Sep 2024 11:38:30 -0700 Subject: [PATCH] Remove v2-src clone and v2 tests, fix entry with name bug --- docs/package-lock.json | 95 +++++++++++ endpoints/db.py | 2 +- run.sh | 1 - tests/.mocharc.json | 2 +- tests/package.json | 3 +- tests/test/v2.ts | 354 ----------------------------------------- 6 files changed, 98 insertions(+), 359 deletions(-) create mode 100644 docs/package-lock.json delete mode 100644 tests/test/v2.ts diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 0000000..503bd03 --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,95 @@ +{ + "name": "hyrule-compendium-docs", + "version": "v3", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "hyrule-compendium-docs", + "version": "v3", + "license": "ISC", + "dependencies": { + "docsify": "^4.13.1" + } + }, + "node_modules/docsify": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/docsify/-/docsify-4.13.1.tgz", + "integrity": "sha512-BsDypTBhw0mfslw9kZgAspCMZSM+sUIIDg5K/t1hNLkvbem9h64ZQc71e1IpY+iWsi/KdeqfazDfg52y2Lmm0A==", + "hasInstallScript": true, + "dependencies": { + "marked": "^1.2.9", + "medium-zoom": "^1.0.6", + "opencollective-postinstall": "^2.0.2", + "prismjs": "^1.27.0", + "strip-indent": "^3.0.0", + "tinydate": "^1.3.0", + "tweezer.js": "^1.4.0" + } + }, + "node_modules/marked": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.9.tgz", + "integrity": "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">= 8.16.2" + } + }, + "node_modules/medium-zoom": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", + "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==" + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "bin": { + "opencollective-postinstall": "index.js" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tinydate": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", + "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/tweezer.js": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/tweezer.js/-/tweezer.js-1.5.0.tgz", + "integrity": "sha512-aSiJz7rGWNAQq7hjMK9ZYDuEawXupcCWgl3woQQSoDP2Oh8O4srWb/uO1PzzHIsrPEOqrjJ2sUb9FERfzuBabQ==" + } + } +} diff --git a/endpoints/db.py b/endpoints/db.py index 8016c6c..be3e176 100644 --- a/endpoints/db.py +++ b/endpoints/db.py @@ -113,7 +113,7 @@ def get_entry_with_name(self, name): def get_entry(self, id_or_name: str): if id_or_name.isnumeric(): return self.get_entry_with_id(int(id_or_name)) - return self.get_entry_with_name() + return self.get_entry_with_name(id_or_name) @abstractmethod def get_category(self, collection, category): diff --git a/run.sh b/run.sh index 153b62d..4e38d5b 100644 --- a/run.sh +++ b/run.sh @@ -1,3 +1,2 @@ set -e -git clone https://github.com/gadhagod/Hyrule-Compendium-API -b v2-src v2 gunicorn server:app $1 \ No newline at end of file diff --git a/tests/.mocharc.json b/tests/.mocharc.json index 7e401f3..fac6e31 100644 --- a/tests/.mocharc.json +++ b/tests/.mocharc.json @@ -1,5 +1,5 @@ { "timeout": 20000, "require": "ts-node/register", - "file": ["test/v3/index.ts", "test/v2.ts"] + "file": ["test/v3/index.ts"] } diff --git a/tests/package.json b/tests/package.json index f9471d3..c9ade3e 100644 --- a/tests/package.json +++ b/tests/package.json @@ -8,8 +8,7 @@ }, "scripts": { "test": "npx mocha", - "test:v3": "npx mocha -g v3", - "test:v2": "npx mocha -g v2" + "test:v3": "npx mocha -g v3" }, "repository": { "type": "git", diff --git a/tests/test/v2.ts b/tests/test/v2.ts deleted file mode 100644 index 507c34f..0000000 --- a/tests/test/v2.ts +++ /dev/null @@ -1,354 +0,0 @@ -import assert from "assert"; -import request from "request"; -import fs from "fs"; -import readChunk from 'read-chunk'; -import imageType from 'image-type'; -import { APIImageRequest, Entry } from "./types"; -import { validateMIMEType } from "validate-image-type"; - -if (fs.existsSync("out")) { - fs.rmdirSync("out", { recursive: true }); -} -fs.mkdirSync("out"); - -function makeReq( - endpoint: string, - callback: (arg0: any, arg1: any) => void, - image: false | APIImageRequest = false -) { - let url = `${(process.env.URL ?? "https://botw-compendium.herokuapp.com") + "/api/v2"}${endpoint}`; - if (image) { - request.head(url, (_err: any, res: any) => { - request(url) - .pipe(fs.createWriteStream((image as APIImageRequest).filename)) - .on("close", callback); - }); - } else { - request( - { - url: url, - jar: true, - followAllRedirects: false, - }, - callback - ); - } -} - -describe("v2", () => { - - describe("Server HTTP codes", () => { - describe("`/entry/<>` endpoint", () => { - it("should have 200 code", (done) => { - makeReq("/entry/1", (_err, res) => { - assert.equal(res.statusCode, 200, `Entry 1 responded with code ${res.statusCode}`) - done() - }) - }); - }); - describe("`/master_mode/entry/<>` endpoint", () => { - it("should have 200 code", (done) => { - makeReq("/master_mode/entry/97", (_err, res) => { - assert.equal(res.statusCode, 200, `DLC Entry 97 responded with code ${res.statusCode}`) - done() - }) - }); - }); - describe("`/category/<>` endpoint", () => { - it("should have 200 code", (done) => { - makeReq("/category/monsters", (_err, res) => { - assert.equal(res.statusCode, 200, `Responded with code ${res.statusCode}`) - done() - }) - }); - }); - describe("`/master_mode` endpoint", () => { - it("should have 200 code", (done) => { - makeReq("/master_mode", (_err, res) => { - assert.equal(res.statusCode, 200, `DLC Entry 97 responded with code ${res.statusCode}`) - done() - }) - }); - }); - describe("`/` endpoint", () => { - it("should have 200 code", (done) => { - makeReq("", (_err, res) => { - assert.equal(res.statusCode, 200, `Responded with code ${res.statusCode}`) - done() - }) - }); - }); - }); - - describe("API response contents", () => { - describe("Entries", () => { - describe("Creature entry", () => { - let entry = "thunderwing butterfly" - it("should have expected fields", (done) => { - makeReq(`/entry/${entry}`, (_err, res) => { - assert.deepEqual( - Object.keys( - JSON.parse(res.body).data - ), - ["category", "common_locations", "cooking_effect", "description", "hearts_recovered", "id", "image", "name"], - `Responded with incorrect fields.` - ) - done() - }) - }); - it("should have working image", (done) => { - makeReq(`/entry/${entry}/image`, () => { - const buffer = readChunk.sync(`out/${entry}.png`, 0, 26); - assert.equal(imageType(buffer).mime, "image/png"); - done() - }, { filename: `out/${entry}.png` }) - }); - }); - describe("Equipment entry", () => { - let entry = "golden claymore" - it("should have expected fields", (done) => { - makeReq(`/entry/${entry}`, (_err, res) => { - assert.deepEqual( - Object.keys( - JSON.parse(res.body).data - ), - ["attack", "category", "common_locations", "defense", "description", "id", "image", "name"], - `Responded with incorrect fields.` - ) - done() - }) - }); - it("should have working image", (done) => { - makeReq(`/entry/${entry}/image`, () => { - const buffer = readChunk.sync(`out/${entry}.png`, 0, 26); - assert.equal(imageType(buffer).mime, "image/png") - done() - }, { filename: `out/${entry}.png` }) - }); - }); - describe("Material entry", () => { - let entry = "palm fruit" - it("should have expected fields", (done) => { - makeReq(`/entry/${entry}`, (_err, res) => { - assert.deepEqual( - Object.keys( - JSON.parse(res.body).data - ), - ["category", "common_locations", "cooking_effect", "description", "hearts_recovered", "id", "image", "name"], - `Responded with incorrect fields.` - ) - done() - }) - }); - it("should have working image", (done) => { - makeReq(`/entry/${entry}/image`, () => { - const buffer = readChunk.sync(`out/${entry}.png`, 0, 12); - assert.equal(imageType(buffer).mime, "image/png"); - done() - }, { filename: `out/${entry}.png` }) - }); - }); - describe("Monster entry", () => { - let entry = "molduga" - it("should have expected fields", (done) => { - makeReq(`/entry/${entry}`, (_err, res) => { - assert.deepEqual( - Object.keys( - JSON.parse(res.body).data - ), - ["category", "common_locations", "description", "drops", "id", "image", "name"], - `Responded with incorrect fields.` - ) - done() - }) - }); - it("should have working image", (done) => { - makeReq(`/entry/${entry}/image`, () => { - const buffer = readChunk.sync(`out/${entry}.png`, 0, 12); - assert.equal(imageType(buffer).mime, "image/png"); - done() - }, { filename: `out/${entry}.png` }) - }); - }); - describe("Treasure entry", () => { - let entry = "molduga" - it("should have expected fields", (done) => { - makeReq(`/entry/${entry}`, (_err, res) => { - assert.deepEqual( - Object.keys( - JSON.parse(res.body).data - ), - ["category", "common_locations", "description", "drops", "id", "image", "name"], - `Responded with incorrect fields.` - ) - done() - }) - }); - it("should have working image", (done) => { - makeReq(`/entry/${entry}/image`, () => { - const buffer = readChunk.sync(`out/${entry}.png`, 0, 12); - assert.equal(imageType(buffer).mime, "image/png"); - done() - }, { filename: `out/${entry}.png` }) - }); - }); - describe("Master Mode entry", () => { - let entry = "golden lynel" - it("should have expected fields", (done) => { - makeReq(`/master_mode/entry/${entry}`, (_err, res) => { - assert.deepEqual( - Object.keys( - JSON.parse(res.body).data - ), - ["category", "common_locations", "description", "drops", "id", "image", "name"], - `Responded with incorrect fields.` - ) - done() - }) - }); - it("should have working image", (done) => { - makeReq(`/master_mode/entry/${entry}/image`, () => { - const buffer = readChunk.sync(`out/${entry}.png`, 0, 12); - assert.equal(imageType(buffer).mime, "image/png"); - done() - }, { filename: `out/${entry}.png` }) - }); - }); - - describe("Categories", () => { - describe("Creature category", () => { - it("should have correct of # sub-categories", (done) => { - makeReq("/category/creatures", (_err, res) => { - assert.equal( - Object.keys(JSON.parse(res.body).data).length, - 2 - ) - done() - }) - }); - it("should have correct of # entries", (done) => { - makeReq("/category/creatures", (_err, res) => { - assert.equal( - Object.keys(JSON.parse(res.body).data.non_food).length + Object.keys(JSON.parse(res.body).data.food).length, - 83 - ) - done() - }) - }); - it("entries should be of category", (done) => { - makeReq("/category/creatures", (_err, res) => { - try { - var entries = Object.assign(JSON.parse(res.body).data.food, JSON.parse(res.body).data.non_food) - } catch (err) { - if (err.name == "SyntaxError") { - assert.fail("Subcategories non-existant") - } else { - throw err - } - } - entries.forEach((e: Entry) => assert.equal(e.category, "creatures")) - done() - }) - }); - }); - describe("Equipment category", () => { - it("should have correct of # entries", (done) => { - makeReq("/category/equipment", (_err, res) => { - var entries = JSON.parse(res.body).data - assert.equal( - Object.keys(entries).length, - 185 - ) - done() - }) - }); - it("entries should be of category", (done) => { - makeReq("/category/equipment", (_err, res) => { - var entries = JSON.parse(res.body).data - entries.forEach((e: Entry) => assert.equal(e.category, "equipment")) - done() - }) - }); - }); - describe("Materials category", () => { - it("should have correct of # entries", (done) => { - makeReq("/category/materials", (_err, res) => { - var entries = JSON.parse(res.body).data - assert.equal( - Object.keys(entries).length, - 36 - ) - done() - }) - }); - it("entries should be of category", (done) => { - makeReq("/category/materials", (_err, res) => { - var entries = JSON.parse(res.body).data - entries.forEach((e: Entry) => assert.equal(e.category, "materials")) - done() - }) - }); - }); - describe("Monsters category", () => { - it("should have correct of # entries", (done) => { - makeReq("/category/monsters", (_err, res) => { - var entries = JSON.parse(res.body).data - assert.equal( - Object.keys(entries).length, - 81 - ) - done() - }) - }); - it("entries should be of category", (done) => { - makeReq("/category/monsters", (_err, res) => { - var entries = JSON.parse(res.body).data - entries.forEach((e: Entry) => assert.equal(e.category, "monsters")) - done() - }) - }); - }); - describe("Treasure category", () => { - it("should have correct of # entries", (done) => { - makeReq("/category/treasure", (_err, res) => { - var entries = JSON.parse(res.body).data - assert.equal( - Object.keys(entries).length, - 4 - ) - done() - }) - }); - it("entries should be of category", (done) => { - makeReq("/category/treasure", (_err, res) => { - var entries = JSON.parse(res.body).data - entries.forEach((e: Entry) => assert.equal(e.category, "treasure")) - done() - }) - }); - }); - }); - describe("All data", () => { - it("should have correct of # entries", (done) => { - makeReq("", (_err, res) => { - let data = JSON.parse(res.body).data - assert.equal( - data.creatures.food.length + data.creatures.non_food.length + data.equipment.length + data.materials.length + data.monsters.length + data.treasure.length, - 389 - ) - done() - }) - }); - it("should have correct of # categories", (done) => { - makeReq("", (_err, res) => { - assert.equal( - Object.keys(JSON.parse(res.body).data).length, - 5 - ) - done() - }) - }); - }); - }); - }); -}); \ No newline at end of file