Skip to content

Commit 11ff263

Browse files
authored
[ENG-3880] Add file tests (#1567)
- Ticket: [ENG-3880] - Feature flag: n/a ## Purpose - Add/edit test for files page functionality ## Summary of Changes - Add data-test selectors - Edit Registration Files test - Edit FileBrowser component test - Edit Node Files test
1 parent 6e15d2a commit 11ff263

File tree

8 files changed

+221
-29
lines changed

8 files changed

+221
-29
lines changed

lib/osf-components/addon/components/file-browser/add-new/template.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
as |dropdown|
77
>
88
<dropdown.trigger
9+
data-test-add-new-trigger
910
aria-label={{t 'osf-components.file-browser.add_button_aria'}}
1011
local-class='TriggerButton {{if dropdown.isOpen 'CloseButton'}}'>
1112
<FaIcon @icon='plus' @size='2x' @fixedWidth={{true}} />

lib/osf-components/addon/components/file-browser/component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import StorageManager from 'osf-components/components/storage-provider-manager/s
1010
interface Args {
1111
manager: StorageManager;
1212
selectable?: boolean;
13+
enableUpload?: boolean;
1314
}
1415

1516
export default class FileBrowser extends Component<Args> {

lib/osf-components/addon/components/file-browser/delete-file-modal/template.hbs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
as |dialog|>
44
<dialog.trigger>
55
<Button
6+
data-test-bulk-delete-trigger
7+
data-analytics-name='Bulk file delete'
68
@type='destroy'
79
{{on 'click' dialog.open}}
810
>

lib/osf-components/addon/components/file-browser/template.hbs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@
9797
{{#if (gt @manager.selectedFiles.length 0)}}
9898
{{#if @manager.currentFolder.userCanDeleteFromHere}}
9999
<Button
100+
data-test-bulk-move-trigger
101+
data-analytics-name='Bulk move files'
100102
@layout='fake-link'
101103
{{on 'click' (queue (action (mut this.useCopyModal) false) (action (mut this.moveModalOpen) true))}}
102104
>
@@ -105,6 +107,8 @@
105107
</Button>
106108
{{/if}}
107109
<Button
110+
data-test-bulk-copy-trigger
111+
data-analytics-name='Bulk copy files'
108112
@layout='fake-link'
109113
{{on 'click' (queue (action (mut this.useCopyModal) true) (action (mut this.moveModalOpen) true))}}
110114
>
@@ -191,7 +195,7 @@
191195
{{/if}}
192196
</:item>
193197
<:empty>
194-
<div local-class='EmptyText'>
198+
<div data-test-empty-folder local-class='EmptyText'>
195199
{{t 'osf-components.file-browser.empty_folder'}}
196200
</div>
197201
</:empty>

mirage/factories/file.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export default Factory.extend<MirageFile & FileTraits>({
5454
path(i: number) {
5555
return `/${i}`;
5656
},
57-
checkout: 'null',
57+
checkout: null,
5858
tags() {
5959
return faker.lorem.words(5).split(' ');
6060
},
Lines changed: 86 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,106 @@
11
import { currentRouteName } from '@ember/test-helpers';
2+
import { ModelInstance } from 'ember-cli-mirage';
23
import { setupMirage } from 'ember-cli-mirage/test-support';
3-
// import { percySnapshot } from 'ember-percy';
4+
import { t } from 'ember-intl/test-support';
5+
import { TestContext } from 'ember-test-helpers';
6+
import { percySnapshot } from 'ember-percy';
47
import { module, test } from 'qunit';
58

6-
import { setupOSFApplicationTest, visit } from 'ember-osf-web/tests/helpers';
9+
import { click, setupOSFApplicationTest, visit } from 'ember-osf-web/tests/helpers';
10+
import NodeModel from 'ember-osf-web/models/node';
11+
import FileModel from 'ember-osf-web/models/file';
12+
import FileProviderModel from 'ember-osf-web/models/file-provider';
13+
14+
interface GuidNodeTestContext extends TestContext {
15+
node: ModelInstance<NodeModel>;
16+
osfStorage: ModelInstance<FileProviderModel>;
17+
file: ModelInstance<FileModel>;
18+
}
719

820
module('Acceptance | guid-node/files', hooks => {
921
setupOSFApplicationTest(hooks);
1022
setupMirage(hooks);
1123

12-
test('leftnav for read user', async function(assert) {
13-
const node = server.create('node', 'withFiles', 'withStorage');
14-
await visit(`/${node.id}/files`);
24+
hooks.beforeEach(async function(this: GuidNodeTestContext) {
25+
this.node = server.create('node', 'withFiles','withStorage');
26+
this.osfStorage = this.node.files.models.firstObject!;
27+
this.file = server.create('file', {
28+
id: 'hello',
29+
target: this.node,
30+
parentFolder: this.osfStorage.rootFolder,
31+
});
32+
});
33+
34+
test('read user', async function(this: GuidNodeTestContext, assert) {
35+
await visit(`/${this.node.id}/files`);
1536

1637
assert.equal(currentRouteName(), 'guid-node.files.provider', 'Current route is files');
38+
39+
// Check leftnav
1740
assert.dom('[data-test-overview-link]').exists('Overview link exists');
1841
assert.dom('[data-test-files-link]').exists('Files link exists');
19-
// check active tab + file providers
42+
assert.dom('[data-test-file-providers-list]')
43+
.containsText(t('registries.overview.files.storage_providers.osfstorage'), 'Osf Storage shown as provider');
2044
assert.dom('[data-test-analytics-link]').exists('Analytics link exists');
2145
assert.dom('[data-test-registrations-link]').exists('Registrations link exists');
2246
assert.dom('[data-test-contributors-link]').exists('Contributors link exists');
2347
assert.dom('[data-test-settings-link]').exists('Settings link exists');
48+
49+
// Check file actions
50+
await click(`[data-test-file-list-item="${this.file.id}"] [data-test-file-download-share-trigger]`);
51+
await percySnapshot(assert);
52+
assert.dom('[data-test-copy-button]').exists('Single file copy available');
53+
assert.dom('[data-test-move-button]').doesNotExist('Single file move not available');
54+
assert.dom('[data-test-delete-button]').doesNotExist('Single file delete not available');
55+
assert.dom('[data-test-rename-link]').doesNotExist('Single file rename not available');
56+
await click(`[data-test-file-list-item="${this.file.id}"] [data-test-file-download-share-trigger]`);
57+
58+
// Check bulk file actions
59+
await click(`[data-test-select-file="${this.file.id}"]`);
60+
assert.dom('[data-test-bulk-copy-trigger]').exists('Bulk copy available');
61+
assert.dom('[data-test-bulk-move-trigger]').doesNotExist('Bulk move not available');
62+
assert.dom('[data-test-bulk-delete-trigger]').doesNotExist('Bulk delete not available');
63+
64+
await click('[data-test-bulk-copy-trigger]');
65+
assert.dom('[data-test-dialog]').containsText(t('osf-components.move_file_modal.no_write_permission'),
66+
'Copy modal has permission-related message');
67+
assert.dom('[data-test-move-files-button]').isDisabled('Copy button disabled');
68+
assert.dom('[data-test-move-files-button]').containsText(t('general.copy'));
2469
});
2570

26-
// test no files
27-
// test selecting files + file actions
28-
// test switching providers
29-
// test links for different user permissions and VOL status and wiki enabled
71+
test('No files', async function(this: GuidNodeTestContext, assert) {
72+
this.osfStorage!.rootFolder.update({files: []});
73+
74+
await visit(`/${this.node.id}/files`);
75+
await percySnapshot(assert);
76+
assert.dom('[data-test-file-list-item]').doesNotExist('No file or folder items');
77+
assert.dom('[data-test-empty-folder]')
78+
.containsText(t('osf-components.file-browser.empty_folder'), 'Empty folder');
79+
});
80+
81+
test('Multi-file actions', async function(this: GuidNodeTestContext, assert) {
82+
this.node.update({ currentUserPermissions: ['admin', 'write', 'read'] });
83+
await visit(`/${this.node.id}/files`);
84+
await click(`[data-test-select-file="${this.file.id}"]`);
85+
await percySnapshot(assert);
86+
assert.dom('[data-test-bulk-move-trigger]').exists('Bulk move available');
87+
assert.dom('[data-test-bulk-copy-trigger]').exists('Bulk copy available');
88+
assert.dom('[data-test-bulk-delete-trigger]').exists('Bulk delete available');
89+
90+
await click('[data-test-bulk-move-trigger]');
91+
assert.dom('[data-test-dialog]').doesNotContainText(t('osf-components.move_file_modal.no_write_permission'),
92+
'Move modal does not show permission-related message');
93+
});
94+
95+
test('Switching providers', async function(this: GuidNodeTestContext, assert) {
96+
server.create('file-provider', {
97+
provider: 'bitbucket',
98+
name: 'bitbucket',
99+
target: this.node,
100+
});
101+
await visit(`/${this.node.id}/files`);
102+
assert.dom('[data-test-files-provider-link="bitbucket"').exists('Bitbucket shown');
103+
assert.dom('[data-test-files-provider-link="bitbucket"').hasAttribute('href',
104+
`/${this.node.id}/files/bitbucket`, 'Links to bitbucket files');
105+
});
30106
});

tests/engines/registries/acceptance/overview/files-test.ts

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { module, test } from 'qunit';
55
import { t } from 'ember-intl/test-support';
66

77
import { Permission } from 'ember-osf-web/models/osf-model';
8-
import { currentURL, visit } from 'ember-osf-web/tests/helpers';
8+
import { click, currentURL, visit } from 'ember-osf-web/tests/helpers';
99
import { setupEngineApplicationTest } from 'ember-osf-web/tests/helpers/engines';
1010

1111
module('Registries | Acceptance | overview.files', hooks => {
@@ -42,6 +42,7 @@ module('Registries | Acceptance | overview.files', hooks => {
4242
assert.dom('[data-test-file-search]').exists('File search input exists');
4343
assert.dom('[data-test-file-sort-trigger]').exists('File sort trigger exists');
4444
assert.dom('[data-test-file-help]').exists('File help button exists');
45+
assert.dom('[data-test-add-new-trigger]').doesNotExist('Add new button not shown');
4546

4647
assert.dom('[data-test-file-providers-list]').containsText(
4748
t('osf-components.file-browser.storage_providers.osfstorage'),'File providers list contains OSF Storage',
@@ -53,9 +54,30 @@ module('Registries | Acceptance | overview.files', hooks => {
5354
'Download all from here button has the right download link',
5455
);
5556

56-
// assert.dom('[data-test-file-list-item]').exists({ count: files.length }, 'Files displayed');
57-
// assert.dom('[data-test-file-list-link]').containsText('Name', 'File name displayed');
58-
// assert.dom('[data-test-file-list-date]').containsText('Date', 'File date displayed');
59-
// assert.dom('[data-test-file-download-share-trigger]').exists('File download/share trigger exists');
57+
assert.dom('[data-test-file-list-item]').exists('Files displayed');
58+
assert.dom('[data-test-file-name]').exists('File name displayed');
59+
assert.dom('[data-test-file-list-date]').exists('File date displayed');
60+
assert.dom('[data-test-file-download-share-trigger]').exists('File download/share trigger exists');
61+
await click('[data-test-file-download-share-trigger]');
62+
assert.dom('[data-test-download-button]').exists('Download button exists');
63+
assert.dom('[data-test-embed-button]').exists('Embed button exists');
64+
assert.dom('[data-test-social-sharing-button]').exists('Share button exists');
65+
assert.dom('[data-test-delete-button]').doesNotExist('Delete button not shown');
66+
assert.dom('[data-test-rename-link]').doesNotExist('Rename button not shown');
67+
assert.dom('[data-test-move-button]').doesNotExist('Move button not shown');
68+
assert.dom('[data-test-copy-button]').doesNotExist('Copy button not shown');
69+
70+
});
71+
72+
test('No files', async assert => {
73+
const registration = server.create('registration');
74+
75+
await visit(`/${registration.id}/files`);
76+
await percySnapshot(assert);
77+
assert.equal(currentURL(), `/${registration.id}/files`, 'At registration files list URL');
78+
79+
assert.dom('[data-test-file-list-item]').doesNotExist('No files displayed');
80+
assert.dom('[data-test-empty-folder]')
81+
.containsText(t('osf-components.file-browser.empty_folder'), 'Empty folder');
6082
});
6183
});

0 commit comments

Comments
 (0)