Skip to content

Commit a08781c

Browse files
[ENG-3879] Show dataverse specific info (#1570)
* Show dataverse specific info * Streamline displayname logic * Add dataverse-file unit test Co-authored-by: Brian J. Geiger <bgeiger@cos.io>
1 parent e2621aa commit a08781c

File tree

8 files changed

+99
-12
lines changed

8 files changed

+99
-12
lines changed

app/guid-file/template.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</h3>
1717
<div local-class='FlexContainerRow'>
1818
<h2 data-test-filename>
19-
{{this.model.name}}
19+
{{this.model.displayName}}
2020
{{#if this.viewedVersion}}
2121
({{t 'general.version'}}: {{this.viewedVersion}})
2222
{{/if}}

app/packages/files/dataverse-file.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@ import FileModel from 'ember-osf-web/models/file';
22
import File from 'ember-osf-web/packages/files/file';
33
import CurrentUserService from 'ember-osf-web/services/current-user';
44

5+
interface DataverseExtraInfo {
6+
datasetVersion: 'latest-published' | 'latest';
7+
fileId: string;
8+
hasPublishedVersion: boolean;
9+
hashes: {
10+
md5: string,
11+
};
12+
}
13+
514
export default class DataverseFile extends File {
615
shouldShowRevisions = false;
716
providerHandlesVersioning = false;
@@ -13,4 +22,11 @@ export default class DataverseFile extends File {
1322
get currentUserPermission() {
1423
return 'read';
1524
}
25+
26+
get displayName() {
27+
const fileExtra = this.fileModel.extra as DataverseExtraInfo;
28+
const translationKeyPrefix = 'osf-components.file-browser.provider-specific-data.dataverse.';
29+
const fileNameSuffix = ' ' + this.intl.t(translationKeyPrefix + fileExtra.datasetVersion);
30+
return this.fileModel.name + fileNameSuffix;
31+
}
1632
}

app/packages/files/file.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ export default abstract class File {
9999
return this.fileModel.name;
100100
}
101101

102+
get displayName() {
103+
return this.fileModel.name;
104+
}
105+
102106
get id() {
103107
return this.fileModel.id;
104108
}

lib/osf-components/addon/components/file-actions-menu/template.hbs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
as |dropdown|
77
>
88
<dropdown.trigger
9-
aria-label={{t 'file_actions_menu.actions' filename=@item.name}}
9+
aria-label={{t 'file_actions_menu.actions' filename=@item.displayName}}
1010
data-test-file-download-share-trigger
1111
data-analytics-name='File actions'
1212
>
@@ -40,8 +40,8 @@
4040
</dd.trigger>
4141
</FileEmbedMenu>
4242
<SharingIcons::Dropdown
43-
@title={{@item.name}}
44-
@description={{@item.name}}
43+
@title={{@item.displayName}}
44+
@description={{@item.displayName}}
4545
@hyperlink={{@item.links.html}}
4646
@showText={{true}}
4747
as |dd|

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
data-analytics-name='Select file'
1010
data-analytics-category='checkbox'
1111
data-test-select-file={{@item.id}}
12-
aria-label={{t 'osf-components.file-browser.select_file' fileName=@item.name}}
12+
aria-label={{t 'osf-components.file-browser.select_file' fileName=@item.displayName}}
1313
{{on 'click' (action @manager.selectFile @item)}}
1414
local-class='Label'
1515
>
@@ -22,7 +22,7 @@
2222
{{/if}}
2323
<div local-class='FileList__item__name {{unless @isDesktop 'name__mobile'}}'>
2424
{{#if @item.isCheckedOut}}
25-
<span local-class='CheckoutSpan'>
25+
<span data-test-file-list-checkout local-class='CheckoutSpan'>
2626
<FaIcon local-class='CheckoutIcon' @icon='lock' />
2727
<BsTooltip
2828
@placement='right'
@@ -33,11 +33,12 @@
3333
</span>
3434
{{/if}}
3535
<OsfLink
36+
data-test-file-list-link
3637
data-analytics-name='Open file'
3738
aria-label={{if
3839
@item.showAsUnviewed
39-
(t 'osf-components.file-browser.view_unseen_file' fileName=@item.name)
40-
(t 'osf-components.file-browser.view_file' fileName=@item.name)
40+
(t 'osf-components.file-browser.view_unseen_file' fileName=@item.displayName)
41+
(t 'osf-components.file-browser.view_file' fileName=@item.displayName)
4142
}}
4243
@href={{@item.links.html}}
4344
@target='_blank'
@@ -47,7 +48,7 @@
4748
@prefix='far' @icon='file-alt' @fixedWidth={{true}}
4849
/>
4950
<span data-test-file-name>
50-
{{@item.name}}
51+
{{@item.displayName}}
5152
</span>
5253
</OsfLink>
5354
</div>

tests/integration/components/file-browser/file-item/component-test.ts

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
import { render } from '@ember/test-helpers';
22
import { hbs } from 'ember-cli-htmlbars';
3-
import { TestContext } from 'ember-intl/test-support';
3+
import { TestContext, t } from 'ember-intl/test-support';
44
import { click } from 'ember-osf-web/tests/helpers';
55
import { setupRenderingTest } from 'ember-qunit';
66
import moment from 'moment';
77
import { module, test } from 'qunit';
88

9+
import styles from 'osf-components/components/file-browser/file-item/styles';
10+
911
interface Links {
1012
html: string;
1113
download: string;
1214
}
1315

1416
interface FileItem {
1517
name: string;
18+
displayName: string;
1619
links: Links;
1720
dateModified: string;
1821
id: string;
22+
isCheckedOut?: boolean;
23+
showAsUnviewed?: boolean;
1924
}
2025

2126
interface Manager {
@@ -37,6 +42,7 @@ module('Integration | Component | file-browser :: file-item', hooks => {
3742
this.item = {
3843
id: 'fakeId',
3944
name: 'Push&Pull',
45+
displayName: 'Push&Pull',
4046
links: {
4147
html: 'thisisafakelink',
4248
download: 'thisisafakedownloadlink',
@@ -59,7 +65,7 @@ module('Integration | Component | file-browser :: file-item', hooks => {
5965
);
6066
assert.dom('[data-test-indented="false"][data-test-file-list-item]').exists('File item exists');
6167
assert.dom('[data-test-file-name]').exists('File name exists');
62-
assert.dom('[data-test-file-name]').hasText(this.item.name, 'File name is correct');
68+
assert.dom('[data-test-file-name]').hasText(this.item.displayName, 'File name is correct');
6369
assert.dom('[data-test-file-modified-date]').exists('Modified date exists');
6470
assert.dom('[data-test-file-modified-date]').hasText(
6571
moment(this.item.dateModified).format('YYYY-MM-DD hh:mm A'),
@@ -79,7 +85,7 @@ module('Integration | Component | file-browser :: file-item', hooks => {
7985
);
8086
assert.dom('[data-test-indented="true"][data-test-file-list-item]').exists('File item exists');
8187
assert.dom('[data-test-file-name]').exists('File name exists');
82-
assert.dom('[data-test-file-name]').hasText(this.item.name, 'File name is correct');
88+
assert.dom('[data-test-file-name]').hasText(this.item.displayName, 'File name is correct');
8389
assert.dom('[data-test-file-modified-date]').exists('Modified date exists');
8490
assert.dom('[data-test-file-modified-date]').hasText(
8591
moment(this.item.dateModified).format('YYYY-MM-DD hh:mm A'),
@@ -90,4 +96,31 @@ module('Integration | Component | file-browser :: file-item', hooks => {
9096
assert.dom('[data-test-embed-button]').exists('Embed button exists');
9197
assert.dom('[data-test-social-sharing-button]').exists('Share button exists');
9298
});
99+
100+
test('it renders checked-out file', async function(this: FileItemTestContext, assert) {
101+
this.manager.parentFolder = 'fakeParentFolder';
102+
this.item.isCheckedOut = true;
103+
await render(
104+
hbs`<FileBrowser::FileItem @manager={{this.manager}} @item={{this.item}} @isDesktop={{true}} />`,
105+
);
106+
assert.dom('[data-test-file-list-checkout]').exists('Checkout icon exists');
107+
assert.dom('[data-test-file-list-link]').hasAria('label',
108+
t('osf-components.file-browser.view_file', { fileName: this.item.displayName }), 'Correct aria-label');
109+
assert.dom('[data-test-file-list-link]').doesNotHaveClass(styles.Unviewed, 'Link is not styled as unviewed');
110+
assert.dom('[data-test-file-list-link]').hasText(this.item.displayName, 'Link has correct text');
111+
});
112+
113+
test('it renders unviewed file', async function(this: FileItemTestContext, assert) {
114+
this.manager.parentFolder = 'fakeParentFolder';
115+
this.item.showAsUnviewed = true;
116+
await render(
117+
hbs`<FileBrowser::FileItem @manager={{this.manager}} @item={{this.item}} @isDesktop={{true}} />`,
118+
);
119+
assert.dom('[data-test-file-list-checkout]').doesNotExist('Checkout icon does not exist');
120+
assert.dom('[data-test-file-list-link]').hasAria('label',
121+
t('osf-components.file-browser.view_unseen_file', { fileName: this.item.displayName }),
122+
'Correct aria-label');
123+
assert.dom('[data-test-file-list-link]').hasClass(styles.Unviewed, 'Link is styled as unviewed');
124+
assert.dom('[data-test-file-list-link]').hasText(this.item.displayName, 'Link has correct text');
125+
});
93126
});
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { setupMirage } from 'ember-cli-mirage/test-support';
2+
import { t } from 'ember-intl/test-support';
3+
import { module, test } from 'qunit';
4+
import { setupTest } from 'ember-qunit';
5+
import DataverseFile from 'ember-osf-web/packages/files/dataverse-file';
6+
7+
module('Unit | Packages | files | dataverse-file', hooks => {
8+
setupTest(hooks);
9+
setupMirage(hooks);
10+
test('proper display names', async function(assert) {
11+
const mirageFilePublished = server.create('file');
12+
mirageFilePublished.extra.datasetVersion = 'latest-published';
13+
const publishedFile = await this.owner.lookup('service:store').findRecord('file', mirageFilePublished.id);
14+
const publishedDataverseFile = new DataverseFile(this.owner.lookup('service:current-user'), publishedFile);
15+
const publishedSuffix = t('osf-components.file-browser.provider-specific-data.dataverse.latest-published');
16+
assert.equal(publishedDataverseFile.displayName,
17+
publishedDataverseFile.name + ' ' + publishedSuffix,
18+
'Published dataverse file has correct display name');
19+
20+
const mirageFileDraft = server.create('file');
21+
mirageFileDraft.extra.datasetVersion = 'latest';
22+
const draftFile = await this.owner.lookup('service:store').findRecord('file', mirageFileDraft.id);
23+
const draftDataverseFile = new DataverseFile(this.owner.lookup('service:current-user'), draftFile);
24+
const draftSuffix = t('osf-components.file-browser.provider-specific-data.dataverse.latest');
25+
assert.equal(draftDataverseFile.displayName,
26+
draftDataverseFile.name + ' ' + draftSuffix,
27+
'Draft dataverse file has correct display name');
28+
});
29+
});

translations/en-us.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,6 +1898,10 @@ osf-components:
18981898
onedrive: 'OneDrive'
18991899
owncloud: 'ownCloud'
19001900
s3: 'Amazon S3'
1901+
provider-specific-data:
1902+
dataverse:
1903+
latest-published: '(Published)'
1904+
latest: '(Draft)'
19011905
empty_folder: 'This folder is empty.'
19021906
breadcrumbs: 'Breadcrumb'
19031907
create_folder:

0 commit comments

Comments
 (0)