BbJLeB

e2e

Jun 29th, 2024
618
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const { test, describe, beforeEach, afterEach, beforeAll, afterAll, expect } = require('@playwright/test');
  2. const { chromium } = require('playwright');
  3.  
  4. const host = 'http://localhost:3000';
  5.  
  6. let browser;
  7. let context;
  8. let page;
  9.  
  10. let user = {
  11.     email: "",
  12.     password: "123456",
  13.     confirmPass: "123456",
  14. };
  15.  
  16. let albumName = "";
  17.  
  18. describe("e2e tests", () => {
  19.     beforeAll(async () => {
  20.         browser = await chromium.launch();
  21.     });
  22.  
  23.     afterAll(async () => {
  24.         await browser.close();
  25.     });
  26.  
  27.     beforeEach(async () => {
  28.         context = await browser.newContext();
  29.         page = await context.newPage();
  30.     });
  31.  
  32.     afterEach(async () => {
  33.         await page.close();
  34.         await context.close();
  35.     });
  36.  
  37.     describe("authentication", () => {
  38.  
  39.         test("Registration with Valid Data", async () => {
  40.             await page.goto(`${host}`);
  41.             await page.click('text=Register');
  42.             await page.waitForSelector('form[action="/users/register"]');
  43.  
  44.             user.email = `testuser${Math.floor(Math.random() * 10000)}@example.com`;
  45.  
  46.             await page.fill('input[name="email"]', user.email);
  47.             await page.fill('input[name="password"]', user.password);
  48.             await page.fill('input[name="rePass"]', user.confirmPass);
  49.  
  50.             const [response] = await Promise.all([
  51.                 page.waitForResponse(response => response.status() === 200 && response.url().includes('/users/register')),
  52.                 page.click('button[type="submit"]')
  53.             ]);
  54.  
  55.             expect(response.ok()).toBeTruthy();
  56.  
  57.             const responseBody = await response.json();
  58.             expect(responseBody.email).toBe(user.email);
  59.             expect(responseBody.password).toBe(user.password);
  60.         });
  61.  
  62.         test("Login with Valid Data", async () => {
  63.             await page.goto(`${host}`);
  64.             await page.click('text=Login');
  65.             await page.waitForSelector('form[action="/users/login"]');
  66.  
  67.             await page.fill('input[name="email"]', user.email);
  68.             await page.fill('input[name="password"]', user.password);
  69.  
  70.             const [response] = await Promise.all([
  71.                 page.waitForResponse(response => response.status() === 200 && response.url().includes('/users/login')),
  72.                 page.click('button[type="submit"]')
  73.             ]);
  74.  
  75.             expect(response.ok()).toBeTruthy();
  76.  
  77.             const responseBody = await response.json();
  78.             expect(responseBody.email).toBe(user.email);
  79.             expect(responseBody.password).toBe(user.password);
  80.         });
  81.  
  82.         test("Logout from the Application", async () => {
  83.  
  84.             await page.goto(`${host}`);
  85.             await page.click('text=Logout');
  86.             await page.waitForSelector('text=Login');
  87.  
  88.             const url = page.url();
  89.             expect(url).toBe(`${host}/`);
  90.         });
  91.  
  92.     });
  93.  
  94.     describe("navbar", () => {
  95.  
  96.         test("Navigation for Logged-In User Testing", async () => {
  97.             await page.goto(`${host}`);
  98.  
  99.             expect(await page.isVisible('text=Home')).toBeTruthy();
  100.             expect(await page.isVisible('text=Catalog')).toBeTruthy();
  101.             expect(await page.isVisible('text=Search')).toBeTruthy();
  102.             expect(await page.isVisible('text=Create Album')).toBeTruthy();
  103.             expect(await page.isVisible('text=Logout')).toBeTruthy();
  104.  
  105.             expect(await page.isVisible('text=Login')).toBeFalsy();
  106.             expect(await page.isVisible('text=Register')).toBeFalsy();
  107.         });
  108.  
  109.         test("Navigation for Guest User Testing", async () => {
  110.             await page.goto(`${host}`);
  111.  
  112.             expect(await page.isVisible('text=Home')).toBeTruthy();
  113.             expect(await page.isVisible('text=Catalog')).toBeTruthy();
  114.             expect(await page.isVisible('text=Search')).toBeTruthy();
  115.             expect(await page.isVisible('text=Login')).toBeTruthy();
  116.             expect(await page.isVisible('text=Register')).toBeTruthy();
  117.  
  118.             expect(await page.isVisible('text=Create Album')).toBeFalsy();
  119.             expect(await page.isVisible('text=Logout')).toBeFalsy();
  120.         });
  121.  
  122.     });
  123.  
  124.     describe("CRUD", () => {
  125.  
  126.         test("Create an Album Testing", async () => {
  127.             await page.goto(`${host}`);
  128.             await page.click('text=Create Album');
  129.             await page.waitForSelector('form[action="/data/albums"]');
  130.  
  131.             albumName = `Test Album ${Math.floor(Math.random() * 10000)}`;
  132.  
  133.             await page.fill('input[name="name"]', albumName);
  134.             await page.fill('input[name="imgUrl"]', '/images/test.jpg');
  135.             await page.fill('input[name="price"]', '19.99');
  136.             await page.fill('input[name="releaseDate"]', '2024-06-29');
  137.             await page.fill('input[name="artist"]', 'Test Artist');
  138.             await page.fill('input[name="genre"]', 'Test Genre');
  139.             await page.fill('textarea[name="description"]', 'Test Description');
  140.  
  141.             const [response] = await Promise.all([
  142.                 page.waitForResponse(response => response.status() === 200 && response.url().includes('/data/albums')),
  143.                 page.click('button[type="submit"]')
  144.             ]);
  145.  
  146.             expect(response.ok()).toBeTruthy();
  147.  
  148.             const responseBody = await response.json();
  149.             expect(responseBody.name).toBe(albumName);
  150.             expect(responseBody.imgUrl).toBe('/images/test.jpg');
  151.             expect(responseBody.price).toBe('19.99');
  152.             expect(responseBody.releaseDate).toBe('2024-06-29');
  153.             expect(responseBody.artist).toBe('Test Artist');
  154.             expect(responseBody.genre).toBe('Test Genre');
  155.             expect(responseBody.description).toBe('Test Description');
  156.         });
  157.  
  158.         test("Edit an Album Testing", async () => {
  159.             await page.goto(`${host}`);
  160.             await page.click('text=Search');
  161.             await page.fill('input[name="search"]', albumName);
  162.             await page.click('.button-list >> text=Search');
  163.  
  164.             await page.click(`text=${albumName}`);
  165.             await page.click('text=Edit');
  166.             await page.waitForSelector('form[action^="/data/albums"]');
  167.  
  168.             const updatedAlbumName = `${albumName} Updated`;
  169.  
  170.             await page.fill('input[name="name"]', updatedAlbumName);
  171.  
  172.             const [response] = await Promise.all([
  173.                 page.waitForResponse(response => response.status() === 200 && response.url().includes('/data/albums')),
  174.                 page.click('button[type="submit"]')
  175.             ]);
  176.  
  177.             expect(response.ok()).toBeTruthy();
  178.  
  179.             const responseBody = await response.json();
  180.             expect(responseBody.name).toBe(updatedAlbumName);
  181.         });
  182.  
  183.         test("Delete an Album Testing", async () => {
  184.             await page.goto(`${host}`);
  185.             await page.click('text=Search');
  186.             await page.fill('input[name="search"]', albumName);
  187.             await page.click('.button-list >> text=Search');
  188.  
  189.             await page.click(`text=${albumName}`);
  190.             await page.click('text=Delete');
  191.             await page.waitForResponse(response => response.status() === 200);
  192.  
  193.         });
  194.  
  195.     });
  196. });
  197.  
  198.  
Advertisement
Add Comment
Please, Sign In to add comment