feat: Add possibility to clone cards when cloning a board

Signed-off-by: Max Bachhuber <max.bachhuber@bahuma.io>

Adjust BoardServiceTest to new dependencies

Signed-off-by: Max Bachhuber <max.bachhuber@bahuma.io>

Add BoardCloneModal vue component to frontend. Adjust BoardApi and store to support clone options

Signed-off-by: Max Bachhuber <max.bachhuber@bahuma.io>

Add license and credits

Signed-off-by: Max Bachhuber <max.bachhuber@bahuma.io>

Fix PHP code style

Signed-off-by: Max Bachhuber <max.bachhuber@bahuma.io>

Change default clone settings

Signed-off-by: Max Bachhuber <max.bachhuber@bahuma.io>

Add accordion for advanced settings

Signed-off-by: Max Bachhuber <max.bachhuber@bahuma.io>

Fix bug which caused board to be cloned when clicking out of the modal

Signed-off-by: Max Bachhuber <max.bachhuber@bahuma.io>

Change wording of clone options

Signed-off-by: Max Bachhuber <max.bachhuber@bahuma.io>

fix: Rebase failures

Signed-off-by: Julius Härtl <jus@bitgrid.net>

update cloneBoards phpdoc

make error message clear

SPDX Header BoardCloneModal.vue

Signed-off-by: grnd-alt <salimbelakkaf@outlook.de>
This commit is contained in:
Max Bachhuber
2021-11-16 01:35:09 +01:00
committed by Julius Knorr
parent bdaf28eef4
commit f2c30afe8a
12 changed files with 406 additions and 108 deletions

View File

@@ -5,6 +5,7 @@
import { randUser } from '../utils/index.js'
const user = randUser()
const recipient = randUser()
import { sampleBoard } from '../utils/sampleBoard'
describe('Board', function() {
@@ -58,3 +59,73 @@ describe('Board', function() {
.should('be.visible')
})
})
describe('Board cloning', function() {
before(function() {
cy.createUser(user)
})
it('Clones a board without cards', function() {
const boardName = 'Clone board original'
const board = sampleBoard(boardName)
cy.createExampleBoard({ user, board }).then((board) => {
const boardId = board.id
cy.visit(`/apps/deck/board/${boardId}`)
cy.get('.app-navigation__list .app-navigation-entry:contains("' + boardName + '")')
.parent()
.find('button[aria-label="Actions"]')
.click()
cy.get('button:contains("Clone board")')
.click()
cy.get('.modal-container button:contains("Clone")')
.click()
cy.get('.app-navigation__list .app-navigation-entry:contains("' + boardName + '")')
.should('be.visible')
cy.get('.app-navigation__list .app-navigation-entry:contains("' + boardName + ' (copy)")')
.should('be.visible')
cy.get('.board-title h2').contains(boardName + ' (copy)')
cy.get('h3[aria-label="TestList"]')
.should('be.visible')
})
})
it('Clones a board with cards', function() {
const boardName = 'Clone with cards'
const board = sampleBoard(boardName)
cy.createExampleBoard({ user, board }).then((board) => {
const boardId = board.id
cy.visit(`/apps/deck/board/${boardId}`)
cy.get('.app-navigation__list .app-navigation-entry:contains("' + boardName + '")')
.parent()
.find('button[aria-label="Actions"]')
.click()
cy.get('button:contains("Clone board")')
.click()
cy.get('.checkbox-content__text:contains("Clone cards")')
.click()
cy.get('.modal-container button:contains("Clone")')
.click()
cy.get('.app-navigation__list .app-navigation-entry:contains("' + boardName + '")')
.should('be.visible')
cy.get('.app-navigation__list .app-navigation-entry:contains("' + boardName + ' (copy)")')
.should('be.visible')
cy.get('.board-title h2').contains(boardName + ' (copy)')
cy.get('h3[aria-label="TestList"]')
.should('be.visible')
cy.get('.card:contains("Hello world")')
.should('be.visible')
})
})
})