diff --git a/source/assets/scripts/appTestHelpers.js b/source/assets/scripts/appTestHelpers.js index 82ade7a..12fd3c3 100644 --- a/source/assets/scripts/appTestHelpers.js +++ b/source/assets/scripts/appTestHelpers.js @@ -1,76 +1,76 @@ -import {strict as assert} from "node:assert"; - -/** - * Fills out a create or update review form - * @param {Object} page the page object which contains the create or update form - * @param {Object} review review data to input into the form - */ -export async function setReviewForm(page, review) { - - // Set text fields - await page.$eval("#imgAlt", (el, value) => el.value = value, review.imgAlt); - await page.$eval("#mealName", (el, value) => el.value = value, review.mealName); - await page.$eval("#comments", (el, value) => el.value = value, review.comments); - await page.$eval("#restaurant", (el, value) => el.value = value, review.restaurant); - - // Get all tag elements and click them to delete them - let tag_items = await page.$$(".tag"); - if(tag_items !== null){ - for(let i = 0; i < tag_items.length; i++){ - await tag_items[i].click(); - } - } - - // Get the button needed to add new tags - let tag_btn = await page.$("#tag-add-btn"); - for(let i = 0; i < review.tags.length; i++){ - await page.$eval("#tag-form", (el, value) => el.value = value, review.tags[i]); - await tag_btn.click(); - } - - // Select a new rating - let rating_select = await page.$(`#s${review.rating}-select`); - await rating_select.click({delay: 100}); -} - -/** - * Tests a page or shadowDOM for correct element text, src, or alt values - * @param {Object} root page or shodowDOM to test - * @param {string} prefix prefix character for element IDs - * @param {Object} expected values for eahc element - */ -export async function checkCorrectness(root, prefix, expected){ - // Get the review image and check src and alt - let img = await root.$(`#${prefix}-mealImg`); - let imgSrc = await img.getProperty("src"); - let imgAlt = await img.getProperty("alt"); - // Check src and alt - assert.strictEqual(await imgSrc.jsonValue(), expected.imgSrc); - assert.strictEqual(await imgAlt.jsonValue(), expected.imgAlt); - - // Get the title, comment, and restaurant - let title = await root.$(`#${prefix}-mealName`); - let title_text = await title.getProperty("innerText"); - let comment = await root.$(`#${prefix}-comments`); - let comment_text = await comment.getProperty("innerText"); - let restaurant = await root.$(`#${prefix}-restaurant`); - let restaurant_text = await restaurant.getProperty("innerText"); - - // Check title, comment, and restaurant - assert.strictEqual(await title_text.jsonValue(), expected.mealName); - assert.strictEqual(await comment_text.jsonValue(), expected.comments); - assert.strictEqual(await restaurant_text.jsonValue(), expected.restaurant); - - // Check tags - let tags = await root.$$(".tag"); - assert.strictEqual(await tags.length, expected.tags.length); - for(let i = 0; i < expected.tags.length; i++){ - let tag_text = await tags[i].getProperty("innerText"); - assert.strictEqual(await tag_text.jsonValue(), expected.tags[i]); - } - - // Check stars - let stars = await root.$(`#${prefix}-rating`); - let stars_src = await stars.getProperty("src"); - assert.strictEqual(await stars_src.jsonValue(), expected.rating); +import {strict as assert} from "node:assert"; + +/** + * Fills out a create or update review form + * @param {Object} page the page object which contains the create or update form + * @param {Object} review review data to input into the form + */ +export async function setReviewForm(page, review) { + + // Set text fields + await page.$eval("#imgAlt", (el, value) => el.value = value, review.imgAlt); + await page.$eval("#mealName", (el, value) => el.value = value, review.mealName); + await page.$eval("#comments", (el, value) => el.value = value, review.comments); + await page.$eval("#restaurant", (el, value) => el.value = value, review.restaurant); + + // Get all tag elements and click them to delete them + let tag_items = await page.$$(".tag"); + if(tag_items !== null){ + for(let i = 0; i < tag_items.length; i++){ + await tag_items[i].click(); + } + } + + // Get the button needed to add new tags + let tag_btn = await page.$("#tag-add-btn"); + for(let i = 0; i < review.tags.length; i++){ + await page.$eval("#tag-form", (el, value) => el.value = value, review.tags[i]); + await tag_btn.click(); + } + + // Select a new rating + let rating_select = await page.$(`#s${review.rating}-select`); + await rating_select.click({delay: 100}); +} + +/** + * Tests a page or shadowDOM for correct element text, src, or alt values + * @param {Object} root page or shodowDOM to test + * @param {string} prefix prefix character for element IDs + * @param {Object} expected values for eahc element + */ +export async function checkCorrectness(root, prefix, expected){ + // Get the review image and check src and alt + let img = await root.$(`#${prefix}-mealImg`); + let imgSrc = await img.getProperty("src"); + let imgAlt = await img.getProperty("alt"); + // Check src and alt + assert.strictEqual(await imgSrc.jsonValue(), expected.imgSrc); + assert.strictEqual(await imgAlt.jsonValue(), expected.imgAlt); + + // Get the title, comment, and restaurant + let title = await root.$(`#${prefix}-mealName`); + let title_text = await title.getProperty("innerText"); + let comment = await root.$(`#${prefix}-comments`); + let comment_text = await comment.getProperty("innerText"); + let restaurant = await root.$(`#${prefix}-restaurant`); + let restaurant_text = await restaurant.getProperty("innerText"); + + // Check title, comment, and restaurant + assert.strictEqual(await title_text.jsonValue(), expected.mealName); + assert.strictEqual(await comment_text.jsonValue(), expected.comments); + assert.strictEqual(await restaurant_text.jsonValue(), expected.restaurant); + + // Check tags + let tags = await root.$$(".tag"); + assert.strictEqual(await tags.length, expected.tags.length); + for(let i = 0; i < expected.tags.length; i++){ + let tag_text = await tags[i].getProperty("innerText"); + assert.strictEqual(await tag_text.jsonValue(), expected.tags[i]); + } + + // Check stars + let stars = await root.$(`#${prefix}-rating`); + let stars_src = await stars.getProperty("src"); + assert.strictEqual(await stars_src.jsonValue(), expected.rating); } \ 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 ad177c9..38b5f3c 100644 --- a/source/assets/scripts/main.e2e.test.js +++ b/source/assets/scripts/main.e2e.test.js @@ -2,7 +2,7 @@ import {strict as assert} from "node:assert"; import {describe, it, before, after} from "mocha"; import puppeteer from "puppeteer-core"; import {exit} from "node:process"; -import {setReviewForm, checkCorrectness} from "./appTestHelpers.js" +import {setReviewForm, checkCorrectness} from "./appTestHelpers.js"; describe("test App end to end", async () => { @@ -19,7 +19,7 @@ describe("test App end to end", async () => { } //browser = await puppeteer.launch({headless: false, slowMo: 250, args: root ? ['--no-sandbox'] : undefined}); - browser = await puppeteer.launch({args: root ? ['--no-sandbox'] : undefined}); + browser = await puppeteer.launch({args: root ? ["--no-sandbox"] : undefined}); page = await browser.newPage(); try{ await page.goto("http://localhost:8080", {timeout: 1000}); @@ -54,7 +54,7 @@ describe("test App end to end", async () => { restaurant: "sample restaurant", tags: ["tag 0", "tag 1", "tag 2", "tag 3", "tag 4"], rating: 1 - } + }; await setReviewForm(page, review); // Click the save button to save updates @@ -73,7 +73,7 @@ describe("test App end to end", async () => { restaurant: "sample restaurant", tags: ["tag 0", "tag 1", "tag 2", "tag 3", "tag 4"], rating: "http://localhost:8080/assets/images/icons/1-star.svg" - } + }; await checkCorrectness(page, "d", expected); }); @@ -95,7 +95,7 @@ describe("test App end to end", async () => { restaurant: "sample restaurant", tags: ["tag 0", "tag 1", "tag 2", "tag 3", "tag 4"], rating: "http://localhost:8080/assets/images/icons/1-star.svg" - } + }; await checkCorrectness(shadowRoot, "a", expected); }); }); @@ -121,7 +121,7 @@ describe("test App end to end", async () => { restaurant: "sample restaurant", tags: ["tag 0", "tag 1", "tag 2", "tag 3", "tag 4"], rating: "http://localhost:8080/assets/images/icons/1-star.svg" - } + }; await checkCorrectness(page, "d", expected); }); @@ -144,7 +144,7 @@ describe("test App end to end", async () => { restaurant: "sample restaurant", tags: ["tag 0", "tag 1", "tag 2", "tag 3", "tag 4"], rating: "http://localhost:8080/assets/images/icons/1-star.svg" - } + }; await checkCorrectness(shadowRoot, "a", expected); }); }); @@ -170,7 +170,7 @@ describe("test App end to end", async () => { restaurant: "updated restaurant", tags: ["tag -0", "tag -1", "tag -2", "tag -3", "tag -4", "tag -5"], rating: 5 - } + }; await setReviewForm(page, review); // Click the save button to save updates @@ -189,7 +189,7 @@ describe("test App end to end", async () => { restaurant: "updated restaurant", tags: ["tag -0", "tag -1", "tag -2", "tag -3", "tag -4", "tag -5"], rating: "http://localhost:8080/assets/images/icons/5-star.svg" - } + }; await checkCorrectness(page, "d", expected); }); @@ -212,7 +212,7 @@ describe("test App end to end", async () => { restaurant: "updated restaurant", tags: ["tag -0", "tag -1", "tag -2", "tag -3", "tag -4", "tag -5"], rating: "http://localhost:8080/assets/images/icons/5-star.svg" - } + }; await checkCorrectness(shadowRoot, "a", expected); }); @@ -225,7 +225,7 @@ describe("test App end to end", async () => { await review_card.click(); await page.waitForNavigation(); - page.on('dialog', async dialog => { + page.on("dialog", async dialog => { console.log(dialog.message()); await dialog.accept(); });