Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
as |dropdown|
>
<dropdown.trigger
data-test-add-new-trigger
aria-label={{t 'osf-components.file-browser.add_button_aria'}}
local-class='TriggerButton {{if dropdown.isOpen 'CloseButton'}}'>
<FaIcon @icon='plus' @size='2x' @fixedWidth={{true}} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import StorageManager from 'osf-components/components/storage-provider-manager/s
interface Args {
manager: StorageManager;
selectable?: boolean;
enableUpload?: boolean;
}

export default class FileBrowser extends Component<Args> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
as |dialog|>
<dialog.trigger>
<Button
data-test-bulk-delete-trigger
data-analytics-name='Bulk file delete'
@type='destroy'
{{on 'click' dialog.open}}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@
{{#if (gt @manager.selectedFiles.length 0)}}
{{#if @manager.currentFolder.userCanDeleteFromHere}}
<Button
data-test-bulk-move-trigger
data-analytics-name='Bulk move files'
@layout='fake-link'
{{on 'click' (queue (action (mut this.useCopyModal) false) (action (mut this.moveModalOpen) true))}}
>
Expand All @@ -105,6 +107,8 @@
</Button>
{{/if}}
<Button
data-test-bulk-copy-trigger
data-analytics-name='Bulk copy files'
@layout='fake-link'
{{on 'click' (queue (action (mut this.useCopyModal) true) (action (mut this.moveModalOpen) true))}}
>
Expand Down Expand Up @@ -191,7 +195,7 @@
{{/if}}
</:item>
<:empty>
<div local-class='EmptyText'>
<div data-test-empty-folder local-class='EmptyText'>
{{t 'osf-components.file-browser.empty_folder'}}
</div>
</:empty>
Expand Down
2 changes: 1 addition & 1 deletion mirage/factories/file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export default Factory.extend<MirageFile & FileTraits>({
path(i: number) {
return `/${i}`;
},
checkout: 'null',
checkout: null,
tags() {
return faker.lorem.words(5).split(' ');
},
Expand Down
96 changes: 86 additions & 10 deletions tests/acceptance/guid-node/files-test.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,106 @@
import { currentRouteName } from '@ember/test-helpers';
import { ModelInstance } from 'ember-cli-mirage';
import { setupMirage } from 'ember-cli-mirage/test-support';
// import { percySnapshot } from 'ember-percy';
import { t } from 'ember-intl/test-support';
import { TestContext } from 'ember-test-helpers';
import { percySnapshot } from 'ember-percy';
import { module, test } from 'qunit';

import { setupOSFApplicationTest, visit } from 'ember-osf-web/tests/helpers';
import { click, setupOSFApplicationTest, visit } from 'ember-osf-web/tests/helpers';
import NodeModel from 'ember-osf-web/models/node';
import FileModel from 'ember-osf-web/models/file';
import FileProviderModel from 'ember-osf-web/models/file-provider';

interface GuidNodeTestContext extends TestContext {
node: ModelInstance<NodeModel>;
osfStorage: ModelInstance<FileProviderModel>;
file: ModelInstance<FileModel>;
}

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

test('leftnav for read user', async function(assert) {
const node = server.create('node', 'withFiles', 'withStorage');
await visit(`/${node.id}/files`);
hooks.beforeEach(async function(this: GuidNodeTestContext) {
this.node = server.create('node', 'withFiles','withStorage');
this.osfStorage = this.node.files.models.firstObject!;
this.file = server.create('file', {
id: 'hello',
target: this.node,
parentFolder: this.osfStorage.rootFolder,
});
});

test('read user', async function(this: GuidNodeTestContext, assert) {
await visit(`/${this.node.id}/files`);

assert.equal(currentRouteName(), 'guid-node.files.provider', 'Current route is files');

// Check leftnav
assert.dom('[data-test-overview-link]').exists('Overview link exists');
assert.dom('[data-test-files-link]').exists('Files link exists');
// check active tab + file providers
assert.dom('[data-test-file-providers-list]')
.containsText(t('registries.overview.files.storage_providers.osfstorage'), 'Osf Storage shown as provider');
assert.dom('[data-test-analytics-link]').exists('Analytics link exists');
assert.dom('[data-test-registrations-link]').exists('Registrations link exists');
assert.dom('[data-test-contributors-link]').exists('Contributors link exists');
assert.dom('[data-test-settings-link]').exists('Settings link exists');

// Check file actions
await click(`[data-test-file-list-item="${this.file.id}"] [data-test-file-download-share-trigger]`);
await percySnapshot(assert);
assert.dom('[data-test-copy-button]').exists('Single file copy available');
assert.dom('[data-test-move-button]').doesNotExist('Single file move not available');
assert.dom('[data-test-delete-button]').doesNotExist('Single file delete not available');
assert.dom('[data-test-rename-link]').doesNotExist('Single file rename not available');
await click(`[data-test-file-list-item="${this.file.id}"] [data-test-file-download-share-trigger]`);

// Check bulk file actions
await click(`[data-test-select-file="${this.file.id}"]`);
assert.dom('[data-test-bulk-copy-trigger]').exists('Bulk copy available');
assert.dom('[data-test-bulk-move-trigger]').doesNotExist('Bulk move not available');
assert.dom('[data-test-bulk-delete-trigger]').doesNotExist('Bulk delete not available');

await click('[data-test-bulk-copy-trigger]');
assert.dom('[data-test-dialog]').containsText(t('osf-components.move_file_modal.no_write_permission'),
'Copy modal has permission-related message');
assert.dom('[data-test-move-files-button]').isDisabled('Copy button disabled');
assert.dom('[data-test-move-files-button]').containsText(t('general.copy'));
});

// test no files
// test selecting files + file actions
// test switching providers
// test links for different user permissions and VOL status and wiki enabled
test('No files', async function(this: GuidNodeTestContext, assert) {
this.osfStorage!.rootFolder.update({files: []});

await visit(`/${this.node.id}/files`);
await percySnapshot(assert);
assert.dom('[data-test-file-list-item]').doesNotExist('No file or folder items');
assert.dom('[data-test-empty-folder]')
.containsText(t('osf-components.file-browser.empty_folder'), 'Empty folder');
});

test('Multi-file actions', async function(this: GuidNodeTestContext, assert) {
this.node.update({ currentUserPermissions: ['admin', 'write', 'read'] });
await visit(`/${this.node.id}/files`);
await click(`[data-test-select-file="${this.file.id}"]`);
await percySnapshot(assert);
assert.dom('[data-test-bulk-move-trigger]').exists('Bulk move available');
assert.dom('[data-test-bulk-copy-trigger]').exists('Bulk copy available');
assert.dom('[data-test-bulk-delete-trigger]').exists('Bulk delete available');

await click('[data-test-bulk-move-trigger]');
assert.dom('[data-test-dialog]').doesNotContainText(t('osf-components.move_file_modal.no_write_permission'),
'Move modal does not show permission-related message');
});

test('Switching providers', async function(this: GuidNodeTestContext, assert) {
server.create('file-provider', {
provider: 'bitbucket',
name: 'bitbucket',
target: this.node,
});
await visit(`/${this.node.id}/files`);
assert.dom('[data-test-files-provider-link="bitbucket"').exists('Bitbucket shown');
assert.dom('[data-test-files-provider-link="bitbucket"').hasAttribute('href',
`/${this.node.id}/files/bitbucket`, 'Links to bitbucket files');
});
});
32 changes: 27 additions & 5 deletions tests/engines/registries/acceptance/overview/files-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { module, test } from 'qunit';
import { t } from 'ember-intl/test-support';

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

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

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

// assert.dom('[data-test-file-list-item]').exists({ count: files.length }, 'Files displayed');
// assert.dom('[data-test-file-list-link]').containsText('Name', 'File name displayed');
// assert.dom('[data-test-file-list-date]').containsText('Date', 'File date displayed');
// assert.dom('[data-test-file-download-share-trigger]').exists('File download/share trigger exists');
assert.dom('[data-test-file-list-item]').exists('Files displayed');
assert.dom('[data-test-file-name]').exists('File name displayed');
assert.dom('[data-test-file-list-date]').exists('File date displayed');
assert.dom('[data-test-file-download-share-trigger]').exists('File download/share trigger exists');
await click('[data-test-file-download-share-trigger]');
assert.dom('[data-test-download-button]').exists('Download button exists');
assert.dom('[data-test-embed-button]').exists('Embed button exists');
assert.dom('[data-test-social-sharing-button]').exists('Share button exists');
assert.dom('[data-test-delete-button]').doesNotExist('Delete button not shown');
assert.dom('[data-test-rename-link]').doesNotExist('Rename button not shown');
assert.dom('[data-test-move-button]').doesNotExist('Move button not shown');
assert.dom('[data-test-copy-button]').doesNotExist('Copy button not shown');

});

test('No files', async assert => {
const registration = server.create('registration');

await visit(`/${registration.id}/files`);
await percySnapshot(assert);
assert.equal(currentURL(), `/${registration.id}/files`, 'At registration files list URL');

assert.dom('[data-test-file-list-item]').doesNotExist('No files displayed');
assert.dom('[data-test-empty-folder]')
.containsText(t('osf-components.file-browser.empty_folder'), 'Empty folder');
});
});
Loading