From 32d9edc2b32b1a7b68a0d475cd601bb2b4a251ad Mon Sep 17 00:00:00 2001 From: Cedric Ong Date: Fri, 16 Feb 2024 01:08:02 +0800 Subject: [PATCH 1/3] create tests for constsum-recipient-question-constraint --- ...ents-question-constraint.component.spec.ts | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/src/web/app/components/question-types/question-constraint/constsum-recipients-question-constraint.component.spec.ts b/src/web/app/components/question-types/question-constraint/constsum-recipients-question-constraint.component.spec.ts index e6ba4025163..89a11886dce 100644 --- a/src/web/app/components/question-types/question-constraint/constsum-recipients-question-constraint.component.spec.ts +++ b/src/web/app/components/question-types/question-constraint/constsum-recipients-question-constraint.component.spec.ts @@ -1,11 +1,22 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ConstsumRecipientsQuestionConstraintComponent } from './constsum-recipients-question-constraint.component'; +import { FeedbackConstantSumResponseDetails } from '../../../../types/api-output' +import { FeedbackQuestionType } from '../../../../types/api-request'; +import { FeedbackResponseRecipientSubmissionFormModel } from '../../question-submission-form/question-submission-form-model'; +import { createBuilder } from '../../../../test-helpers/generic-builder'; describe('ConstsumRecipientsQuestionConstraintComponent', () => { let component: ConstsumRecipientsQuestionConstraintComponent; let fixture: ComponentFixture; + const formBuilder = createBuilder({ + responseId: '123', + recipientIdentifier: 'recipient123', + isValid: true, + responseDetails: { questionType: FeedbackQuestionType.CONSTSUM } + }); + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ConstsumRecipientsQuestionConstraintComponent], @@ -22,4 +33,97 @@ describe('ConstsumRecipientsQuestionConstraintComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + it('allAnswers: should return an empty array if no forms provided', () => { + component.recipientSubmissionForms = []; + expect(component.allAnswers).toEqual([]); + }); + + it('allAnswers: should return 0 if the answers array is empty', () => { + const details: FeedbackConstantSumResponseDetails = { + questionType: FeedbackQuestionType.CONSTSUM, + answers: [], + }; + const form = formBuilder.responseDetails(details).build(); + + component.recipientSubmissionForms = [form]; + expect(component.allAnswers).toEqual([0]); + }); + + it('allAnswers: should return the first answer if it exists', () => { + const details: FeedbackConstantSumResponseDetails = { + questionType: FeedbackQuestionType.CONSTSUM, + answers: [5, 10, 15], + }; + const form = formBuilder.responseDetails(details).build(); + + component.recipientSubmissionForms = [form]; + expect(component.allAnswers).toEqual([5]); + }); + + it('allAnswers: should return the first answers of multiple forms', () => { + const detailsOne: FeedbackConstantSumResponseDetails = { + questionType: FeedbackQuestionType.CONSTSUM, + answers: [5, 10, 15], + }; + const formOne = formBuilder.responseDetails(detailsOne).build(); + + const detailsTwo: FeedbackConstantSumResponseDetails = { + questionType: FeedbackQuestionType.CONSTSUM, + answers: [3, 6, 9], + }; + const formTwo = formBuilder.responseDetails(detailsTwo).build(); + + component.recipientSubmissionForms = [formOne, formTwo]; + expect(component.allAnswers).toEqual([5, 3]); + }); + + it('isAllPointsUneven: should return true when all points are unique', () => { + const mockAllAnswers = jest.fn().mockReturnValue([1, 2, 3]); + Object.defineProperty(component, 'allAnswers', { get: mockAllAnswers }); + + expect(component.isAllPointsUneven).toEqual(true); + }); + + it('isAllPointsUneven: should return false when some points are repeated', () => { + const mockAllAnswers = jest.fn().mockReturnValue([1, 2, 2, 3]); + Object.defineProperty(component, 'allAnswers', { get: mockAllAnswers }); + + expect(component.isAllPointsUneven).toEqual(false); + }); + + it('isAllPointsUneven: should return true when there are no points', () => { + const mockAllAnswers = jest.fn().mockReturnValue([]); + Object.defineProperty(component, 'allAnswers', { get: mockAllAnswers }); + + expect(component.isAllPointsUneven).toEqual(true); + }); + + it('isSomePointsUneven: should return true when length is 1', () => { + const mockAllAnswers = jest.fn().mockReturnValue([1]); + Object.defineProperty(component, 'allAnswers', { get: mockAllAnswers }); + + expect(component.isSomePointsUneven).toEqual(true); + }); + + it('isSomePointsUneven: should return true when there are multiple points and some are different', () => { + const mockAllAnswers = jest.fn().mockReturnValue([1, 2, 3]); + Object.defineProperty(component, 'allAnswers', { get: mockAllAnswers }); + + expect(component.isSomePointsUneven).toEqual(true); + }); + + it('isSomePointsUneven: should return false when all answers are the same and length is greater than 1', () => { + const mockAllAnswers = jest.fn().mockReturnValue([2, 2, 2]); + Object.defineProperty(component, 'allAnswers', { get: mockAllAnswers }); + + expect(component.isSomePointsUneven).toEqual(false); + }); + + it('isSomePointsUneven: should return true when there are no points', () => { + const mockAllAnswers = jest.fn().mockReturnValue([]); + Object.defineProperty(component, 'allAnswers', { get: mockAllAnswers }); + + expect(component.isSomePointsUneven).toEqual(true); + }); }); From bf2fa010720e655910852908e41c6b7a4024cb79 Mon Sep 17 00:00:00 2001 From: Cedric Ong Date: Fri, 16 Feb 2024 02:04:32 +0800 Subject: [PATCH 2/3] add unit tests for ContributionQuestionConstraintComponent --- ...tion-question-constraint.component.spec.ts | 277 ++++++++++++++++++ 1 file changed, 277 insertions(+) diff --git a/src/web/app/components/question-types/question-constraint/contribution-question-constraint.component.spec.ts b/src/web/app/components/question-types/question-constraint/contribution-question-constraint.component.spec.ts index 2fecdb96bc6..d812ea62cc3 100644 --- a/src/web/app/components/question-types/question-constraint/contribution-question-constraint.component.spec.ts +++ b/src/web/app/components/question-types/question-constraint/contribution-question-constraint.component.spec.ts @@ -1,11 +1,28 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ContributionQuestionConstraintComponent } from './contribution-question-constraint.component'; +import { FeedbackQuestionType } from '../../../../types/api-request'; +import { FeedbackContributionResponseDetails } from '../../../../types/api-output'; +import { CONTRIBUTION_POINT_NOT_SUBMITTED } from '../../../../types/feedback-response-details'; +import { FeedbackResponseRecipientSubmissionFormModel } from '../../question-submission-form/question-submission-form-model'; +import { createBuilder } from '../../../../test-helpers/generic-builder'; describe('ContributionQuestionConstraintComponent', () => { let component: ContributionQuestionConstraintComponent; let fixture: ComponentFixture; + const formBuilder = createBuilder({ + responseId: '123', + recipientIdentifier: 'recipient123', + isValid: true, + responseDetails: { questionType: FeedbackQuestionType.CONTRIB } + }); + + const detailsBuilder = createBuilder({ + answer: 1, + questionType: FeedbackQuestionType.CONTRIB + }) + beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ContributionQuestionConstraintComponent], @@ -22,4 +39,264 @@ describe('ContributionQuestionConstraintComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + it('isAllFormsAnswered: should return true when all forms are answered', () => { + const answerOne = detailsBuilder.answer(10).build(); + const answerTwo = detailsBuilder.answer(5).build(); + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build() + ]; + component.recipientSubmissionForms = recipientSubmissionForms; + + expect(component.isAllFormsAnswered).toBe(true); + }); + + it('isAllFormsAnswered: should return false when any form is not answered', () => { + const answerOne = detailsBuilder.answer(10).build(); + const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build() + ]; + component.recipientSubmissionForms = recipientSubmissionForms; + + expect(component.isAllFormsAnswered).toBe(false); + }); + + it('isAllFormsNotAnswered: should return true when all forms are not answered', () => { + const answerOne = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); + const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isAllFormsNotAnswered).toBe(true); + }); + + it('isAllFormsNotAnswered: should return false when any form is answered', () => { + const answerOne = detailsBuilder.answer(10).build(); + const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build() + ]; + component.recipientSubmissionForms = recipientSubmissionForms; + + expect(component.isAllFormsNotAnswered).toBe(false); + }); + + it('totalRequiredContributions: should return the correct total required contributions based on the number of forms', () => { + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.build(), + formBuilder.build(), + formBuilder.build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.totalRequiredContributions).toBe(300); + }); + + it('allAnswers: should return an array of all answers with CONTRIBUTION_POINT_NOT_SUBMITTED replaced by 0', () => { + const answerOne = detailsBuilder.answer(10).build(); + const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); + const answerThree = detailsBuilder.answer(20).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + + const expectedAnswers = [10, 0, 20]; + expect(component.allAnswers).toEqual(expectedAnswers); + }); + + it('totalAnsweredContributions: should return the correct total of all answered contributions', () => { + const answerOne = detailsBuilder.answer(10).build(); + const answerTwo = detailsBuilder.answer(20).build(); + const answerThree = detailsBuilder.answer(30).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + + const expectedTotal = 10 + 20 + 30; + expect(component.totalAnsweredContributions).toEqual(expectedTotal); + }); + + it('isAllContributionsDistributed: should return true when total answered contributions equal total required contributions', () => { + const answerOne = detailsBuilder.answer(110).build(); + const answerTwo = detailsBuilder.answer(90).build(); + const answerThree = detailsBuilder.answer(100).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isAllContributionsDistributed).toBe(true); + }); + + it('isAllContributionsDistributed: should return false when total answered contributions do not equal total required contributions', () => { + const answerOne = detailsBuilder.answer(30).build(); + const answerTwo = detailsBuilder.answer(50).build(); + const answerThree = detailsBuilder.answer(20).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isAllContributionsDistributed).toBe(false); + }); + + it('isInsufficientContributionsDistributed: should return true when total answered contributions are less than total required contributions', () => { + const answerOne = detailsBuilder.answer(30).build(); + const answerTwo = detailsBuilder.answer(50).build(); + const answerThree = detailsBuilder.answer(20).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isInsufficientContributionsDistributed).toBe(true); + }); + + it('isInsufficientContributionsDistributed: should return false when total answered contributions are equal to total required contributions', () => { + const answerOne = detailsBuilder.answer(110).build(); + const answerTwo = detailsBuilder.answer(90).build(); + const answerThree = detailsBuilder.answer(100).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isInsufficientContributionsDistributed).toBe(false); + }); + + it('isContributionsOverAllocated: should return true when total answered contributions are greater than total required contributions', () => { + const answerOne = detailsBuilder.answer(110).build(); + const answerTwo = detailsBuilder.answer(90).build(); + const answerThree = detailsBuilder.answer(110).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isContributionsOverAllocated).toBe(true); + }); + + it('isContributionsOverAllocated: should return false when total answered contributions are less than total required contributions', () => { + const answerOne = detailsBuilder.answer(30).build(); + const answerTwo = detailsBuilder.answer(50).build(); + const answerThree = detailsBuilder.answer(20).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isContributionsOverAllocated).toBe(false); + }); + + it('currentTotalString: should return "0%" when total answered contributions are 0', () => { + const answerOne = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); + const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.currentTotalString).toBe('0%'); + }); + + it('currentTotalString: should return correct string when totalAnsweredContributions/100 is less than 1', () => { + const answerOne = detailsBuilder.answer(30).build(); + const answerTwo = detailsBuilder.answer(20).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.currentTotalString).toBe(`1 x Equal Share - 50%`); + }); + + it('currentTotalString: should return correct string when total answered contributions are equal to a multiple of 100', () => { + const answerOne = detailsBuilder.answer(100).build(); + const answerTwo = detailsBuilder.answer(100).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.currentTotalString).toBe(`2 x Equal Share`); + }); + + it('currentTotalString: should return correct string when total answered contributions are greater than required', () => { + const answerOne = detailsBuilder.answer(150).build(); + const answerTwo = detailsBuilder.answer(150).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.currentTotalString).toBe(`2 x Equal Share + 100%`); + }); + + it('currentTotalString: should return correct string when total answered contributions are less than required', () => { + const answerOne = detailsBuilder.answer(100).build(); + const answerTwo = detailsBuilder.answer(50).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.currentTotalString).toBe(`1 x Equal Share + \n 50%`); + }); + + it('expectedTotalString: should return the correct string format for total required contributions', () => { + const answerOne = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); + const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build() + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.expectedTotalString).toBe('2 x Equal Share'); + }); + }); From 2cc0b058797ecd584df9554b5231b65cf9979dc1 Mon Sep 17 00:00:00 2001 From: Cedric Ong Date: Fri, 16 Feb 2024 02:37:39 +0800 Subject: [PATCH 3/3] fix lint issues --- ...ents-question-constraint.component.spec.ts | 11 +- ...tion-question-constraint.component.spec.ts | 320 +++++++++--------- 2 files changed, 172 insertions(+), 159 deletions(-) diff --git a/src/web/app/components/question-types/question-constraint/constsum-recipients-question-constraint.component.spec.ts b/src/web/app/components/question-types/question-constraint/constsum-recipients-question-constraint.component.spec.ts index 89a11886dce..cd51a0b5caa 100644 --- a/src/web/app/components/question-types/question-constraint/constsum-recipients-question-constraint.component.spec.ts +++ b/src/web/app/components/question-types/question-constraint/constsum-recipients-question-constraint.component.spec.ts @@ -1,10 +1,11 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ConstsumRecipientsQuestionConstraintComponent } from './constsum-recipients-question-constraint.component'; -import { FeedbackConstantSumResponseDetails } from '../../../../types/api-output' -import { FeedbackQuestionType } from '../../../../types/api-request'; -import { FeedbackResponseRecipientSubmissionFormModel } from '../../question-submission-form/question-submission-form-model'; import { createBuilder } from '../../../../test-helpers/generic-builder'; +import { FeedbackConstantSumResponseDetails } from '../../../../types/api-output'; +import { FeedbackQuestionType } from '../../../../types/api-request'; +import { FeedbackResponseRecipientSubmissionFormModel } + from '../../question-submission-form/question-submission-form-model'; describe('ConstsumRecipientsQuestionConstraintComponent', () => { let component: ConstsumRecipientsQuestionConstraintComponent; @@ -14,14 +15,14 @@ describe('ConstsumRecipientsQuestionConstraintComponent', () => { responseId: '123', recipientIdentifier: 'recipient123', isValid: true, - responseDetails: { questionType: FeedbackQuestionType.CONSTSUM } + responseDetails: { questionType: FeedbackQuestionType.CONSTSUM }, }); beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ConstsumRecipientsQuestionConstraintComponent], }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { diff --git a/src/web/app/components/question-types/question-constraint/contribution-question-constraint.component.spec.ts b/src/web/app/components/question-types/question-constraint/contribution-question-constraint.component.spec.ts index d812ea62cc3..64203fa216f 100644 --- a/src/web/app/components/question-types/question-constraint/contribution-question-constraint.component.spec.ts +++ b/src/web/app/components/question-types/question-constraint/contribution-question-constraint.component.spec.ts @@ -1,11 +1,12 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; import { ContributionQuestionConstraintComponent } from './contribution-question-constraint.component'; -import { FeedbackQuestionType } from '../../../../types/api-request'; +import { createBuilder } from '../../../../test-helpers/generic-builder'; import { FeedbackContributionResponseDetails } from '../../../../types/api-output'; +import { FeedbackQuestionType } from '../../../../types/api-request'; import { CONTRIBUTION_POINT_NOT_SUBMITTED } from '../../../../types/feedback-response-details'; -import { FeedbackResponseRecipientSubmissionFormModel } from '../../question-submission-form/question-submission-form-model'; -import { createBuilder } from '../../../../test-helpers/generic-builder'; +import { FeedbackResponseRecipientSubmissionFormModel } + from '../../question-submission-form/question-submission-form-model'; describe('ContributionQuestionConstraintComponent', () => { let component: ContributionQuestionConstraintComponent; @@ -15,19 +16,19 @@ describe('ContributionQuestionConstraintComponent', () => { responseId: '123', recipientIdentifier: 'recipient123', isValid: true, - responseDetails: { questionType: FeedbackQuestionType.CONTRIB } + responseDetails: { questionType: FeedbackQuestionType.CONTRIB }, }); const detailsBuilder = createBuilder({ answer: 1, - questionType: FeedbackQuestionType.CONTRIB - }) + questionType: FeedbackQuestionType.CONTRIB, + }); beforeEach(waitForAsync(() => { TestBed.configureTestingModule({ declarations: [ContributionQuestionConstraintComponent], }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { @@ -45,7 +46,7 @@ describe('ContributionQuestionConstraintComponent', () => { const answerTwo = detailsBuilder.answer(5).build(); const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build() + formBuilder.responseDetails(answerTwo).build(), ]; component.recipientSubmissionForms = recipientSubmissionForms; @@ -57,7 +58,7 @@ describe('ContributionQuestionConstraintComponent', () => { const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build() + formBuilder.responseDetails(answerTwo).build(), ]; component.recipientSubmissionForms = recipientSubmissionForms; @@ -69,7 +70,7 @@ describe('ContributionQuestionConstraintComponent', () => { const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build() + formBuilder.responseDetails(answerTwo).build(), ]; component.recipientSubmissionForms = recipientSubmissionForms; @@ -81,23 +82,25 @@ describe('ContributionQuestionConstraintComponent', () => { const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build() + formBuilder.responseDetails(answerTwo).build(), ]; component.recipientSubmissionForms = recipientSubmissionForms; expect(component.isAllFormsNotAnswered).toBe(false); }); - it('totalRequiredContributions: should return the correct total required contributions based on the number of forms', () => { - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ - formBuilder.build(), - formBuilder.build(), - formBuilder.build() - ]; - - component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.totalRequiredContributions).toBe(300); - }); + it('totalRequiredContributions: should return the correct total required contributions ' + + 'based on the number of forms', () => { + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.build(), + formBuilder.build(), + formBuilder.build(), + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + + expect(component.totalRequiredContributions).toBe(300); + }); it('allAnswers: should return an array of all answers with CONTRIBUTION_POINT_NOT_SUBMITTED replaced by 0', () => { const answerOne = detailsBuilder.answer(10).build(); @@ -107,11 +110,11 @@ describe('ContributionQuestionConstraintComponent', () => { const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ formBuilder.responseDetails(answerOne).build(), formBuilder.responseDetails(answerTwo).build(), - formBuilder.responseDetails(answerThree).build() + formBuilder.responseDetails(answerThree).build(), ]; - + component.recipientSubmissionForms = recipientSubmissionForms; - + const expectedAnswers = [10, 0, 20]; expect(component.allAnswers).toEqual(expectedAnswers); }); @@ -124,7 +127,7 @@ describe('ContributionQuestionConstraintComponent', () => { const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ formBuilder.responseDetails(answerOne).build(), formBuilder.responseDetails(answerTwo).build(), - formBuilder.responseDetails(answerThree).build() + formBuilder.responseDetails(answerThree).build(), ]; component.recipientSubmissionForms = recipientSubmissionForms; @@ -133,166 +136,175 @@ describe('ContributionQuestionConstraintComponent', () => { expect(component.totalAnsweredContributions).toEqual(expectedTotal); }); - it('isAllContributionsDistributed: should return true when total answered contributions equal total required contributions', () => { - const answerOne = detailsBuilder.answer(110).build(); - const answerTwo = detailsBuilder.answer(90).build(); - const answerThree = detailsBuilder.answer(100).build(); - - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ - formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build(), - formBuilder.responseDetails(answerThree).build() - ]; + it('isAllContributionsDistributed: should return true when total answered contributions' + + 'equal total required contributions', () => { + const answerOne = detailsBuilder.answer(110).build(); + const answerTwo = detailsBuilder.answer(90).build(); + const answerThree = detailsBuilder.answer(100).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build(), + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isAllContributionsDistributed).toBe(true); + }); + + it('isAllContributionsDistributed: should return false when total answered contributions' + + 'do not equal total required contributions', () => { + const answerOne = detailsBuilder.answer(30).build(); + const answerTwo = detailsBuilder.answer(50).build(); + const answerThree = detailsBuilder.answer(20).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build(), + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isAllContributionsDistributed).toBe(false); + }); + + it('isInsufficientContributionsDistributed: should return true when total answered contributions' + + 'are less than total required contributions', () => { + const answerOne = detailsBuilder.answer(30).build(); + const answerTwo = detailsBuilder.answer(50).build(); + const answerThree = detailsBuilder.answer(20).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build(), + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isInsufficientContributionsDistributed).toBe(true); + }); + + it('isInsufficientContributionsDistributed: should return false when total answered contributions' + + 'are equal to total required contributions', () => { + const answerOne = detailsBuilder.answer(110).build(); + const answerTwo = detailsBuilder.answer(90).build(); + const answerThree = detailsBuilder.answer(100).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build(), + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isInsufficientContributionsDistributed).toBe(false); + }); + + it('isContributionsOverAllocated: should return true when total answered contributions' + + 'are greater than total required contributions', () => { + const answerOne = detailsBuilder.answer(110).build(); + const answerTwo = detailsBuilder.answer(90).build(); + const answerThree = detailsBuilder.answer(110).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build(), + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isContributionsOverAllocated).toBe(true); + }); + + it('isContributionsOverAllocated: should return false when total answered contributions' + + 'are less than total required contributions', () => { + const answerOne = detailsBuilder.answer(30).build(); + const answerTwo = detailsBuilder.answer(50).build(); + const answerThree = detailsBuilder.answer(20).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + formBuilder.responseDetails(answerThree).build(), + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.isContributionsOverAllocated).toBe(false); + }); - component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.isAllContributionsDistributed).toBe(true); - }); - - it('isAllContributionsDistributed: should return false when total answered contributions do not equal total required contributions', () => { - const answerOne = detailsBuilder.answer(30).build(); - const answerTwo = detailsBuilder.answer(50).build(); - const answerThree = detailsBuilder.answer(20).build(); - + it('currentTotalString: should return "0%" when total answered contributions are 0', () => { + const answerOne = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); + const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ formBuilder.responseDetails(answerOne).build(), formBuilder.responseDetails(answerTwo).build(), - formBuilder.responseDetails(answerThree).build() ]; component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.isAllContributionsDistributed).toBe(false); + expect(component.currentTotalString).toBe('0%'); }); - it('isInsufficientContributionsDistributed: should return true when total answered contributions are less than total required contributions', () => { + it('currentTotalString: should return correct string when totalAnsweredContributions/100 is less than 1', () => { const answerOne = detailsBuilder.answer(30).build(); - const answerTwo = detailsBuilder.answer(50).build(); - const answerThree = detailsBuilder.answer(20).build(); - - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ - formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build(), - formBuilder.responseDetails(answerThree).build() - ]; - - component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.isInsufficientContributionsDistributed).toBe(true); - }); - - it('isInsufficientContributionsDistributed: should return false when total answered contributions are equal to total required contributions', () => { - const answerOne = detailsBuilder.answer(110).build(); - const answerTwo = detailsBuilder.answer(90).build(); - const answerThree = detailsBuilder.answer(100).build(); - - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ - formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build(), - formBuilder.responseDetails(answerThree).build() - ]; - - component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.isInsufficientContributionsDistributed).toBe(false); - }); - - it('isContributionsOverAllocated: should return true when total answered contributions are greater than total required contributions', () => { - const answerOne = detailsBuilder.answer(110).build(); - const answerTwo = detailsBuilder.answer(90).build(); - const answerThree = detailsBuilder.answer(110).build(); - - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ - formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build(), - formBuilder.responseDetails(answerThree).build() - ]; - - component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.isContributionsOverAllocated).toBe(true); - }); + const answerTwo = detailsBuilder.answer(20).build(); - it('isContributionsOverAllocated: should return false when total answered contributions are less than total required contributions', () => { - const answerOne = detailsBuilder.answer(30).build(); - const answerTwo = detailsBuilder.answer(50).build(); - const answerThree = detailsBuilder.answer(20).build(); - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ formBuilder.responseDetails(answerOne).build(), formBuilder.responseDetails(answerTwo).build(), - formBuilder.responseDetails(answerThree).build() ]; component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.isContributionsOverAllocated).toBe(false); + expect(component.currentTotalString).toBe('1 x Equal Share - 50%'); }); - it('currentTotalString: should return "0%" when total answered contributions are 0', () => { - const answerOne = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); - const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ - formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build() - ]; + it('currentTotalString: should return correct string when total answered contributions' + + 'are equal to a multiple of 100', () => { + const answerOne = detailsBuilder.answer(100).build(); + const answerTwo = detailsBuilder.answer(100).build(); - component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.currentTotalString).toBe('0%'); - }); - - it('currentTotalString: should return correct string when totalAnsweredContributions/100 is less than 1', () => { - const answerOne = detailsBuilder.answer(30).build(); - const answerTwo = detailsBuilder.answer(20).build(); - - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ - formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build() - ]; + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + ]; - component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.currentTotalString).toBe(`1 x Equal Share - 50%`); - }); + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.currentTotalString).toBe('2 x Equal Share'); + }); - it('currentTotalString: should return correct string when total answered contributions are equal to a multiple of 100', () => { - const answerOne = detailsBuilder.answer(100).build(); - const answerTwo = detailsBuilder.answer(100).build(); - - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ - formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build() - ]; + it('currentTotalString: should return correct string when total answered contributions' + + 'are greater than required', () => { + const answerOne = detailsBuilder.answer(150).build(); + const answerTwo = detailsBuilder.answer(150).build(); - component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.currentTotalString).toBe(`2 x Equal Share`); - }); - - it('currentTotalString: should return correct string when total answered contributions are greater than required', () => { - const answerOne = detailsBuilder.answer(150).build(); - const answerTwo = detailsBuilder.answer(150).build(); - - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ - formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build() - ]; + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + ]; - component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.currentTotalString).toBe(`2 x Equal Share + 100%`); - }); - - it('currentTotalString: should return correct string when total answered contributions are less than required', () => { - const answerOne = detailsBuilder.answer(100).build(); - const answerTwo = detailsBuilder.answer(50).build(); - - const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ - formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build() - ]; + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.currentTotalString).toBe('2 x Equal Share + 100%'); + }); - component.recipientSubmissionForms = recipientSubmissionForms; - expect(component.currentTotalString).toBe(`1 x Equal Share + \n 50%`); - }); + it('currentTotalString: should return correct string when total answered contributions' + + 'are less than required', () => { + const answerOne = detailsBuilder.answer(100).build(); + const answerTwo = detailsBuilder.answer(50).build(); + + const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ + formBuilder.responseDetails(answerOne).build(), + formBuilder.responseDetails(answerTwo).build(), + ]; + + component.recipientSubmissionForms = recipientSubmissionForms; + expect(component.currentTotalString).toBe('1 x Equal Share + \n 50%'); + }); it('expectedTotalString: should return the correct string format for total required contributions', () => { const answerOne = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); const answerTwo = detailsBuilder.answer(CONTRIBUTION_POINT_NOT_SUBMITTED).build(); const recipientSubmissionForms: FeedbackResponseRecipientSubmissionFormModel[] = [ formBuilder.responseDetails(answerOne).build(), - formBuilder.responseDetails(answerTwo).build() + formBuilder.responseDetails(answerTwo).build(), ]; component.recipientSubmissionForms = recipientSubmissionForms;