BbJLeB

pedaliii

Jun 29th, 2024
745
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://127.0.0.1:5500';
  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.  
  43.             await page.waitForSelector('form');
  44.  
  45.             let random = Math.floor(Math.random() * 1000);
  46.             user.email = `abv_${random}@abv.bg`;
  47.  
  48.             await page.locator("#email").fill(user.email);
  49.             await page.locator("#password").fill(user.password);
  50.             await page.locator("#conf-pass").fill(user.confirmPass);
  51.             let [response] = await Promise.all([
  52.                 page.waitForResponse(response => response.url().includes('/users/register') && response.status() === 200),
  53.                 page.click('[type="submit"]')
  54.             ]);
  55.            
  56.             await expect(response.ok()).toBeTruthy();
  57.             let userData = await response.json();
  58.  
  59.             expect(userData.email).toBe(user.email);
  60.             expect(userData.password).toEqual(user.password);
  61.  
  62.         });
  63.  
  64.         test("Login with Valid Data", async () => {
  65.             await page.goto(host);
  66.             await page.click('text=Login');
  67.  
  68.             await page.waitForSelector('form');
  69.            
  70.            
  71.             await page.locator("#email").fill(user.email);
  72.             await page.locator("#password").fill(user.password);
  73.             let [response] = await Promise.all([
  74.                 page.waitForResponse(response => response.url().includes("/users/login") && response.status() === 200),
  75.                 page.click('[type="submit"]')
  76.             ]);
  77.            
  78.             expect(response.ok()).toBeTruthy();
  79.             let userData = await response.json();
  80.             //console.log(userData);
  81.             expect(userData.email).toBe(user.email);
  82.             expect(userData.password).toEqual(user.password);
  83.         });
  84.  
  85.         test("Logout from the Application", async () => {
  86.             await page.goto(host);
  87.             await page.click('text=Login');
  88.  
  89.             await page.waitForSelector('form');
  90.            
  91.             await page.locator("#email").fill(user.email);
  92.             await page.locator("#password").fill(user.password);
  93.             await page.click('[type="submit"]');
  94.  
  95.             let [response] = await Promise.all([
  96.                 page.waitForResponse(response => response.url().includes("/users/logout") && response.status() === 204),
  97.                 page.locator('nav >> text=logout').click()
  98.             ]);
  99.  
  100.             expect(response.ok).toBeTruthy();
  101.             await page.waitForSelector('nav >> text=Login');
  102.  
  103.             expect(page.url()).toBe(host + "/");
  104.  
  105.         });
  106.  
  107.     });
  108.  
  109.     describe("navbar", () => {
  110.  
  111.         test('logged user should see correct navigation', async () => {
  112.             await page.goto(host);
  113.  
  114.             await page.click('text=Login');
  115.             await page.waitForSelector('form');
  116.             await page.locator("#email").fill(user.email);
  117.             await page.locator("#password").fill(user.password);
  118.             await page.click('[type="submit"]')
  119.  
  120.             await expect(page.locator('nav >> text=Home')).toBeVisible();
  121.             await expect(page.locator('nav >> text=Catalog')).toBeVisible();
  122.             await expect(page.locator('nav >> text=Search')).toBeVisible();
  123.             await expect(page.locator('nav >> text=Create Album')).toBeVisible();
  124.             await expect(page.locator('nav >> text=Login')).toBeHidden();
  125.             await expect(page.locator('nav >> text=Register')).toBeHidden();
  126.         });
  127.  
  128.         test('guest user should see correct navigation', async () => {
  129.             await page.goto(host);
  130.  
  131.             await expect(page.locator('nav >> text=Home')).toBeVisible();
  132.             await expect(page.locator('nav >> text=Logout')).toBeHidden();
  133.             await expect(page.locator('nav >> text=Create Album')).toBeHidden();
  134.             await expect(page.locator('nav >> text=Search')).toBeVisible();
  135.             await expect(page.locator('nav >> text=Login')).toBeVisible();
  136.             await expect(page.locator('nav >> text=Register')).toBeVisible();
  137.         });
  138.  
  139.  
  140.     });
  141.  
  142.     describe("CRUD", () => {
  143.  
  144.         test('Create an Album Testing', async () => {
  145.             await page.goto(host);
  146.  
  147.             await page.click('text=Login');
  148.             await page.waitForSelector('form');
  149.             await page.locator("#email").fill(user.email);
  150.             await page.locator("#password").fill(user.password);
  151.             await page.click('[type="submit"]')
  152.            
  153.             await page.click('text=Create Album');
  154.             await page.waitForSelector('form');
  155.  
  156.             albumName = `Test Album ${Math.floor(Math.random() * 10000)}`;
  157.  
  158.             await page.fill('input[name="name"]', albumName);
  159.             await page.fill('input[name="imgUrl"]', '/images/test.jpg');
  160.             await page.fill('input[name="price"]', '19.99');
  161.             await page.fill('input[name="releaseDate"]', '2024-06-29');
  162.             await page.fill('input[name="artist"]', 'Test Artist');
  163.             await page.fill('input[name="genre"]', 'Test Genre');
  164.             await page.fill('textarea[name="description"]', 'Test Description');
  165.  
  166.             const [response] = await Promise.all([
  167.                 page.waitForResponse(response => response.status() === 200 && response.url().includes('/data/albums')),
  168.                 page.click('[type="submit"]')
  169.             ]);
  170.  
  171.             expect(response.ok()).toBeTruthy();
  172.  
  173.             const responseBody = await response.json();
  174.             expect(responseBody.name).toBe(albumName);
  175.             expect(responseBody.imgUrl).toBe('/images/test.jpg');
  176.             expect(responseBody.price).toBe('19.99');
  177.             expect(responseBody.releaseDate).toBe('2024-06-29');
  178.             expect(responseBody.artist).toBe('Test Artist');
  179.             expect(responseBody.genre).toBe('Test Genre');
  180.             expect(responseBody.description).toBe('Test Description');
  181.         });
  182.  
  183.         test("User is able to edit an album", async ()=>{
  184.             //arrange
  185.             await page.goto(host);
  186.             await page.click("text=Login");
  187.             await page.waitForSelector('form');
  188.             await page.locator('#email').fill(user.email);
  189.             await page.locator('#password').fill(user.password);
  190.             await page.click('[type="submit"]');
  191.             //act
  192.             await page.click("text = Search")
  193.             await page.locator('#search-input').fill(albumName);
  194.             await page.locator('.button-list').click();
  195.             await page.locator('#details').first().click();
  196.             await page.click('text = Edit');
  197.             await page.waitForSelector('form');
  198.             await page.locator('#price').fill("15");
  199.  
  200.             let [response] = await Promise.all([page.waitForResponse(response => response.url().includes("/data/albums")
  201.             && response.status() == 200), page.click('[type="Submit"]')
  202.            ]);
  203.            let eventData = await response.json();
  204.            //assert
  205.            await expect(response.ok()).toBeTruthy();
  206.            expect(eventData.name).toEqual(albumName);
  207.             expect(eventData.imgUrl).toEqual('/images/test.jpg');
  208.             expect(eventData.price).toEqual('15');
  209.             expect(eventData.releaseDate).toEqual('2024-06-29');
  210.             expect(eventData.artist).toEqual('Test Artist');
  211.             expect(eventData.genre).toEqual('Test Genre');
  212.             expect(eventData.description).toEqual('Test Description');
  213.         })
  214.  
  215.         test("User is able to delete an album", async ()=>{
  216.             //arrange
  217.             await page.goto(host);
  218.             await page.click("text=Login");
  219.             await page.waitForSelector('form');
  220.             await page.locator('#email').fill(user.email);
  221.             await page.locator('#password').fill(user.password);
  222.             await page.click('[type="submit"]');
  223.             //act
  224.             await page.click("text = Search")
  225.             await page.locator('#search-input').fill(albumName);
  226.             await page.locator('.button-list').click();
  227.             await page.locator('#details').first().click();
  228.           //  await page.locator("text = Delete").click();
  229.             let [response] = await Promise.all([page.waitForResponse(response => response.url().includes("/data/albums")
  230.             && response.status() == 200),
  231.             page.on('dialog', dialog => dialog.accept()),
  232.             page.click('text = Delete')
  233.            ]);
  234.  
  235.            //assert
  236.            await expect(response.ok()).toBeTruthy();
  237.         });
  238.  
  239.     });
  240. });
  241.  
Advertisement
Add Comment
Please, Sign In to add comment