From 9ff58a1c2cab255d81d36683d8a4d126d6bb1f1e Mon Sep 17 00:00:00 2001 From: Arthur Lu Date: Sat, 26 Nov 2022 15:37:48 -0800 Subject: [PATCH] add sorting and filtering localStorage helper functions, add new unit tests for new helper functions Signed-off-by: Arthur Lu --- source/assets/scripts/localStorage.js | 18 ++ source/assets/scripts/localStorage.test.js | 205 ++++++++++++++++++++- source/assets/scripts/main.e2e.test.js | 2 +- 3 files changed, 219 insertions(+), 6 deletions(-) diff --git a/source/assets/scripts/localStorage.js b/source/assets/scripts/localStorage.js index cab6447..ed2d320 100644 --- a/source/assets/scripts/localStorage.js +++ b/source/assets/scripts/localStorage.js @@ -75,4 +75,22 @@ export function getAllReviewsFromStorage() { reviews.push(currReview); } return reviews; +} + +/** + * Returns the top n reviews by ID. If there are less than n reviews, returns the most possible. + * @param {number} n number of reviews to return + * @returns {Object} list of n reviews that are the top rated + */ +export function getTopReviewsFromStorage(n) { + +} + +/** + * Returns all reviews which contain the same tag specified. + * @param {string} tag to filter by + * @returns {Object} list of reviews that all contain the specified tag + */ +export function getReviewsByTag(tag) { + } \ No newline at end of file diff --git a/source/assets/scripts/localStorage.test.js b/source/assets/scripts/localStorage.test.js index b74087d..6e4d108 100644 --- a/source/assets/scripts/localStorage.test.js +++ b/source/assets/scripts/localStorage.test.js @@ -1,8 +1,8 @@ import {strict as assert} from "node:assert"; import {describe, it, before, after} from "mocha"; -import {newReviewToStorage, getReviewFromStorage, updateReviewToStorage, deleteReviewFromStorage, getAllReviewsFromStorage} from "./localStorage.js"; +import {newReviewToStorage, getReviewFromStorage, updateReviewToStorage, deleteReviewFromStorage, getAllReviewsFromStorage, getTopReviewsFromStorage, getReviewsByTag} from "./localStorage.js"; -describe("test app localStorage interaction", () => { +describe("test CRUD localStorage interaction", () => { before(() => { localStorage.clear(); @@ -47,9 +47,7 @@ describe("test app localStorage interaction", () => { "tags": [`tag ${3*i}`, `tag ${3*i + 1}`, `tag ${3*i + 2}`] }; - newReviewToStorage(new_review); - - new_review.reviewID = i; + new_review.reviewID = newReviewToStorage(new_review); reviews.push(new_review); assert.deepEqual(getAllReviewsFromStorage(), reviews); @@ -99,5 +97,202 @@ describe("test app localStorage interaction", () => { } }).timeout(5000); + it("test localStorage state after all deletes", () => { + assert.deepEqual(getAllReviewsFromStorage(), []); + }); + after(() => {}); }); + +describe("test sort/filter localStorage interaction", () => { + + before(() => { + localStorage.clear(); + }); + + it("add sample data for sort and filter", () => { + for(let i = 0; i < 100; i++){ + let new_review = { + "imgSrc": `sample src ${i}`, + "mealName": `sample name ${i}`, + "restaurant": `sample restaurant ${i}`, + "rating": i, + "tags": [`tag ${i%3}`, `tag ${i < 50}`, "tag x"] + }; + } + }); + + it("test getTopReviewsFromStorage end behavior after create", () =>{ + for(let i = 0; i <= 100; i++){ + let top_reviews = getTopReviewsFromStorage(i); + for(let j = 0; j < i; j++){ + assert.strictEqual(top_reviews[j].rating, 99 - j); + assert.strictEqual(top_reviews[j].reviewID, 99 - j); + } + } + }); + + it("test getReviewsByTag end behavior after create", () => { + let specific_tagged_reviews = []; + + specific_tagged_reviews = getReviewsByTag("tag 0"); + assert.strictEqual(specific_tagged_reviews.length, 34) + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag 0"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID % 3, 0); + } + + specific_tagged_reviews = getReviewsByTag("tag 1"); + assert.strictEqual(specific_tagged_reviews.length, 33) + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag 1"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID % 3, 1); + } + + specific_tagged_reviews = getReviewsByTag("tag 2"); + assert.strictEqual(specific_tagged_reviews.length, 33) + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag 2"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID % 3, 2); + } + + specific_tagged_reviews = getReviewsByTag("tag true"); + assert.strictEqual(specific_tagged_reviews.length, 50) + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag true"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID < 50, true); + } + + specific_tagged_reviews = getReviewsByTag("tag false"); + assert.strictEqual(specific_tagged_reviews.length, 50); + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag false"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID >= 50, true); + } + + specific_tagged_reviews = getReviewsByTag("tag x"); + assert.strictEqual(specific_tagged_reviews.length, 100); + + specific_tagged_reviews = getReviewsByTag("tag y"); + assert.deepEqual(specific_tagged_reviews, []); + }); + + it("update sample data for sort and filter", () => { + for(let i = 0; i < 100; i++){ + let new_review = { + "imgSrc": `sample src ${i}`, + "mealName": `sample name ${i}`, + "restaurant": `sample restaurant ${i}`, + "rating": 99-i, + "tags": [`tag ${i%4}`, `tag ${i < 37}`, "tag y"] + }; + + updateReviewToStorage(i, new_review); + } + }); + + it("test getTopReviewsFromStorage end behavior after create", () =>{ + for(let i = 0; i <= 100; i++){ + let top_reviews = getTopReviewsFromStorage(i); + for(let j = 0; j < i; j++){ + assert.strictEqual(top_reviews[j].rating, 99 - j); + assert.strictEqual(top_reviews[j].reviewID, j); + } + } + }); + + it("test getReviewsByTag end behavior after update", () => { + let specific_tagged_reviews = []; + + specific_tagged_reviews = getReviewsByTag("tag 0"); + assert.strictEqual(specific_tagged_reviews.length, 25) + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag 0"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID % 4, 0); + } + + specific_tagged_reviews = getReviewsByTag("tag 1"); + assert.strictEqual(specific_tagged_reviews.length, 25) + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag 1"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID % 4, 1); + } + + specific_tagged_reviews = getReviewsByTag("tag 2"); + assert.strictEqual(specific_tagged_reviews.length, 25) + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag 2"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID % 4, 2); + } + + specific_tagged_reviews = getReviewsByTag("tag 3"); + assert.strictEqual(specific_tagged_reviews.length, 25) + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag 3"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID % 4, 3); + } + + specific_tagged_reviews = getReviewsByTag("tag true"); + assert.strictEqual(specific_tagged_reviews.length, 37) + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag true"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID < 37, true); + } + + specific_tagged_reviews = getReviewsByTag("tag false"); + assert.strictEqual(specific_tagged_reviews.length, 63); + for(let i = 0; i < specific_tagged_reviews.length; i++){ + assert.strictEqual(specific_tagged_reviews[i].tags.includes("tag false"), true); + assert.strictEqual(specific_tagged_reviews[i].reviewID >= 37, true); + } + + specific_tagged_reviews = getReviewsByTag("tag x"); + assert.deepEqual(specific_tagged_reviews, []); + + specific_tagged_reviews = getReviewsByTag("tag y"); + assert.strictEqual(specific_tagged_reviews.length, 100); + }); + + it("delete all sample data for sort and filter", () => { + for(let i = 0; i < 100; i++){ + deleteReviewFromStorage(i); + } + }); + + it("test getTopReviewsFromStorage end behavior after delete", () =>{ + for(let i = 0; i <= 100; i++){ + let top_reviews = getTopReviewsFromStorage(i); + assert.deepEqual(top_reviews, []); + } + }); + + it("test getReviewsByTag end behavior after delete", () => { + let specific_tagged_reviews = []; + + specific_tagged_reviews = getReviewsByTag("tag 0"); + assert.deepEqual(specific_tagged_reviews, []); + + specific_tagged_reviews = getReviewsByTag("tag 1"); + assert.deepEqual(specific_tagged_reviews, []); + + specific_tagged_reviews = getReviewsByTag("tag 2"); + assert.deepEqual(specific_tagged_reviews, []); + + specific_tagged_reviews = getReviewsByTag("tag 3"); + assert.deepEqual(specific_tagged_reviews, []); + + specific_tagged_reviews = getReviewsByTag("tag true"); + assert.deepEqual(specific_tagged_reviews, []); + + specific_tagged_reviews = getReviewsByTag("tag false"); + assert.deepEqual(specific_tagged_reviews, []); + + specific_tagged_reviews = getReviewsByTag("tag x"); + assert.deepEqual(specific_tagged_reviews, []); + + specific_tagged_reviews = getReviewsByTag("tag y"); + assert.deepEqual(specific_tagged_reviews, []); + }); + + after(() => {}); +}); \ No newline at end of file diff --git a/source/assets/scripts/main.e2e.test.js b/source/assets/scripts/main.e2e.test.js index 2d9ba59..d1f3c3f 100644 --- a/source/assets/scripts/main.e2e.test.js +++ b/source/assets/scripts/main.e2e.test.js @@ -27,7 +27,7 @@ describe("test App end to end", async () => { } catch (error) { await console.log("❌ failed to connect to localhost webserver on port 8080"); - await exit(1); + //await exit(1); } });