Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const { test, describe, beforeEach, afterEach, beforeAll, afterAll, expect } = require('@playwright/test');
- const { chromium } = require('playwright');
- const host = 'http://localhost:3000';
- let browser;
- let context;
- let page;
- let user = {
- email: "",
- password: "123456",
- confirmPass: "123456",
- };
- let albumName = "";
- describe("e2e tests", () => {
- beforeAll(async () => {
- browser = await chromium.launch();
- });
- afterAll(async () => {
- await browser.close();
- });
- beforeEach(async () => {
- context = await browser.newContext();
- page = await context.newPage();
- });
- afterEach(async () => {
- await page.close();
- await context.close();
- });
- describe("authentication", () => {
- test("Registration with Valid Data", async () => {
- await page.goto(`${host}`);
- await page.click('text=Register');
- await page.waitForSelector('form[action="/users/register"]');
- user.email = `testuser${Math.floor(Math.random() * 10000)}@example.com`;
- await page.fill('input[name="email"]', user.email);
- await page.fill('input[name="password"]', user.password);
- await page.fill('input[name="rePass"]', user.confirmPass);
- const [response] = await Promise.all([
- page.waitForResponse(response => response.status() === 200 && response.url().includes('/users/register')),
- page.click('button[type="submit"]')
- ]);
- expect(response.ok()).toBeTruthy();
- const responseBody = await response.json();
- expect(responseBody.email).toBe(user.email);
- expect(responseBody.password).toBe(user.password);
- });
- test("Login with Valid Data", async () => {
- await page.goto(`${host}`);
- await page.click('text=Login');
- await page.waitForSelector('form[action="/users/login"]');
- await page.fill('input[name="email"]', user.email);
- await page.fill('input[name="password"]', user.password);
- const [response] = await Promise.all([
- page.waitForResponse(response => response.status() === 200 && response.url().includes('/users/login')),
- page.click('button[type="submit"]')
- ]);
- expect(response.ok()).toBeTruthy();
- const responseBody = await response.json();
- expect(responseBody.email).toBe(user.email);
- expect(responseBody.password).toBe(user.password);
- });
- test("Logout from the Application", async () => {
- await page.goto(`${host}`);
- await page.click('text=Logout');
- await page.waitForSelector('text=Login');
- const url = page.url();
- expect(url).toBe(`${host}/`);
- });
- });
- describe("navbar", () => {
- test("Navigation for Logged-In User Testing", async () => {
- await page.goto(`${host}`);
- expect(await page.isVisible('text=Home')).toBeTruthy();
- expect(await page.isVisible('text=Catalog')).toBeTruthy();
- expect(await page.isVisible('text=Search')).toBeTruthy();
- expect(await page.isVisible('text=Create Album')).toBeTruthy();
- expect(await page.isVisible('text=Logout')).toBeTruthy();
- expect(await page.isVisible('text=Login')).toBeFalsy();
- expect(await page.isVisible('text=Register')).toBeFalsy();
- });
- test("Navigation for Guest User Testing", async () => {
- await page.goto(`${host}`);
- expect(await page.isVisible('text=Home')).toBeTruthy();
- expect(await page.isVisible('text=Catalog')).toBeTruthy();
- expect(await page.isVisible('text=Search')).toBeTruthy();
- expect(await page.isVisible('text=Login')).toBeTruthy();
- expect(await page.isVisible('text=Register')).toBeTruthy();
- expect(await page.isVisible('text=Create Album')).toBeFalsy();
- expect(await page.isVisible('text=Logout')).toBeFalsy();
- });
- });
- describe("CRUD", () => {
- test("Create an Album Testing", async () => {
- await page.goto(`${host}`);
- await page.click('text=Create Album');
- await page.waitForSelector('form[action="/data/albums"]');
- albumName = `Test Album ${Math.floor(Math.random() * 10000)}`;
- await page.fill('input[name="name"]', albumName);
- await page.fill('input[name="imgUrl"]', '/images/test.jpg');
- await page.fill('input[name="price"]', '19.99');
- await page.fill('input[name="releaseDate"]', '2024-06-29');
- await page.fill('input[name="artist"]', 'Test Artist');
- await page.fill('input[name="genre"]', 'Test Genre');
- await page.fill('textarea[name="description"]', 'Test Description');
- const [response] = await Promise.all([
- page.waitForResponse(response => response.status() === 200 && response.url().includes('/data/albums')),
- page.click('button[type="submit"]')
- ]);
- expect(response.ok()).toBeTruthy();
- const responseBody = await response.json();
- expect(responseBody.name).toBe(albumName);
- expect(responseBody.imgUrl).toBe('/images/test.jpg');
- expect(responseBody.price).toBe('19.99');
- expect(responseBody.releaseDate).toBe('2024-06-29');
- expect(responseBody.artist).toBe('Test Artist');
- expect(responseBody.genre).toBe('Test Genre');
- expect(responseBody.description).toBe('Test Description');
- });
- test("Edit an Album Testing", async () => {
- await page.goto(`${host}`);
- await page.click('text=Search');
- await page.fill('input[name="search"]', albumName);
- await page.click('.button-list >> text=Search');
- await page.click(`text=${albumName}`);
- await page.click('text=Edit');
- await page.waitForSelector('form[action^="/data/albums"]');
- const updatedAlbumName = `${albumName} Updated`;
- await page.fill('input[name="name"]', updatedAlbumName);
- const [response] = await Promise.all([
- page.waitForResponse(response => response.status() === 200 && response.url().includes('/data/albums')),
- page.click('button[type="submit"]')
- ]);
- expect(response.ok()).toBeTruthy();
- const responseBody = await response.json();
- expect(responseBody.name).toBe(updatedAlbumName);
- });
- test("Delete an Album Testing", async () => {
- await page.goto(`${host}`);
- await page.click('text=Search');
- await page.fill('input[name="search"]', albumName);
- await page.click('.button-list >> text=Search');
- await page.click(`text=${albumName}`);
- await page.click('text=Delete');
- await page.waitForResponse(response => response.status() === 200);
- });
- });
- });
Advertisement
Add Comment
Please, Sign In to add comment