mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-06-02 16:09:59 -04:00
tests(permissions): add cypress tests for permission alert icon
Signed-off-by: Erik Michelson <github@erik.michelson.eu>
This commit is contained in:
parent
6d69b294cb
commit
5ccc9059f0
7 changed files with 182 additions and 28 deletions
frontend/cypress
115
frontend/cypress/e2e/permissions.spec.ts
Normal file
115
frontend/cypress/e2e/permissions.spec.ts
Normal file
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2023 The HedgeDoc developers (see AUTHORS file)
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
import type { NotePermissions } from '@hedgedoc/commons'
|
||||
|
||||
const mockPermissionChangeApiRoutes = (permission: NotePermissions) => {
|
||||
cy.intercept('PUT', 'api/private/notes/mock-note/metadata/permissions/groups/_EVERYONE', {
|
||||
statusCode: 200,
|
||||
body: permission
|
||||
})
|
||||
cy.intercept('DELETE', 'api/private/notes/mock-note/metadata/permissions/groups/_EVERYONE', {
|
||||
statusCode: 200,
|
||||
body: permission
|
||||
})
|
||||
cy.intercept('PUT', 'api/private/notes/mock-note/metadata/permissions/groups/_LOGGED_IN', {
|
||||
statusCode: 200,
|
||||
body: permission
|
||||
})
|
||||
cy.intercept('DELETE', 'api/private/notes/mock-note/metadata/permissions/groups/_LOGGED_IN', {
|
||||
statusCode: 200,
|
||||
body: permission
|
||||
})
|
||||
}
|
||||
|
||||
describe('The permission settings modal', () => {
|
||||
beforeEach(() => {
|
||||
cy.visitTestNote()
|
||||
cy.getByCypressId('sidebar-permission-btn').click()
|
||||
})
|
||||
|
||||
it('can be displayed', () => {
|
||||
cy.getByCypressId('permission-modal').should('be.visible')
|
||||
cy.getByCypressId('permission-owner-name').contains('Mock User')
|
||||
cy.getByCypressId('permission-setting-deny_LOGGED_IN').should('have.class', 'btn-secondary')
|
||||
cy.getByCypressId('permission-setting-deny_EVERYONE').should('have.class', 'btn-secondary')
|
||||
})
|
||||
|
||||
it('shows alert icon on invalid settings in special groups', () => {
|
||||
cy.getByCypressId('permission-setting-deny_LOGGED_IN').should('have.class', 'btn-secondary')
|
||||
mockPermissionChangeApiRoutes({
|
||||
owner: 'mock',
|
||||
sharedToUsers: [],
|
||||
sharedToGroups: [
|
||||
{
|
||||
groupName: '_EVERYONE',
|
||||
canEdit: false
|
||||
}
|
||||
]
|
||||
})
|
||||
cy.getByCypressId('permission-setting-read_EVERYONE').click()
|
||||
cy.get('svg.text-warning.me-2').should('be.visible')
|
||||
mockPermissionChangeApiRoutes({
|
||||
owner: 'mock',
|
||||
sharedToUsers: [],
|
||||
sharedToGroups: [
|
||||
{
|
||||
groupName: '_EVERYONE',
|
||||
canEdit: true
|
||||
}
|
||||
]
|
||||
})
|
||||
cy.getByCypressId('permission-setting-write_EVERYONE').click()
|
||||
cy.get('svg.text-warning.me-2').should('be.visible')
|
||||
mockPermissionChangeApiRoutes({
|
||||
owner: 'mock',
|
||||
sharedToUsers: [],
|
||||
sharedToGroups: [
|
||||
{
|
||||
groupName: '_EVERYONE',
|
||||
canEdit: false
|
||||
},
|
||||
{
|
||||
groupName: '_LOGGED_IN',
|
||||
canEdit: false
|
||||
}
|
||||
]
|
||||
})
|
||||
cy.getByCypressId('permission-setting-read_LOGGED_IN').click()
|
||||
cy.get('svg.text-warning.me-2').should('not.exist')
|
||||
mockPermissionChangeApiRoutes({
|
||||
owner: 'mock',
|
||||
sharedToUsers: [],
|
||||
sharedToGroups: [
|
||||
{
|
||||
groupName: '_EVERYONE',
|
||||
canEdit: true
|
||||
},
|
||||
{
|
||||
groupName: '_LOGGED_IN',
|
||||
canEdit: false
|
||||
}
|
||||
]
|
||||
})
|
||||
cy.getByCypressId('permission-setting-write_EVERYONE').click()
|
||||
cy.get('svg.text-warning.me-2').should('be.visible')
|
||||
mockPermissionChangeApiRoutes({
|
||||
owner: 'mock',
|
||||
sharedToUsers: [],
|
||||
sharedToGroups: [
|
||||
{
|
||||
groupName: '_EVERYONE',
|
||||
canEdit: true
|
||||
},
|
||||
{
|
||||
groupName: '_LOGGED_IN',
|
||||
canEdit: true
|
||||
}
|
||||
]
|
||||
})
|
||||
cy.getByCypressId('permission-setting-write_LOGGED_IN').click()
|
||||
cy.get('svg.text-warning.me-2').should('not.exist')
|
||||
})
|
||||
})
|
|
@ -6,35 +6,37 @@
|
|||
import type { Note } from '../../src/api/notes/types'
|
||||
|
||||
export const testNoteId = 'test'
|
||||
const mockMetadata = {
|
||||
id: testNoteId,
|
||||
aliases: [
|
||||
{
|
||||
name: 'mock-note',
|
||||
primaryAlias: true,
|
||||
noteId: testNoteId
|
||||
}
|
||||
],
|
||||
primaryAddress: 'mock-note',
|
||||
title: 'Mock Note',
|
||||
description: 'Mocked note for testing',
|
||||
tags: ['test', 'mock', 'cypress'],
|
||||
updatedAt: '2021-04-24T09:27:51.000Z',
|
||||
updateUsername: null,
|
||||
viewCount: 0,
|
||||
version: 2,
|
||||
createdAt: '2021-04-24T09:27:51.000Z',
|
||||
editedBy: [],
|
||||
permissions: {
|
||||
owner: 'mock',
|
||||
sharedToUsers: [],
|
||||
sharedToGroups: []
|
||||
}
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
cy.intercept(`api/private/notes/${testNoteId}`, {
|
||||
content: '',
|
||||
metadata: {
|
||||
id: testNoteId,
|
||||
aliases: [
|
||||
{
|
||||
name: 'mock-note',
|
||||
primaryAlias: true,
|
||||
noteId: testNoteId
|
||||
}
|
||||
],
|
||||
primaryAddress: 'mock-note',
|
||||
title: 'Mock Note',
|
||||
description: 'Mocked note for testing',
|
||||
tags: ['test', 'mock', 'cypress'],
|
||||
updatedAt: '2021-04-24T09:27:51.000Z',
|
||||
updateUsername: null,
|
||||
viewCount: 0,
|
||||
version: 2,
|
||||
createdAt: '2021-04-24T09:27:51.000Z',
|
||||
editedBy: [],
|
||||
permissions: {
|
||||
owner: 'mock',
|
||||
sharedToUsers: [],
|
||||
sharedToGroups: []
|
||||
}
|
||||
},
|
||||
metadata: mockMetadata,
|
||||
editedByAtPosition: []
|
||||
} as Note)
|
||||
cy.intercept(`api/private/notes/${testNoteId}/metadata`, mockMetadata)
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue