From 770be221c482df00f7187c82ba8dc178eb969405 Mon Sep 17 00:00:00 2001 From: Yuhuai Liu Date: Fri, 8 Oct 2021 16:50:20 -0400 Subject: [PATCH] misc changes --- app/models/registration.ts | 25 +++++++++++++++---- app/models/schema-response.ts | 4 +-- .../registration-schema/validations.ts | 2 +- .../registration-list/manager/component.ts | 6 ++--- .../revised-responses-list/component.ts | 4 +-- .../registries/update-dropdown/component.ts | 2 +- .../make-decision-dropdown/component.ts | 14 +++++++---- .../addon/edit-revision/revision-manager.ts | 2 +- mirage/factories/schema-response-action.ts | 2 +- mirage/scenarios/registrations.ts | 4 +-- mirage/views/registration.ts | 4 +-- mirage/views/schema-response-action.ts | 2 +- .../acceptance/edit-revision/revision-test.ts | 6 ++--- .../revised-responses-list/component-test.ts | 2 +- 14 files changed, 49 insertions(+), 30 deletions(-) diff --git a/app/models/registration.ts b/app/models/registration.ts index 9397f6acbb2..81d73574fdb 100644 --- a/app/models/registration.ts +++ b/app/models/registration.ts @@ -27,13 +27,28 @@ export enum RegistrationReviewStates { PendingWithdraw = 'pending_withdraw', } -type NonActionableStates = RegistrationReviewStates.Initial +export type NonActionableRegistrationStates = RegistrationReviewStates.Initial | RegistrationReviewStates.Withdrawn | RegistrationReviewStates.Rejected; +export type ActionableRevisionStates = RevisionReviewStates.RevisionPendingModeration; + export type ReviewsStateToDecisionMap = - Exclude | RevisionReviewStates.RevisionPendingModeration; + Exclude | RevisionReviewStates.RevisionPendingModeration; export const reviewsStateToDecisionMap: { - [index in ReviewsStateToDecisionMap]: Array + [index in ReviewsStateToDecisionMap]: Array< + Exclude< + ReviewActionTrigger, + ReviewActionTrigger.Submit + | ReviewActionTrigger.RequestWithdrawal + | ReviewActionTrigger.RequestEmbargoTermination> + | + Exclude< + SchemaResponseActionTrigger, + SchemaResponseActionTrigger.SubmitRevision + | SchemaResponseActionTrigger.AdminApproveRevision + | SchemaResponseActionTrigger.AdminRejectRevision + > + > } = { [RegistrationReviewStates.Accepted]: [ReviewActionTrigger.ForceWithdraw], [RegistrationReviewStates.Embargo]: [ReviewActionTrigger.ForceWithdraw], @@ -86,10 +101,10 @@ export default class RegistrationModel extends NodeModel.extend(Validations) { @attr('fixstring') articleDoi!: string | null; @attr('object') registeredMeta!: RegistrationMetadata; @attr('registration-responses') registrationResponses!: RegistrationResponse; - @attr('fixstring') reviewsState?: RegistrationReviewStates; + @attr('fixstring') reviewsState!: RegistrationReviewStates; @attr('fixstring') iaUrl?: string; @attr('array') providerSpecificMetadata!: ProviderMetadata[]; - @attr('fixstring') revisionState?: RevisionReviewStates; + @attr('fixstring') revisionState!: RevisionReviewStates; // Write-only attributes @attr('array') includedNodeIds?: string[]; diff --git a/app/models/schema-response.ts b/app/models/schema-response.ts index c381de1d949..1fe4436697d 100644 --- a/app/models/schema-response.ts +++ b/app/models/schema-response.ts @@ -8,8 +8,8 @@ import { RegistrationResponse } from 'ember-osf-web/packages/registration-schema import OsfModel from './osf-model'; export enum RevisionReviewStates { + Unapproved = 'unapproved', RevisionInProgress = 'in_progress', - RevisionPendingAdminApproval = 'pending_admin_approval', RevisionPendingModeration = 'pending_moderation', Approved = 'approved', } @@ -19,7 +19,7 @@ export default class SchemaResponseModel extends OsfModel { @attr('date') dateCreated!: Date; @attr('date') dateModified!: Date; @attr('fixstring') revisionJustification!: string; - @attr('registration-response-key-array') revisedResponses!: string[]; + @attr('registration-response-key-array') updatedResponseKeys!: string[]; @attr('registration-responses') revisionResponses!: RegistrationResponse; @attr('boolean') isOriginalResponse!: boolean; @attr('boolean') isPendingCurrentUserApproval!: boolean; diff --git a/app/packages/registration-schema/validations.ts b/app/packages/registration-schema/validations.ts index 81470a8d1bd..924bcfaf60d 100644 --- a/app/packages/registration-schema/validations.ts +++ b/app/packages/registration-schema/validations.ts @@ -178,7 +178,7 @@ export function buildSchemaResponseValidations() { type: 'blank', })]; set(validationObj, 'revisionJustification', notBlank); - set(validationObj, 'revisedResponses', [validateLength({ + set(validationObj, 'updatedResponseKeys', [validateLength({ min: 1, allowBlank: false, allowNone: false, diff --git a/lib/osf-components/addon/components/registries/registration-list/manager/component.ts b/lib/osf-components/addon/components/registries/registration-list/manager/component.ts index d5739376b18..8db5372635d 100644 --- a/lib/osf-components/addon/components/registries/registration-list/manager/component.ts +++ b/lib/osf-components/addon/components/registries/registration-list/manager/component.ts @@ -14,14 +14,14 @@ export default class RegistrationListManager extends Component { @computed('state', 'sort') get filterParams() { - const filter: Record = { review_state: this.state, revision_state: undefined }; + const filter: Record = { reviews_state: this.state, revision_state: undefined }; if (this.state === RegistrationReviewStates.Embargo) { - filter.review_state = + filter.reviews_state = [RegistrationReviewStates.Embargo, RegistrationReviewStates.PendingEmbargoTermination].toString(); } if (this.state === RevisionReviewStates.RevisionPendingModeration) { filter.revision_state = [RevisionReviewStates.RevisionPendingModeration].toString(); - filter.review_state = undefined; + filter.reviews_state = undefined; } const query: Record> = { filter, diff --git a/lib/osf-components/addon/components/registries/revised-responses-list/component.ts b/lib/osf-components/addon/components/registries/revised-responses-list/component.ts index 7f525f7051c..3f5765f71c9 100644 --- a/lib/osf-components/addon/components/registries/revised-responses-list/component.ts +++ b/lib/osf-components/addon/components/registries/revised-responses-list/component.ts @@ -20,8 +20,8 @@ export default class RevisedResponsesList extends Component { get revisedResponses(): string[] { const { revision } = this.args; - if (revision.revisedResponses) { - const allRevisedLabels = revision.revisedResponses + if (revision.updatedResponseKeys) { + const allRevisedLabels = revision.updatedResponseKeys .reduce((labels: string[], revisedResponse: string) => { const revisedGroup = this.groups?.filter( (group: SchemaBlockGroup) => group.registrationResponseKey?.includes(revisedResponse), diff --git a/lib/osf-components/addon/components/registries/update-dropdown/component.ts b/lib/osf-components/addon/components/registries/update-dropdown/component.ts index 4e9eed7a923..c5b5317f41b 100644 --- a/lib/osf-components/addon/components/registries/update-dropdown/component.ts +++ b/lib/osf-components/addon/components/registries/update-dropdown/component.ts @@ -61,7 +61,7 @@ export default class UpdateDropdown extends Component { } get shouldShowUpdateLink(): boolean { - return this.args.registration.revisionState !== RevisionReviewStates.Approved + return this.args.registration.revisionState === RevisionReviewStates.RevisionInProgress && this.args.registration.currentUserIsContributor; } diff --git a/lib/registries/addon/components/make-decision-dropdown/component.ts b/lib/registries/addon/components/make-decision-dropdown/component.ts index fac71c55db8..7b7a52cf5ea 100644 --- a/lib/registries/addon/components/make-decision-dropdown/component.ts +++ b/lib/registries/addon/components/make-decision-dropdown/component.ts @@ -13,8 +13,9 @@ import RouterService from '@ember/routing/router-service'; import RegistrationModel, { RegistrationReviewStates, - ReviewsStateToDecisionMap, reviewsStateToDecisionMap, + NonActionableRegistrationStates, + ActionableRevisionStates, } from 'ember-osf-web/models/registration'; import { ReviewActionTrigger } from 'ember-osf-web/models/review-action'; import captureException, { getApiErrorMessage } from 'ember-osf-web/utils/capture-exception'; @@ -68,7 +69,9 @@ export default class MakeDecisionDropdown extends Component { } get revisionIsPending() { - return this.args.registration.revisionState === RevisionReviewStates.RevisionPendingModeration; + return (this.args.registration.reviewsState === RegistrationReviewStates.Accepted + || this.args.registration.reviewsState === RegistrationReviewStates.Embargo) + && this.args.registration.revisionState === RevisionReviewStates.RevisionPendingModeration; } get commentTextArea() { @@ -105,9 +108,10 @@ export default class MakeDecisionDropdown extends Component { } get moderatorActions() { - const { reviewsState } = this.args.registration; - const { revisionState } = this.args.registration; - let actions: ReviewsStateToDecisionMap[] = reviewsState ? reviewsStateToDecisionMap[reviewsState] : []; + const reviewsState = + this.args.registration.reviewsState as Exclude; + const revisionState = this.args.registration.revisionState as ActionableRevisionStates; + let actions = reviewsState ? reviewsStateToDecisionMap[reviewsState] : []; if (this.revisionIsPending) { actions = reviewsStateToDecisionMap[revisionState]; } diff --git a/lib/registries/addon/edit-revision/revision-manager.ts b/lib/registries/addon/edit-revision/revision-manager.ts index 63b363d522a..a8176afa2de 100644 --- a/lib/registries/addon/edit-revision/revision-manager.ts +++ b/lib/registries/addon/edit-revision/revision-manager.ts @@ -91,7 +91,7 @@ export default class RevisionManager { @computed('revision.reviewsState') get isPendingAdminApproval() { - return this.revision.reviewsState === RevisionReviewStates.RevisionPendingAdminApproval; + return this.revision.reviewsState === RevisionReviewStates.Unapproved; } @computed('revision.reviewsState') diff --git a/mirage/factories/schema-response-action.ts b/mirage/factories/schema-response-action.ts index e208925ea7b..30d48dcc89f 100644 --- a/mirage/factories/schema-response-action.ts +++ b/mirage/factories/schema-response-action.ts @@ -5,7 +5,7 @@ import SchemaResponseActionModel, { SchemaResponseActionTrigger } from 'ember-os export default Factory.extend({ fromState: RevisionReviewStates.RevisionInProgress, - toState: RevisionReviewStates.RevisionPendingAdminApproval, + toState: RevisionReviewStates.Unapproved, actionTrigger: faker.random.objectElement(Object.values(SchemaResponseActionTrigger)), comment() { diff --git a/mirage/scenarios/registrations.ts b/mirage/scenarios/registrations.ts index 7a4f6ba3dfe..78ad903596d 100644 --- a/mirage/scenarios/registrations.ts +++ b/mirage/scenarios/registrations.ts @@ -260,7 +260,7 @@ export function registrationScenario( server.create('schema-response', { id: 'copyEditRPA', - reviewsState: RevisionReviewStates.RevisionPendingAdminApproval, + reviewsState: RevisionReviewStates.Unapproved, revisionJustification: 'Copy Edit', revisionResponses: { q1: 'Good Morning', @@ -292,7 +292,7 @@ export function registrationScenario( }, initiatedBy: currentUser, registration: bismuth, - revisedResponses: ['page-one_short-text', 'page-two_short-text'], + updatedResponseKeys: ['page-one_short-text', 'page-two_short-text'], }); server.create('schema-response', { diff --git a/mirage/views/registration.ts b/mirage/views/registration.ts index c877e828a58..95b582ec5b6 100644 --- a/mirage/views/registration.ts +++ b/mirage/views/registration.ts @@ -92,8 +92,8 @@ export function createRegistration(this: HandlerContext, schema: Schema) { export function getProviderRegistrations(this: HandlerContext, schema: Schema, request: Request) { const { parentID: providerId } = request.params; - const field = request.queryParams['filter[review_state]'] ? 'reviewsState' : 'revisionState'; - const filterParams = request.queryParams['filter[review_state]'] || request.queryParams['filter[revision_state]']; + const field = request.queryParams['filter[reviews_state]'] ? 'reviewsState' : 'revisionState'; + const filterParams = request.queryParams['filter[reviews_state]'] || request.queryParams['filter[revision_state]']; const params = filterParams.split(','); const { pageSize } = request.queryParams; const provider = schema.registrationProviders.find(providerId); diff --git a/mirage/views/schema-response-action.ts b/mirage/views/schema-response-action.ts index aab8f49992b..852896cbc5a 100644 --- a/mirage/views/schema-response-action.ts +++ b/mirage/views/schema-response-action.ts @@ -22,7 +22,7 @@ export function createSchemaResponseAction(this: HandlerContext, schema: Schema, }); switch (trigger) { case SchemaResponseActionTrigger.SubmitRevision: - revision.reviewsState = RevisionReviewStates.RevisionPendingAdminApproval; + revision.reviewsState = RevisionReviewStates.Unapproved; revision.isPendingCurrentUserApproval = true; break; case SchemaResponseActionTrigger.AdminRejectRevision: diff --git a/tests/engines/registries/acceptance/edit-revision/revision-test.ts b/tests/engines/registries/acceptance/edit-revision/revision-test.ts index d6c722ca5a5..51abe1dad68 100644 --- a/tests/engines/registries/acceptance/edit-revision/revision-test.ts +++ b/tests/engines/registries/acceptance/edit-revision/revision-test.ts @@ -394,7 +394,7 @@ module('Registries | Acceptance | registries revision', hooks => { .hasClass('fa-exclamation-circle', 'first page invalid'); // hack since we don't actually track which fields have been updated in mirage - revision.update({ revisedResponses: ['page-one_short-text'] }); + revision.update({ updatedResponseKeys: ['page-one_short-text'] }); // check the first page and correct invalid answer await click('[data-test-link="1-first-page-of-test-schema"]'); assert.ok(currentURL().includes(`/registries/revisions/${revision.id}/1-`), @@ -434,7 +434,7 @@ module('Registries | Acceptance | registries revision', hooks => { 'page-one_short-text': 'Pekatyu', }, registration: this.registration, - revisedResponses: ['page-one_short-text'], + updatedResponseKeys: ['page-one_short-text'], revisionJustification: 'If pikachu were russian', }, ); @@ -463,7 +463,7 @@ module('Registries | Acceptance | registries revision', hooks => { const revision = server.create( 'schema-response', { - reviewsState: RevisionReviewStates.RevisionPendingAdminApproval, + reviewsState: RevisionReviewStates.Unapproved, initiatedBy, revisionResponses: { 'page-one_short-text': 'the lorax', diff --git a/tests/integration/components/registries/revised-responses-list/component-test.ts b/tests/integration/components/registries/revised-responses-list/component-test.ts index a14bff35d43..d4b9ea5cb87 100644 --- a/tests/integration/components/registries/revised-responses-list/component-test.ts +++ b/tests/integration/components/registries/revised-responses-list/component-test.ts @@ -45,7 +45,7 @@ module('Integration | Component | revised-responses-list', hooks => { }); test('multiple revised responses', async function(this: ThisTestContext, assert) { - this.revision.revisedResponses = ['page-one_single-select', 'page-one_short-text']; + this.revision.updatedResponseKeys = ['page-one_single-select', 'page-one_short-text']; await render(hbs``);