aboutsummaryrefslogtreecommitdiffstats
path: root/cypress/e2e/files_sharing/filesSharingUtils.ts
blob: 7bc943eea9a7eb057afb69783ad643e7abc3cf1a (plain)
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
/**
 * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */
/* eslint-disable jsdoc/require-jsdoc */
import { triggerActionForFile } from '../files/FilesUtils'

export interface ShareSetting {
	read: boolean
	update: boolean
	delete: boolean
	share: boolean
	download: boolean
}

export function createShare(fileName: string, username: string, shareSettings: Partial<ShareSetting> = {}) {
	openSharingPanel(fileName)

	cy.get('#app-sidebar-vue').within(() => {
		cy.get('#sharing-search-input').clear()
		cy.intercept({ times: 1, method: 'GET', url: '**/apps/files_sharing/api/v1/sharees?*' }).as('userSearch')
		cy.get('#sharing-search-input').type(username)
		cy.wait('@userSearch')
	})

	cy.get(`[user="${username}"]`).click()

	// HACK: Save the share and then update it, as permissions changes are currently not saved for new share.
	cy.get('[data-cy-files-sharing-share-editor-action="save"]').click({ scrollBehavior: 'nearest' })
	updateShare(fileName, 0, shareSettings)
}

export function updateShare(fileName: string, index: number, shareSettings: Partial<ShareSetting> = {}) {
	openSharingPanel(fileName)

	cy.get('#app-sidebar-vue').within(() => {
		cy.get('[data-cy-files-sharing-share-actions]').eq(index).click()
		cy.get('[data-cy-files-sharing-share-permissions-bundle="custom"]').click()

		if (shareSettings.download !== undefined) {
			cy.get('[data-cy-files-sharing-share-permissions-checkbox="download"]').find('input').as('downloadCheckbox')
			if (shareSettings.download) {
				// Force:true because the checkbox is hidden by the pretty UI.
				cy.get('@downloadCheckbox').check({ force: true, scrollBehavior: 'nearest' })
			} else {
				// Force:true because the checkbox is hidden by the pretty UI.
				cy.get('@downloadCheckbox').uncheck({ force: true, scrollBehavior: 'nearest' })
			}
		}

		if (shareSettings.read !== undefined) {
			cy.get('[data-cy-files-sharing-share-permissions-checkbox="read"]').find('input').as('readCheckbox')
			if (shareSettings.read) {
				// Force:true because the checkbox is hidden by the pretty UI.
				cy.get('@readCheckbox').check({ force: true, scrollBehavior: 'nearest' })
			} else {
				// Force:true because the checkbox is hidden by the pretty UI.
				cy.get('@readCheckbox').uncheck({ force: true, scrollBehavior: 'nearest' })
			}
		}

		if (shareSettings.update !== undefined) {
			cy.get('[data-cy-files-sharing-share-permissions-checkbox="update"]').find('input').as('updateCheckbox')
			if (shareSettings.update) {
				// Force:true because the checkbox is hidden by the pretty UI.
				cy.get('@updateCheckbox').check({ force: true, scrollBehavior: 'nearest' })
			} else {
				// Force:true because the checkbox is hidden by the pretty UI.
				cy.get('@updateCheckbox').uncheck({ force: true, scrollBehavior: 'nearest' })
			}
		}

		if (shareSettings.delete !== undefined) {
			cy.get('[data-cy-files-sharing-share-permissions-checkbox="delete"]').find('input').as('deleteCheckbox')
			if (shareSettings.delete) {
				// Force:true because the checkbox is hidden by the pretty UI.
				cy.get('@deleteCheckbox').check({ force: true, scrollBehavior: 'nearest' })
			} else {
				// Force:true because the checkbox is hidden by the pretty UI.
				cy.get('@deleteCheckbox').uncheck({ force: true, scrollBehavior: 'nearest' })
			}
		}

		cy.get('[data-cy-files-sharing-share-editor-action="save"]').click({ scrollBehavior: 'nearest' })
	})
}

export function openSharingPanel(fileName: string) {
	triggerActionForFile(fileName, 'details')

	cy.get('#app-sidebar-vue')
		.get('[aria-controls="tab-sharing"]')
		.click()
}