Skip to content

Commit

Permalink
enh(api): js wrapper for collectives api
Browse files Browse the repository at this point in the history
Wrap all usage of the collectives api in a simple functional interface.
This will allow us to change the layout of the api
and only update it in a single place.

## Refactor client (browser) app

Separate the API handling from the store.
The api is concerned with axios and generateUrl
while the store is only concerned with the current state of the app.

### Url generation from parts

Accept multiple arguments to `collectivesUrl` and `pagesUrl`
and join them with `/` to build the url:

Example:
```js
api.pagesUrl({collectiveId: 10}, 'trash', 12)
```
results in `/apps/collectives/_api/10/_pages/trash/12`

## Tests (Cypress)

Use the api directly in the cypress commands.
That way we do not require the page to be loaded.

Also extract `collective-edit-mode.spec.js` from `pages.spec.js`.
It requires a different beforeEach function
to seed the edit mode before visiting the collective.

Signed-off-by: Max <[email protected]>
  • Loading branch information
max-nextcloud authored and mejo- committed Dec 5, 2023
1 parent cbfd908 commit 075c0de
Show file tree
Hide file tree
Showing 26 changed files with 742 additions and 296 deletions.
1 change: 0 additions & 1 deletion cypress/e2e/circle-with-group.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
describe('Pages are accessible via group membership to circle', function() {
before(function() {
cy.loginAs('jane')
cy.visit('apps/collectives')
cy.deleteAndSeedCollective('Group Collective')
cy.circleFind('Group Collective')
.circleAddMember('Bobs Group', 2)
Expand Down
1 change: 0 additions & 1 deletion cypress/e2e/collective-members.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
describe('Collective members', function() {
before(function() {
cy.loginAs('bob')
cy.visit('apps/collectives')
cy.deleteAndSeedCollective('Members Collective')
})

Expand Down
61 changes: 61 additions & 0 deletions cypress/e2e/collective-page-mode.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/**
* @copyright Copyright (c) 2021 Azul <[email protected]>
*
* @author Azul <[email protected]>
*
* @license AGPL-3.0-or-later
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

describe('Collective page mode', function() {

before(function() {
cy.loginAs('bob')
cy.deleteAndSeedCollective('Our Garden')
.seedPage('Day 1', '', 'Readme.md')
.seedPage('Day 2', '', 'Readme.md')
})

beforeEach(function() {
cy.loginAs('bob')
})

describe('Changing page mode', function() {
it('Opens edit mode per default', function() {
cy.seedCollectivePageMode('Our Garden', 1)
cy.visit('/apps/collectives/Our Garden')
// make sure the page list loaded properly
cy.contains('.app-content-list-item a', 'Day 1')
cy.openPage('Day 2')
cy.getEditor()
.should('be.visible')
cy.getReadOnlyEditor()
.should('not.be.visible')
})

it('Opens view mode per default', function() {
cy.seedCollectivePageMode('Our Garden', 0)
cy.visit('/apps/collectives/Our Garden')
// make sure the page list loaded properly
cy.contains('.app-content-list-item a', 'Day 1')
cy.openPage('Day 2')
cy.getReadOnlyEditor()
.should('be.visible')
cy.getEditor()
.should('not.be.visible')
})
})
})
5 changes: 2 additions & 3 deletions cypress/e2e/collective-readonly.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,11 @@ describe('Read-only collective', function() {

before(function() {
cy.loginAs('alice')
cy.visit('apps/collectives')
cy.deleteAndSeedCollective('PermissionCollective')
cy.seedPage('SecondPage', '', 'Readme.md')
cy.seedCollectivePermissions('PermissionCollective', 'edit', 4)
.seedPage('SecondPage')
cy.circleFind('PermissionCollective')
.circleAddMember('bob')
cy.seedCollectivePermissions('PermissionCollective', 'edit', 4)
})

describe('in read-only collective', function() {
Expand Down
1 change: 0 additions & 1 deletion cypress/e2e/collective-settings.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
describe('Collective settings', function() {
before(function() {
cy.loginAs('bob')
cy.visit('apps/collectives')
cy.deleteCollective('Change me now')
cy.deleteAndSeedCollective('Change me')
})
Expand Down
1 change: 0 additions & 1 deletion cypress/e2e/collective-share.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ describe('Collective Share', function() {

before(function() {
cy.loginAs('bob')
cy.visit('/apps/collectives')
cy.deleteAndSeedCollective('Share me')
})

Expand Down
2 changes: 0 additions & 2 deletions cypress/e2e/collective.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ describe('Collective', function() {

before(function() {
cy.loginAs('bob')
cy.visit('apps/collectives')
cy.deleteCollective('Preexisting Circle')
cy.deleteCollective('History Club')
cy.deleteCollective(specialCollective)
Expand All @@ -39,7 +38,6 @@ describe('Collective', function() {
cy.seedCircle('Preexisting Circle')
cy.seedCircle('History Club', { visible: true, open: true })
cy.loginAs('jane')
cy.visit('apps/collectives')
cy.deleteCollective('Foreign Circle')
cy.seedCircle('Foreign Circle', { visible: true, open: true })
})
Expand Down
1 change: 0 additions & 1 deletion cypress/e2e/collectives-trash.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ describe('Collective', function() {
describe('move collective to trash and restore', function() {
before(function() {
cy.loginAs('bob')
cy.visit('apps/collectives')
cy.deleteAndSeedCollective('Delete me')
})
it('Allows moving the collective to trash', function() {
Expand Down
3 changes: 1 addition & 2 deletions cypress/e2e/dashboard-widget.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@ describe('Collectives dashboard widget', function() {
before(function() {
cy.loginAs('bob')
cy.enableDashboardWidget('collectives-recent-pages')
cy.visit('apps/collectives')
cy.deleteAndSeedCollective('Dashboard Collective1')
cy.seedPage('Page 1', '', 'Readme.md')
.seedPage('Page 1', '', 'Readme.md')
})
it('Lists pages in the dashboard widget', function() {
cy.visit('/apps/dashboard/')
Expand Down
5 changes: 2 additions & 3 deletions cypress/e2e/page-details.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,10 @@
describe('Page details', function() {
before(function() {
cy.loginAs('bob')
cy.visit('/apps/collectives')
cy.deleteAndSeedCollective('Our Garden')
cy.seedPage('Day 1', '', 'Readme.md')
.seedPage('Day 1', '', 'Readme.md')
.seedPage('TableOfContents', '', 'Readme.md')
cy.seedPageContent('Our Garden/Day 2.md', 'A test string with Day 2 in the middle and a [link to Day 1](/index.php/apps/collectives/Our%20Garden/Day%201).')
cy.seedPage('TableOfContents', '', 'Readme.md')
cy.seedPageContent('Our Garden/TableOfContents.md', '## Second-Level Heading')
})

Expand Down
7 changes: 3 additions & 4 deletions cypress/e2e/page-landingpage.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,13 @@ const collective = 'Landingpage Collective'
describe('Page landing page', function() {
before(function() {
cy.loginAs('bob')
cy.visit('/apps/collectives')
cy.deleteAndSeedCollective(collective)
.seedPage('Page 1', '', 'Readme.md')
.seedPage('Page 2', '', 'Readme.md')
.seedPage('Page 3', '', 'Readme.md')
cy.circleFind(collective).circleAddMember('alice')
cy.circleFind(collective).circleAddMember('jane')
cy.circleFind(collective).circleAddMember('john')
cy.seedPage('Page 1', '', 'Readme.md')
cy.seedPage('Page 2', '', 'Readme.md')
cy.seedPage('Page 3', '', 'Readme.md')
})

beforeEach(function() {
Expand Down
33 changes: 15 additions & 18 deletions cypress/e2e/page-list.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,24 +27,25 @@
describe('Page list', function() {
before(function() {
cy.loginAs('bob')
cy.visit('apps/collectives')
cy.deleteAndSeedCollective('Our Garden')
cy.seedPage('Target', '', 'Readme.md')
cy.seedPage('Target Subpage', '', 'Target.md')
.as('garden')
.seedPage('Target', '', 'Readme.md')
.seedPage('Target Subpage', '', 'Target.md')
// Wait 1 second to make sure that page order by time is right
cy.wait(1000) // eslint-disable-line cypress/no-unnecessary-waiting
cy.seedPage('Day 1', '', 'Readme.md')
cy.seedPage('Subpage Title', '', 'Day 1.md')
cy.seedPage('Day 2', '', 'Readme.md')
cy.seedPage('Page Title', '', 'Readme.md')
cy.seedPage('Move me internal', '', 'Readme.md')
cy.seedPage('Copy me internal', '', 'Readme.md')
cy.seedPage('Move me external', '', 'Readme.md')
cy.seedPage('Copy me external', '', 'Readme.md')
cy.seedPage('#% special chars', '', 'Readme.md')
cy.then(() => this.garden)
.seedPage('Day 1', '', 'Readme.md')
.seedPage('Subpage Title', '', 'Day 1.md')
.seedPage('Day 2', '', 'Readme.md')
.seedPage('Page Title', '', 'Readme.md')
.seedPage('Move me internal', '', 'Readme.md')
.seedPage('Copy me internal', '', 'Readme.md')
.seedPage('Move me external', '', 'Readme.md')
.seedPage('Copy me external', '', 'Readme.md')
.seedPage('#% special chars', '', 'Readme.md')
cy.deleteAndSeedCollective('MoveCopyTargetCollective')
cy.seedPage('Target external', '', 'Readme.md')
cy.seedPage('Target Subpage external', '', 'Target external.md')
.seedPage('Target external', '', 'Readme.md')
.seedPage('Target Subpage external', '', 'Target external.md')
})

beforeEach(function() {
Expand Down Expand Up @@ -94,7 +95,6 @@ describe('Page list', function() {

describe('Move and copy a page using the modal', function() {
it('Moves page to a subpage', function() {
cy.visit('apps/collectives/Our%20Garden')
cy.openPageMenu('Move me internal')
cy.clickMenuButton('Move or copy')
cy.get('.picker-list li')
Expand All @@ -118,7 +118,6 @@ describe('Page list', function() {
})

it('Copies page to a subpage', function() {
cy.visit('/apps/collectives/Our%20Garden')
cy.openPageMenu('Copy me internal')
cy.clickMenuButton('Move or copy')
cy.get('.picker-list li')
Expand Down Expand Up @@ -146,7 +145,6 @@ describe('Page list', function() {
})

it('Moves page to a subpage in another collective', function() {
cy.visit('/apps/collectives/Our%20Garden')
cy.openPageMenu('Move me external')
cy.clickMenuButton('Move or copy')
cy.get('.crumbs-home')
Expand Down Expand Up @@ -176,7 +174,6 @@ describe('Page list', function() {
})

it('Copies page to a subpage in another collective', function() {
cy.visit('/apps/collectives/Our%20Garden')
cy.openPageMenu('Copy me external')
cy.clickMenuButton('Move or copy')
cy.get('.crumbs-home')
Expand Down
19 changes: 9 additions & 10 deletions cypress/e2e/pages-links.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,18 @@ let anotherCollectiveFirstPageId, linkTargetPageId
describe('Page Link Handling', function() {
before(function() {
cy.loginAs('bob')
cy.visit('/apps/collectives')
cy.deleteAndSeedCollective('Another Collective')
cy.seedPage('First Page', '', 'Readme.md').then((id) => {
anotherCollectiveFirstPageId = id
})
.seedPage('First Page', '', 'Readme.md').then(({ pageId }) => {
anotherCollectiveFirstPageId = pageId
})
cy.deleteAndSeedCollective('Link Testing')
cy.seedPage('Parent', '', 'Readme.md')
cy.seedPage('Child', '', 'Parent.md')
cy.seedPage('Link Target', '', 'Readme.md').then((id) => {
linkTargetPageId = id
})
.seedPage('Parent', '', 'Readme.md')
.seedPage('Child', '', 'Parent.md')
.seedPage('Link Target', '', 'Readme.md').then(({ pageId }) => {
linkTargetPageId = pageId
})
.seedPage('Link Source', '', 'Readme.md')
cy.seedPageContent('Link%20Testing/Link%20Target.md', 'Some content')
cy.seedPage('Link Source', '', 'Readme.md')
cy.uploadFile('test.md', 'text/markdown').then((id) => {
textId = id
}).then(() => {
Expand Down
35 changes: 8 additions & 27 deletions cypress/e2e/pages.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,19 @@
*/

describe('Page', function() {

before(function() {
cy.loginAs('bob')
cy.visit('/apps/collectives')
cy.deleteAndSeedCollective('Our Garden')
cy.seedPage('Day 1', '', 'Readme.md')
cy.deleteAndSeedCollective('Our Garden').as('garden')
.seedPage('Day 1', '', 'Readme.md')
// Wait 1 second to make sure that page order by time is right
cy.wait(1000) // eslint-disable-line cypress/no-unnecessary-waiting
cy.seedPage('Day 2', '', 'Readme.md')
cy.seedPage('Page Title', '', 'Readme.md')
cy.seedPage('#% special chars', '', 'Readme.md')
cy.then(() => this.garden)
.seedPage('Day 2', '', 'Readme.md')
.seedPage('Page Title', '', 'Readme.md')
.seedPage('#% special chars', '', 'Readme.md')
.seedPage('Template', '', 'Readme.md')
cy.seedPageContent('Our Garden/Day 2.md', 'A test string with Day 2 in the middle and a [link to Day 1](/index.php/apps/collectives/Our%20Garden/Day%201).')
cy.seedPage('Template', '', 'Readme.md')
cy.seedPageContent('Our Garden/Template.md', 'This is going to be our template.')
})

Expand Down Expand Up @@ -272,26 +273,6 @@ describe('Page', function() {
})
}

describe('Changing page mode', function() {
it('Opens edit mode per default', function() {
cy.seedCollectivePageMode('Our Garden', 1)
cy.openPage('Day 2')
cy.getEditor()
.should('be.visible')
cy.getReadOnlyEditor()
.should('not.be.visible')
})

it('Opens view mode per default', function() {
cy.seedCollectivePageMode('Our Garden', 0)
cy.openPage('Day 2')
cy.getReadOnlyEditor()
.should('be.visible')
cy.getEditor()
.should('not.be.visible')
})
})

describe('Full width view', function() {
it('Allows to toggle persistent full-width view', function() {
cy.openPage('Day 2')
Expand Down
1 change: 0 additions & 1 deletion cypress/e2e/settings.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
describe('Settings', function() {
before(function() {
cy.loginAs('bob')
cy.visit('apps/collectives')
cy.deleteAndSeedCollective('A Collective')
})

Expand Down
Loading

0 comments on commit 075c0de

Please sign in to comment.