chore: add e2e test with cypress

This commit is contained in:
jo 2022-06-19 19:16:59 +02:00
parent f2a3998cc8
commit 3dc8725853
No known key found for this signature in database
GPG Key ID: B2FEC9B22722B984
13 changed files with 1338 additions and 0 deletions

1
e2e/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
node_modules

10
e2e/cypress.config.js Normal file
View File

@ -0,0 +1,10 @@
const { defineConfig } = require("cypress");
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
// implement node event listeners here
},
},
video: false,
});

1
e2e/cypress/constants.js Normal file
View File

@ -0,0 +1 @@
export const PUBLIC_URL = "http://localhost:8080";

View File

@ -0,0 +1,23 @@
import { PUBLIC_URL } from "../constants";
describe("login", () => {
it("works", () => {
cy.login();
cy.url().should("include", "/showbuilder#tracks");
cy.get('a[href="/login/logout"]').click();
cy.url().should("include", "/");
});
it("fails with bad credentials", () => {
cy.visit(PUBLIC_URL + "/login");
cy.get('input[name="username"]').type("admin");
cy.get('input[name="password"]').type("bad password");
cy.get('input[name="submit"]').click();
cy.contains("Wrong username or password provided. Please try again.");
cy.url().should("include", "/login");
});
});

View File

@ -0,0 +1,18 @@
describe("settings", () => {
it("list users", () => {
cy.login();
cy.contains("Settings").click();
cy.get("#sub-menu").children().contains("Users").click();
cy.contains("Manage Users");
cy.contains("admin");
});
it("working streaming status", () => {
cy.login();
cy.contains("Settings").click();
cy.get("#sub-menu").children().contains("Streams").click();
cy.contains("Connected to the streaming server");
});
});

View File

@ -0,0 +1,21 @@
import dayjs from "dayjs";
describe("shows", () => {
it("add a show", () => {
const now = dayjs(Date()).add(1, "day");
cy.clock(now.toDate());
cy.login();
cy.contains("Calendar").click();
cy.url().should("include", "/schedule");
cy.get("button.add-button").click();
cy.get("input#add_show_name").clear().type("My show name");
cy.get("input#add_show_start_now-future").click();
cy.get("input#add_show_start_date").clear().type(now.format("YYYY-MM-DD"));
cy.contains("Add this show").click();
cy.contains("My show name").click();
cy.contains("Delete").click();
});
});

View File

@ -0,0 +1,18 @@
describe("upload", () => {
it("upload a file", () => {
cy.login();
cy.contains("Upload").click();
cy.url().should("include", "/plupload");
cy.contains("Drop files here or click to browse your computer.").selectFile(
"cypress/fixtures/sample.ogg",
{ action: "drag-drop" }
);
cy.contains("Recent Uploads");
cy.contains("Pending import");
cy.contains("Successfully imported");
cy.contains("Tracks").click();
cy.contains("Test Title").click();
});
});

View File

@ -0,0 +1,16 @@
describe("webstreams", () => {
it("add a webstream", () => {
cy.login();
cy.contains("Webstreams").click();
cy.get('button[id="sb-new"]').click();
cy.get('input[class="playlist_name_display"]').clear().type("Test Name");
cy.get('dd[id="description-element"] > textarea').type("Test Description");
cy.get('dd[id="streamurl-element"] > input')
.clear()
.type("http://localhost:8000/main");
cy.get('button[id="webstream_save"]').click();
});
});

Binary file not shown.

View File

@ -0,0 +1,23 @@
// ***********************************************
// This example commands.js shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
import { PUBLIC_URL } from "../constants";
Cypress.Commands.add("login", (userType, options = {}) => {
cy.on("uncaught:exception", (err, runnable) => {
if (err.message.includes("dt is undefined")) return false;
return true;
});
cy.visit(PUBLIC_URL + "/login");
cy.get('input[name="username"]').type("admin");
cy.get('input[name="password"]').type("admin");
cy.get('select[name="locale"]').select("en_US");
cy.get('input[name="submit"]').click();
});

View File

@ -0,0 +1,16 @@
// ***********************************************************
// This example support/e2e.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
import "./commands";

15
e2e/package.json Normal file
View File

@ -0,0 +1,15 @@
{
"name": "libretime-e2e",
"version": "1.0.0",
"license": "GPLv3",
"private": true,
"scripts": {
"start": "cypress open",
"test:chrome": "cypress run --browser chromium",
"test:firefox": "cypress run --browser firefox"
},
"dependencies": {
"cypress": "^12.10.0",
"dayjs": "^1.11.7"
}
}

1176
e2e/yarn.lock Normal file

File diff suppressed because it is too large Load Diff