Some cypress test cleanup and fixes
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
import { randHash } from "../utils"
|
||||
import { randHash } from '../utils'
|
||||
const randUser = randHash()
|
||||
|
||||
describe('Board', function () {
|
||||
describe('Board', function() {
|
||||
const password = 'pass123'
|
||||
|
||||
before(function () {
|
||||
before(function() {
|
||||
cy.nextcloudCreateUser(randUser, password)
|
||||
})
|
||||
|
||||
@@ -12,8 +12,8 @@ describe('Board', function () {
|
||||
cy.login(randUser, password)
|
||||
})
|
||||
|
||||
it('Can create a board', function () {
|
||||
let board = 'Test'
|
||||
it('Can create a board', function() {
|
||||
const board = 'Test'
|
||||
|
||||
cy.intercept({
|
||||
method: 'POST',
|
||||
@@ -23,15 +23,15 @@ describe('Board', function () {
|
||||
// Click "Add board"
|
||||
cy.openLeftSidebar()
|
||||
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
|
||||
.eq(3).find('a').first().click({force: true})
|
||||
.eq(3).find('a').first().click({ force: true })
|
||||
|
||||
// Type the board title
|
||||
cy.get('.board-create form input[type=text]')
|
||||
.type(board, {force: true})
|
||||
.type(board, { force: true })
|
||||
|
||||
// Submit
|
||||
cy.get('.board-create form input[type=submit]')
|
||||
.first().click({force: true})
|
||||
.first().click({ force: true })
|
||||
|
||||
cy.wait('@createBoardRequest').its('response.statusCode').should('equal', 200)
|
||||
|
||||
|
||||
@@ -1,38 +1,67 @@
|
||||
import { randHash } from '../utils'
|
||||
const randUser = randHash()
|
||||
|
||||
describe('Card', function () {
|
||||
const board = 'TestBoard'
|
||||
const list = 'TestList'
|
||||
const password = 'pass123'
|
||||
const testBoardData = {
|
||||
title: 'MyBoardTest',
|
||||
color: '00ff00',
|
||||
stacks: [
|
||||
{
|
||||
title: 'TestList',
|
||||
cards: [
|
||||
{
|
||||
title: 'Hello world',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
before(function () {
|
||||
cy.nextcloudCreateUser(randUser, password)
|
||||
cy.deckCreateBoard({ user: randUser, password }, board)
|
||||
cy.deckCreateList({ user: randUser, password }, list)
|
||||
describe('Card', function() {
|
||||
before(function() {
|
||||
cy.nextcloudCreateUser(randUser, randUser)
|
||||
cy.createExampleBoard({
|
||||
user: randUser,
|
||||
password: randUser,
|
||||
board: testBoardData,
|
||||
})
|
||||
})
|
||||
|
||||
beforeEach(function () {
|
||||
cy.login(randUser, password)
|
||||
beforeEach(function() {
|
||||
cy.login(randUser, randUser)
|
||||
})
|
||||
|
||||
it('Can add a card', function () {
|
||||
let card = 'Card 1'
|
||||
|
||||
it('Can show card details modal', function() {
|
||||
cy.openLeftSidebar()
|
||||
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
|
||||
.eq(3).find('a.app-navigation-entry-link')
|
||||
.first().click({force: true})
|
||||
cy.getNavigationEntry(testBoardData.title)
|
||||
.first().click({ force: true })
|
||||
|
||||
cy.get('.board .stack').eq(0).within(() => {
|
||||
cy.get('button.action-item.action-item--single.icon-add')
|
||||
cy.get('.card:contains("Hello world")').should('be.visible').click()
|
||||
})
|
||||
|
||||
cy.get('.modal__card').should('be.visible')
|
||||
cy.get('.app-sidebar-header__maintitle').contains('Hello world')
|
||||
})
|
||||
|
||||
it('Can add a card', function() {
|
||||
const newCardTitle = 'Write some cypress tests'
|
||||
|
||||
cy.openLeftSidebar()
|
||||
cy.getNavigationEntry(testBoardData.title)
|
||||
.first().click({ force: true })
|
||||
|
||||
cy.get('.board .stack').eq(0).within(() => {
|
||||
cy.get('.card:contains("Hello world")').should('be.visible')
|
||||
|
||||
cy.get('.button-vue[aria-label*="Add card"]')
|
||||
.first().click()
|
||||
|
||||
cy.get('.stack__card-add form input#new-stack-input-main')
|
||||
.type(card)
|
||||
.type(newCardTitle)
|
||||
cy.get('.stack__card-add form input[type=submit]')
|
||||
.first().click()
|
||||
cy.get('.card').first().contains(card).should('be.visible')
|
||||
cy.get(`.card:contains("${newCardTitle}")`).should('be.visible')
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
@@ -4,7 +4,7 @@ const randUser = randHash()
|
||||
describe('Deck dashboard', function() {
|
||||
const password = 'pass123'
|
||||
|
||||
before(function () {
|
||||
before(function() {
|
||||
cy.nextcloudCreateUser(randUser, password)
|
||||
})
|
||||
|
||||
@@ -18,13 +18,12 @@ describe('Deck dashboard', function() {
|
||||
.should('have.text', 'Upcoming cards')
|
||||
})
|
||||
|
||||
it('Can see the default "Personal Board" created for user by default', function () {
|
||||
it('Can see the default "Personal Board" created for user by default', function() {
|
||||
const defaultBoard = 'Personal'
|
||||
|
||||
cy.openLeftSidebar()
|
||||
cy.get('.app-navigation__list .app-navigation-entry')
|
||||
.eq(1)
|
||||
.find('ul.app-navigation-entry__children li.app-navigation-entry')
|
||||
cy.get('.app-navigation-entry-wrapper[icon=icon-deck]')
|
||||
.find('ul.app-navigation-entry__children .app-navigation-entry:contains(' + defaultBoard + ')')
|
||||
.first()
|
||||
.contains(defaultBoard)
|
||||
.should('be.visible')
|
||||
|
||||
@@ -1,33 +1,30 @@
|
||||
import { randHash } from "../utils";
|
||||
const randUser = randHash();
|
||||
import { randHash } from '../utils'
|
||||
const randUser = randHash()
|
||||
|
||||
describe("Stack", function () {
|
||||
const board = "TestBoard";
|
||||
const password = "pass123";
|
||||
const stack = "List 1";
|
||||
describe('Stack', function() {
|
||||
const board = 'TestBoard'
|
||||
const password = 'pass123'
|
||||
const stack = 'List 1'
|
||||
|
||||
before(function () {
|
||||
before(function() {
|
||||
cy.nextcloudCreateUser(randUser, password)
|
||||
cy.deckCreateBoard({ user: randUser, password }, board)
|
||||
})
|
||||
|
||||
beforeEach(function () {
|
||||
beforeEach(function() {
|
||||
cy.logout()
|
||||
cy.login(randUser, password)
|
||||
})
|
||||
|
||||
it("Can create a stack", function () {
|
||||
it('Can create a stack', function() {
|
||||
cy.openLeftSidebar()
|
||||
cy.get("#app-navigation-vue .app-navigation__list .app-navigation-entry")
|
||||
.eq(3)
|
||||
.find("a.app-navigation-entry-link")
|
||||
.first()
|
||||
cy.getNavigationEntry(board)
|
||||
.click({ force: true })
|
||||
|
||||
cy.get("#stack-add button").first().click()
|
||||
cy.get("#stack-add form input#new-stack-input-main").type(stack)
|
||||
cy.get("#stack-add form input[type=submit]").first().click()
|
||||
cy.get('#stack-add button').first().click()
|
||||
cy.get('#stack-add form input#new-stack-input-main').type(stack)
|
||||
cy.get('#stack-add form input[type=submit]').first().click()
|
||||
|
||||
cy.get(".board .stack").eq(0).contains(stack).should("be.visible")
|
||||
cy.get('.board .stack').eq(0).contains(stack).should('be.visible')
|
||||
})
|
||||
});
|
||||
})
|
||||
|
||||
@@ -20,94 +20,140 @@
|
||||
*
|
||||
*/
|
||||
|
||||
const url = Cypress.config("baseUrl").replace(/\/index.php\/?$/g, "");
|
||||
Cypress.env("baseUrl", url);
|
||||
const url = Cypress.config('baseUrl').replace(/\/index.php\/?$/g, '')
|
||||
Cypress.env('baseUrl', url)
|
||||
|
||||
Cypress.Commands.add("login", (user, password, route = "/apps/deck/") => {
|
||||
let session = `${user}-${Date.now()}`;
|
||||
cy.session(session, function () {
|
||||
cy.visit(route);
|
||||
cy.get("input[name=user]").type(user);
|
||||
cy.get("input[name=password]").type(password);
|
||||
cy.get("form[name=login] [type=submit]").click();
|
||||
cy.url().should("include", route);
|
||||
});
|
||||
// in case the session already existed but we are on a different route...
|
||||
cy.visit(route);
|
||||
});
|
||||
Cypress.Commands.add('login', (user, password, route = '/apps/deck/') => {
|
||||
const session = `${user}-${Date.now()}`
|
||||
cy.session(session, function() {
|
||||
cy.visit(route)
|
||||
cy.get('input[name=user]').type(user)
|
||||
cy.get('input[name=password]').type(password)
|
||||
cy.get('form[name=login] [type=submit]').click()
|
||||
cy.url().should('include', route)
|
||||
})
|
||||
cy.visit(route)
|
||||
})
|
||||
|
||||
Cypress.Commands.add("logout", (route = "/") => {
|
||||
cy.session("_guest", function () {});
|
||||
});
|
||||
Cypress.Commands.add('logout', (route = '/') => {
|
||||
cy.session('_guest', function() {})
|
||||
})
|
||||
|
||||
Cypress.Commands.add("nextcloudCreateUser", (user, password) => {
|
||||
cy.clearCookies();
|
||||
Cypress.Commands.add('nextcloudCreateUser', (user, password) => {
|
||||
cy.clearCookies()
|
||||
cy.request({
|
||||
method: "POST",
|
||||
url: `${Cypress.env("baseUrl")}/ocs/v1.php/cloud/users?format=json`,
|
||||
method: 'POST',
|
||||
url: `${Cypress.env('baseUrl')}/ocs/v1.php/cloud/users?format=json`,
|
||||
form: true,
|
||||
body: {
|
||||
userid: user,
|
||||
password: password,
|
||||
password,
|
||||
},
|
||||
auth: { user: "admin", pass: "admin" },
|
||||
auth: { user: 'admin', pass: 'admin' },
|
||||
headers: {
|
||||
"OCS-ApiRequest": "true",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
'OCS-ApiRequest': 'true',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
}).then((response) => {
|
||||
cy.log(`Created user ${user}`, response.status);
|
||||
});
|
||||
});
|
||||
cy.log(`Created user ${user}`, response.status)
|
||||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add("nextcloudUpdateUser", (user, password, key, value) => {
|
||||
Cypress.Commands.add('nextcloudUpdateUser', (user, password, key, value) => {
|
||||
cy.request({
|
||||
method: "PUT",
|
||||
url: `${Cypress.env("baseUrl")}/ocs/v2.php/cloud/users/${user}`,
|
||||
method: 'PUT',
|
||||
url: `${Cypress.env('baseUrl')}/ocs/v2.php/cloud/users/${user}`,
|
||||
form: true,
|
||||
body: { key, value },
|
||||
auth: { user, pass: password },
|
||||
headers: {
|
||||
"OCS-ApiRequest": "true",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
'OCS-ApiRequest': 'true',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
}).then((response) => {
|
||||
cy.log(`Updated user ${user} ${key} to ${value}`, response.status);
|
||||
});
|
||||
});
|
||||
cy.log(`Updated user ${user} ${key} to ${value}`, response.status)
|
||||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add("openLeftSidebar", () => {
|
||||
cy.get(".app-navigation button.app-navigation-toggle").click();
|
||||
});
|
||||
Cypress.Commands.add('openLeftSidebar', () => {
|
||||
cy.get('.app-navigation button.app-navigation-toggle').click()
|
||||
})
|
||||
|
||||
Cypress.Commands.add("deckCreateBoard", ({ user, password }, title) => {
|
||||
cy.login(user, password);
|
||||
Cypress.Commands.add('deckCreateBoard', ({ user, password }, title) => {
|
||||
cy.login(user, password)
|
||||
|
||||
cy.get(".app-navigation button.app-navigation-toggle").click();
|
||||
cy.get("#app-navigation-vue .app-navigation__list .app-navigation-entry")
|
||||
cy.get('.app-navigation button.app-navigation-toggle').click()
|
||||
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
|
||||
.eq(3)
|
||||
.find("a")
|
||||
.find('a')
|
||||
.first()
|
||||
.click({ force: true });
|
||||
.click({ force: true })
|
||||
|
||||
cy.get(".board-create form input[type=text]").type(title, { force: true });
|
||||
cy.get('.board-create form input[type=text]').type(title, { force: true })
|
||||
|
||||
cy.get(".board-create form input[type=submit]")
|
||||
cy.get('.board-create form input[type=submit]')
|
||||
.first()
|
||||
.click({ force: true });
|
||||
});
|
||||
.click({ force: true })
|
||||
})
|
||||
|
||||
Cypress.Commands.add("deckCreateList", ({ user, password }, title) => {
|
||||
cy.login(user, password);
|
||||
Cypress.Commands.add('deckCreateList', ({ user, password }, title) => {
|
||||
cy.login(user, password)
|
||||
|
||||
cy.get(".app-navigation button.app-navigation-toggle").click();
|
||||
cy.get("#app-navigation-vue .app-navigation__list .app-navigation-entry")
|
||||
cy.get('.app-navigation button.app-navigation-toggle').click()
|
||||
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
|
||||
.eq(3)
|
||||
.find("a.app-navigation-entry-link")
|
||||
.find('a.app-navigation-entry-link')
|
||||
.first()
|
||||
.click({ force: true });
|
||||
.click({ force: true })
|
||||
|
||||
cy.get("#stack-add button").first().click();
|
||||
cy.get("#stack-add form input#new-stack-input-main").type(title);
|
||||
cy.get("#stack-add form input[type=submit]").first().click();
|
||||
});
|
||||
cy.get('#stack-add button').first().click()
|
||||
cy.get('#stack-add form input#new-stack-input-main').type(title)
|
||||
cy.get('#stack-add form input[type=submit]').first().click()
|
||||
})
|
||||
|
||||
Cypress.Commands.add('createExampleBoard', ({ user, password, board }) => {
|
||||
cy.request({
|
||||
method: 'POST',
|
||||
url: `${Cypress.env('baseUrl')}/index.php/apps/deck/api/v1.0/boards`,
|
||||
auth: {
|
||||
user,
|
||||
password,
|
||||
},
|
||||
body: { title: board.title, color: board.color ?? 'ff0000' },
|
||||
}).then((boardResponse) => {
|
||||
expect(boardResponse.status).to.eq(200)
|
||||
const boardData = boardResponse.body
|
||||
for (const stackIndex in board.stacks) {
|
||||
const stack = board.stacks[stackIndex]
|
||||
cy.request({
|
||||
method: 'POST',
|
||||
url: `${Cypress.env('baseUrl')}/index.php/apps/deck/api/v1.0/boards/${boardData.id}/stacks`,
|
||||
auth: {
|
||||
user,
|
||||
password,
|
||||
},
|
||||
body: { title: stack.title, order: 0 },
|
||||
}).then((stackResponse) => {
|
||||
const stackData = stackResponse.body
|
||||
for (const cardIndex in stack.cards) {
|
||||
const card = stack.cards[cardIndex]
|
||||
cy.request({
|
||||
method: 'POST',
|
||||
url: `${Cypress.env('baseUrl')}/index.php/apps/deck/api/v1.0/boards/${boardData.id}/stacks/${stackData.id}/cards`,
|
||||
auth: {
|
||||
user,
|
||||
password,
|
||||
},
|
||||
body: { title: card.title },
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add('getNavigationEntry', (boardTitle) => {
|
||||
return cy.get('.app-navigation-entry-wrapper[icon=icon-deck]')
|
||||
.find('ul.app-navigation-entry__children .app-navigation-entry:contains(' + boardTitle + ')')
|
||||
.find('a.app-navigation-entry-link')
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user