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://127.0.0.1:5500';
- 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');
- let random = Math.floor(Math.random() * 1000);
- user.email = `abv_${random}@abv.bg`;
- await page.locator("#email").fill(user.email);
- await page.locator("#password").fill(user.password);
- await page.locator("#conf-pass").fill(user.confirmPass);
- let [response] = await Promise.all([
- page.waitForResponse(response => response.url().includes('/users/register') && response.status() === 200),
- page.click('[type="submit"]')
- ]);
- await expect(response.ok()).toBeTruthy();
- let userData = await response.json();
- expect(userData.email).toBe(user.email);
- expect(userData.password).toEqual(user.password);
- });
- test("Login with Valid Data", async () => {
- await page.goto(host);
- await page.click('text=Login');
- await page.waitForSelector('form');
- await page.locator("#email").fill(user.email);
- await page.locator("#password").fill(user.password);
- let [response] = await Promise.all([
- page.waitForResponse(response => response.url().includes("/users/login") && response.status() === 200),
- page.click('[type="submit"]')
- ]);
- expect(response.ok()).toBeTruthy();
- let userData = await response.json();
- //console.log(userData);
- expect(userData.email).toBe(user.email);
- expect(userData.password).toEqual(user.password);
- });
- test("Logout from the Application", async () => {
- await page.goto(host);
- await page.click('text=Login');
- await page.waitForSelector('form');
- await page.locator("#email").fill(user.email);
- await page.locator("#password").fill(user.password);
- await page.click('[type="submit"]');
- let [response] = await Promise.all([
- page.waitForResponse(response => response.url().includes("/users/logout") && response.status() === 204),
- page.locator('nav >> text=logout').click()
- ]);
- expect(response.ok).toBeTruthy();
- await page.waitForSelector('nav >> text=Login');
- expect(page.url()).toBe(host + "/");
- });
- });
- describe("navbar", () => {
- test('logged user should see correct navigation', async () => {
- await page.goto(host);
- await page.click('text=Login');
- await page.waitForSelector('form');
- await page.locator("#email").fill(user.email);
- await page.locator("#password").fill(user.password);
- await page.click('[type="submit"]')
- await expect(page.locator('nav >> text=Home')).toBeVisible();
- await expect(page.locator('nav >> text=Catalog')).toBeVisible();
- await expect(page.locator('nav >> text=Search')).toBeVisible();
- await expect(page.locator('nav >> text=Create Album')).toBeVisible();
- await expect(page.locator('nav >> text=Login')).toBeHidden();
- await expect(page.locator('nav >> text=Register')).toBeHidden();
- });
- test('guest user should see correct navigation', async () => {
- await page.goto(host);
- await expect(page.locator('nav >> text=Home')).toBeVisible();
- await expect(page.locator('nav >> text=Logout')).toBeHidden();
- await expect(page.locator('nav >> text=Create Album')).toBeHidden();
- await expect(page.locator('nav >> text=Search')).toBeVisible();
- await expect(page.locator('nav >> text=Login')).toBeVisible();
- await expect(page.locator('nav >> text=Register')).toBeVisible();
- });
- });
- describe("CRUD", () => {
- test('Create an Album Testing', async () => {
- await page.goto(host);
- await page.click('text=Login');
- await page.waitForSelector('form');
- await page.locator("#email").fill(user.email);
- await page.locator("#password").fill(user.password);
- await page.click('[type="submit"]')
- await page.click('text=Create Album');
- await page.waitForSelector('form');
- 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('[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("User is able to edit an album", async ()=>{
- //arrange
- await page.goto(host);
- await page.click("text=Login");
- await page.waitForSelector('form');
- await page.locator('#email').fill(user.email);
- await page.locator('#password').fill(user.password);
- await page.click('[type="submit"]');
- //act
- await page.click("text = Search")
- await page.locator('#search-input').fill(albumName);
- await page.locator('.button-list').click();
- await page.locator('#details').first().click();
- await page.click('text = Edit');
- await page.waitForSelector('form');
- await page.locator('#price').fill("15");
- let [response] = await Promise.all([page.waitForResponse(response => response.url().includes("/data/albums")
- && response.status() == 200), page.click('[type="Submit"]')
- ]);
- let eventData = await response.json();
- //assert
- await expect(response.ok()).toBeTruthy();
- expect(eventData.name).toEqual(albumName);
- expect(eventData.imgUrl).toEqual('/images/test.jpg');
- expect(eventData.price).toEqual('15');
- expect(eventData.releaseDate).toEqual('2024-06-29');
- expect(eventData.artist).toEqual('Test Artist');
- expect(eventData.genre).toEqual('Test Genre');
- expect(eventData.description).toEqual('Test Description');
- })
- test("User is able to delete an album", async ()=>{
- //arrange
- await page.goto(host);
- await page.click("text=Login");
- await page.waitForSelector('form');
- await page.locator('#email').fill(user.email);
- await page.locator('#password').fill(user.password);
- await page.click('[type="submit"]');
- //act
- await page.click("text = Search")
- await page.locator('#search-input').fill(albumName);
- await page.locator('.button-list').click();
- await page.locator('#details').first().click();
- // await page.locator("text = Delete").click();
- let [response] = await Promise.all([page.waitForResponse(response => response.url().includes("/data/albums")
- && response.status() == 200),
- page.on('dialog', dialog => dialog.accept()),
- page.click('text = Delete')
- ]);
- //assert
- await expect(response.ok()).toBeTruthy();
- });
- });
- });
Advertisement
Add Comment
Please, Sign In to add comment