aboutsummaryrefslogtreecommitdiffstats
path: root/apps/federatedfilesharing/src/components/RemoteShareDialog.cy.ts
blob: 79b5138327a2b40e12a86956bc2013f77fb8e3b3 (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
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
/**
 * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */

import RemoteShareDialog from './RemoteShareDialog.vue'

describe('RemoteShareDialog', () => {
	it('can be mounted', () => {
		cy.mount(RemoteShareDialog, {
			propsData: {
				owner: 'user123',
				name: 'my-photos',
				remote: 'nextcloud.local',
				passwordRequired: false,
			},
		})

		cy.findByRole('dialog')
			.should('be.visible')
			.and('contain.text', 'user123@nextcloud.local')
			.and('contain.text', 'my-photos')
		cy.findByRole('button', { name: 'Cancel' })
			.should('be.visible')
		cy.findByRole('button', { name: /add remote share/i })
			.should('be.visible')
	})

	it('does not show password input if not enabled', () => {
		cy.mount(RemoteShareDialog, {
			propsData: {
				owner: 'user123',
				name: 'my-photos',
				remote: 'nextcloud.local',
				passwordRequired: false,
			},
		})

		cy.findByRole('dialog')
			.should('be.visible')
			.find('input[type="password"]')
			.should('not.exist')
	})

	it('emits true when accepted', () => {
		const onClose = cy.spy().as('onClose')

		cy.mount(RemoteShareDialog, {
			listeners: {
				close: onClose,
			},
			propsData: {
				owner: 'user123',
				name: 'my-photos',
				remote: 'nextcloud.local',
				passwordRequired: false,
			},
		})

		cy.findByRole('button', { name: 'Cancel' }).click()
		cy.get('@onClose')
			.should('have.been.calledWith', false)
	})

	it('show password input if needed', () => {
		cy.mount(RemoteShareDialog, {
			propsData: {
				owner: 'admin',
				name: 'secret-data',
				remote: 'nextcloud.local',
				passwordRequired: true,
			},
		})

		cy.findByRole('dialog')
			.should('be.visible')
			.find('input[type="password"]')
			.should('be.visible')
	})

	it('emits the submitted password', () => {
		const onClose = cy.spy().as('onClose')

		cy.mount(RemoteShareDialog, {
			listeners: {
				close: onClose,
			},
			propsData: {
				owner: 'admin',
				name: 'secret-data',
				remote: 'nextcloud.local',
				passwordRequired: true,
			},
		})

		cy.get('input[type="password"]')
			.type('my password{enter}')
		cy.get('@onClose')
			.should('have.been.calledWith', true, 'my password')
	})

	it('emits no password if cancelled', () => {
		const onClose = cy.spy().as('onClose')

		cy.mount(RemoteShareDialog, {
			listeners: {
				close: onClose,
			},
			propsData: {
				owner: 'admin',
				name: 'secret-data',
				remote: 'nextcloud.local',
				passwordRequired: true,
			},
		})

		cy.get('input[type="password"]')
			.type('my password')
		cy.findByRole('button', { name: 'Cancel' }).click()
		cy.get('@onClose')
			.should('have.been.calledWith', false)
	})
})