Skip to content

Commit e1cc4d9

Browse files
committed
Only show incompleteness banners to curators and maintainers. #2730.
1 parent a10c61f commit e1cc4d9

3 files changed

Lines changed: 186 additions & 77 deletions

File tree

src/components/Records/Record/GeneralInfo/Description.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
<span class="d-flex align-baseline width-15-percent-flex">
44
<v-tooltip bottom>
55
<template #activator="{ on }">
6-
<v-icon class="mr-2" size="15" v-on="on"> fa-question-circle </v-icon>
6+
<v-icon
7+
class="mr-2"
8+
size="15"
9+
v-on="on"
10+
> fa-question-circle </v-icon>
711
</template>
812
{{ recordTooltips.description }}
913
</v-tooltip>

src/lib/AlertBuilder/AlertBuilder.js

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -121,56 +121,63 @@ class AlertBuilder {
121121
if (!this.currentRecord.fairsharingRecord.incomplete) {
122122
return this;
123123
}
124-
if (this.currentRecord.fairsharingRecord.incomplete.required.length > 0) {
125-
let final = [];
126-
this.currentRecord.fairsharingRecord.incomplete.required.forEach(
127-
(missing) => {
128-
final.push(
129-
`<a class="white--text text-decoration-underline" target="_blank" href="${
130-
missing.url
131-
}">${missing.field.replace(/_/g, " ")}</a>`
132-
);
124+
if (this.currentUser.is_curator || this.currentRecord.fairsharingRecord.maintainers.map(m => m.id).includes(this.currentUser.id)) {
125+
if (this.currentRecord.fairsharingRecord.incomplete.required.length > 0) {
126+
let final = [];
127+
this.currentRecord.fairsharingRecord.incomplete.required.forEach(
128+
(missing) => {
129+
final.push(
130+
`<a class="white--text text-decoration-underline" target="_blank" href="${
131+
missing.url
132+
}">${missing.field.replace(/_/g, " ")}</a>`
133+
);
134+
}
135+
);
136+
let message;
137+
if (this.currentRecord.fairsharingRecord.doi) {
138+
message = 'This record is missing at least one required field.';
133139
}
134-
);
135-
let message;
136-
if (this.currentRecord.fairsharingRecord.doi) {
137-
message = 'This record is missing at least one required field.';
138-
}
139-
else {
140-
message = 'This record is incomplete and <b>will not be issued with a DOI</b> until at least all required fields have been completed.';
140+
else {
141+
message = 'This record is incomplete and <b>will not be issued with a DOI</b> until at least all required fields have been completed.';
142+
}
143+
this.alerts["isIncomplete"] = {
144+
type: "info",
145+
message: `${message} Affected fields: ${final.join(
146+
", "
147+
)}.`,
148+
};
141149
}
142-
this.alerts["isIncomplete"] = {
143-
type: "info",
144-
message: `${message} Affected fields: ${final.join(
145-
", "
146-
)}.`,
147-
};
148150
}
149151
return this;
150152
}
151153

152154
// Record lacks some recommended fields but could get a DOI.
153155
isMissingRecommendedFields() {
154-
if (!this.currentRecord.fairsharingRecord.incomplete) {
156+
if (
157+
!this.currentRecord.fairsharingRecord.incomplete) {
155158
return this;
156159
}
157-
if (this.currentRecord.fairsharingRecord.incomplete.recommended.length > 0) {
158-
let final = [];
159-
this.currentRecord.fairsharingRecord.incomplete.recommended.forEach(
160-
(missing) => {
161-
final.push(
162-
`<a class="white--text text-decoration-underline" target="_blank" href="${
163-
missing.url
164-
}">${missing.field.replace(/_/g, " ")}</a>`
165-
);
166-
}
167-
);
168-
this.alerts["isMissingRecommendedFields"] = {
169-
type: "info",
170-
message: `This record is missing at least one recommended field. Affected fields: ${final.join(
171-
", "
172-
)}.`,
173-
};
160+
if (this.currentUser.is_curator || this.currentRecord.fairsharingRecord.maintainers.map(m => m.id).includes(this.currentUser.id)) {
161+
if (
162+
this.currentRecord.fairsharingRecord.incomplete.recommended.length > 0
163+
) {
164+
let final = [];
165+
this.currentRecord.fairsharingRecord.incomplete.recommended.forEach(
166+
(missing) => {
167+
final.push(
168+
`<a class="white--text text-decoration-underline" target="_blank" href="${
169+
missing.url
170+
}">${missing.field.replace(/_/g, " ")}</a>`
171+
);
172+
}
173+
);
174+
this.alerts["isMissingRecommendedFields"] = {
175+
type: "info",
176+
message: `This record is missing at least one recommended field. Affected fields: ${final.join(
177+
", "
178+
)}.`,
179+
};
180+
}
174181
}
175182
return this;
176183
}

tests/unit/components/Clients/AlertBuilder.spec.js

Lines changed: 134 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -110,75 +110,173 @@ describe("AlertBuilder", () => {
110110

111111
it("can show required components missing", () => {
112112
alertBuilder = new AlertBuilder({
113-
fairsharingRecord: {
114-
doi: 'FAIRsharing.abc123',
115-
incomplete: {
116-
required: [
117-
{
118-
url: "http://notagoat.cx",
119-
field: "field_name",
120-
},
121-
],
122-
},
113+
fairsharingRecord: {
114+
maintainers: [],
115+
doi: 'FAIRsharing.abc123',
116+
incomplete: {
117+
required: [
118+
{
119+
url: "http://notagoat.cx",
120+
field: "field_name",
121+
},
122+
],
123+
},
124+
}
123125
},
124-
});
126+
{ is_curator: true }
127+
);
125128
resp = alertBuilder.isIncomplete();
126129
expect(Object.keys(resp.alerts).length).toBe(1);
127130
expect(resp.alerts.isIncomplete.message).toMatch(/missing at least one required field/);
128131

129132
alertBuilder = new AlertBuilder(
130133
{
131134
fairsharingRecord: {
135+
maintainers: [{id: 1}],
136+
doi: "FAIRsharing.abc123",
132137
incomplete: {
133138
required: [
134139
{
135140
url: "http://notagoat.cx",
136-
field: "field_name"
137-
}
138-
]
139-
}
140-
}
141+
field: "field_name",
142+
},
143+
],
144+
},
145+
},
146+
},
147+
{ is_curator: false, id: 1 }
148+
);
149+
resp = alertBuilder.isIncomplete();
150+
expect(Object.keys(resp.alerts).length).toBe(1);
151+
expect(resp.alerts.isIncomplete.message).toMatch(
152+
/missing at least one required field/
153+
);
154+
155+
alertBuilder = new AlertBuilder(
156+
{
157+
fairsharingRecord: {
158+
maintainers: [],
159+
doi: "FAIRsharing.abc123",
160+
incomplete: {
161+
required: [
162+
{
163+
url: "http://notagoat.cx",
164+
field: "field_name",
165+
},
166+
],
167+
},
168+
},
141169
},
170+
{ is_curator: false }
171+
);
172+
resp = alertBuilder.isIncomplete();
173+
expect(Object.keys(resp.alerts).length).toBe(0);
174+
175+
alertBuilder = new AlertBuilder(
176+
{
177+
fairsharingRecord: {
178+
maintainers: [],
179+
incomplete: {
180+
required: [
181+
{
182+
url: "http://notagoat.cx",
183+
field: "field_name",
184+
},
185+
],
186+
},
187+
},
188+
},
189+
{ is_curator: true }
142190
);
143191
resp = alertBuilder.isIncomplete();
144192
expect(Object.keys(resp.alerts).length).toBe(1);
145193
expect(resp.alerts.isIncomplete.message).toMatch(
146194
/not be issued with a DOI/
147195
);
148196

149-
alertBuilder = new AlertBuilder({
150-
fairsharingRecord: {
151-
incomplete: {
152-
required: [],
197+
alertBuilder = new AlertBuilder(
198+
{
199+
fairsharingRecord: {
200+
maintainers: [],
201+
incomplete: {
202+
required: [],
203+
},
153204
},
154205
},
155-
});
206+
{ is_curator: true }
207+
);
156208
resp = alertBuilder.isIncomplete();
157209
expect(Object.keys(resp.alerts).length).toBe(0);
158210
})
159211

160212
it("can show recommended components missing", () => {
161-
alertBuilder = new AlertBuilder({
162-
fairsharingRecord: {
163-
incomplete: {
164-
recommended: [
165-
{
166-
url: "http://notagoat.cx",
167-
field: "field_name",
168-
},
169-
],
213+
alertBuilder = new AlertBuilder(
214+
{
215+
fairsharingRecord: {
216+
maintainers: [],
217+
incomplete: {
218+
recommended: [
219+
{
220+
url: "http://notagoat.cx",
221+
field: "field_name",
222+
},
223+
],
224+
},
170225
},
171226
},
172-
});
227+
{ is_curator: true }
228+
);
173229
resp = alertBuilder.isMissingRecommendedFields();
174230
expect(Object.keys(resp.alerts).length).toBe(1);
175-
alertBuilder = new AlertBuilder({
176-
fairsharingRecord: {
177-
incomplete: {
178-
recommended: [],
231+
232+
alertBuilder = new AlertBuilder(
233+
{
234+
fairsharingRecord: {
235+
maintainers: [{id: 1}],
236+
incomplete: {
237+
recommended: [
238+
{
239+
url: "http://notagoat.cx",
240+
field: "field_name",
241+
},
242+
],
243+
},
179244
},
180245
},
181-
});
246+
{ is_curator: false, id: 1 }
247+
);
248+
resp = alertBuilder.isMissingRecommendedFields();
249+
expect(Object.keys(resp.alerts).length).toBe(1);
250+
251+
alertBuilder = new AlertBuilder(
252+
{
253+
fairsharingRecord: {
254+
maintainers: [],
255+
incomplete: {
256+
recommended: [
257+
{
258+
url: "http://notagoat.cx",
259+
field: "field_name",
260+
},
261+
],
262+
},
263+
},
264+
},
265+
{ is_curator: false }
266+
);
267+
resp = alertBuilder.isMissingRecommendedFields();
268+
expect(Object.keys(resp.alerts).length).toBe(0);
269+
270+
alertBuilder = new AlertBuilder({
271+
fairsharingRecord: {
272+
maintainers: [],
273+
incomplete: {
274+
recommended: [],
275+
},
276+
}
277+
},
278+
{ is_curator: true }
279+
);
182280
resp = alertBuilder.isMissingRecommendedFields();
183281
expect(Object.keys(resp.alerts).length).toBe(0);
184282
});

0 commit comments

Comments
 (0)