1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { User } from '@nextcloud/cypress'
import { handlePasswordConfirmation } from './usersUtils'
const admin = new User('admin', 'admin')
describe('Settings: App management', { testIsolation: true }, () => {
beforeEach(() => {
// disable QA if already enabled
cy.runOccCommand('app:disable -n testing')
// enable notification if already disabled
cy.runOccCommand('app:enable -n updatenotification')
// I am logged in as the admin
cy.login(admin)
// I open the Apps management
cy.visit('/settings/apps/installed')
})
it('Can enable an installed app', () => {
cy.get('#apps-list').should('exist')
// Wait for the app list to load
.contains('tr', 'QA testing', { timeout: 10000 })
.should('exist')
// I enable the "QA testing" app
.contains('button', 'Enable')
.click({ force: true })
handlePasswordConfirmation(admin.password)
// Wait until we see the disable button for the app
cy.get('#apps-list').should('exist')
.contains('tr', 'QA testing')
.should('exist')
// I see the disable button for the app
.contains('button', 'Disable', { timeout: 10000 })
// Change to enabled apps view
cy.get('#app-category-enabled a').click({ force: true })
cy.url().should('match', /settings\/apps\/enabled$/)
// I see that the "QA testing" app has been enabled
cy.get('#apps-list').contains('tr', 'QA testing')
})
it('Can disable an installed app', () => {
cy.get('#apps-list')
.should('exist')
// Wait for the app list to load
.contains('tr', 'Update notification', { timeout: 10000 })
.should('exist')
// I disable the "Update notification" app
.contains('button', 'Disable')
.click({ force: true })
handlePasswordConfirmation(admin.password)
// Wait until we see the disable button for the app
cy.get('#apps-list').should('exist')
.contains('tr', 'Update notification')
.should('exist')
// I see the enable button for the app
.contains('button', 'Enable', { timeout: 10000 })
// Change to disabled apps view
cy.get('#app-category-disabled a').click({ force: true })
cy.url().should('match', /settings\/apps\/disabled$/)
// I see that the "Update notification" app has been disabled
cy.get('#apps-list').contains('tr', 'Update notification')
})
it('Browse enabled apps', () => {
// When I open the "Active apps" section
cy.get('#app-category-enabled a')
.should('contain', 'Active apps')
.click({ force: true })
// Then I see that the current section is "Active apps"
cy.url().should('match', /settings\/apps\/enabled$/)
cy.get('#app-category-enabled').find('.active').should('exist')
// I see that there are only enabled apps
cy.get('#apps-list')
.should('exist')
.find('tr button')
.each(($action) => {
cy.wrap($action).should('not.contain', 'Enable')
})
})
it('Browse disabled apps', () => {
// When I open the "Active apps" section
cy.get('#app-category-disabled a')
.should('contain', 'Disabled apps')
.click({ force: true })
// Then I see that the current section is "Active apps"
cy.url().should('match', /settings\/apps\/disabled$/)
cy.get('#app-category-disabled').find('.active').should('exist')
// I see that there are only disabled apps
cy.get('#apps-list')
.should('exist')
.find('tr button')
.each(($action) => {
cy.wrap($action).should('not.contain', 'Disable')
})
})
it('Browse app bundles', () => {
// When I open the "App bundles" section
cy.get('#app-category-your-bundles a')
.should('contain', 'App bundles')
.click({ force: true })
// Then I see that the current section is "App bundles"
cy.url().should('match', /settings\/apps\/app-bundles$/)
cy.get('#app-category-your-bundles').find('.active').should('exist')
// I see the app bundles
cy.get('#apps-list').contains('tr', 'Enterprise bundle')
cy.get('#apps-list').contains('tr', 'Education Edition')
// I see that the "Enterprise bundle" is disabled
cy.get('#apps-list').contains('tr', 'Enterprise bundle').contains('button', 'Download and enable all')
})
it('View app details', () => {
// When I click on the "QA testing" app
cy.get('#apps-list').contains('a', 'QA testing').click({ force: true })
// I see that the app details are shown
cy.get('#app-sidebar-vue')
.should('be.visible')
.find('.app-sidebar-header__info')
.should('contain', 'QA testing')
cy.get('#app-sidebar-vue').contains('a', 'View in store').should('exist')
cy.get('#app-sidebar-vue').find('input[type="button"][value="Enable"]').should('be.visible')
cy.get('#app-sidebar-vue').find('input[type="button"][value="Remove"]').should('be.visible')
cy.get('#app-sidebar-vue').contains(/Version \d+\.\d+\.\d+/).should('be.visible')
})
/*
* TODO: Improve testing with app store as external API
* The following scenarios require the files_antivirus and calendar app
* being present in the app store with support for the current server version
* Ideally we would have either a dummy app store endpoint with some test apps
* or even an app store instance running somewhere to properly test this.
* This is also a requirement to properly test updates of apps
*/
// TODO: View app details for app store apps
// TODO: Install an app from the app store
// TODO: Show section from app store
})
|