Skip to content

Commit

Permalink
test(kesaseteli): add longer timeouts to tests that seem to need them
Browse files Browse the repository at this point in the history
remove jest.retryTimes(5) as they should not be needed anymore with the
increased timeouts, if they still fail then it's good to get the
information about them failing rather than thinking that they're not
failing

refs YJDH-690, YJDH-699
  • Loading branch information
karisal-anders committed May 8, 2024
1 parent d3a346d commit 1508b7c
Show file tree
Hide file tree
Showing 5 changed files with 208 additions and 165 deletions.
243 changes: 131 additions & 112 deletions frontend/kesaseteli/employer/src/__tests__/application.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
import renderComponent from 'kesaseteli-shared/__tests__/utils/components/render-component';
import React from 'react';
import FakeObjectFactory from 'shared/__tests__/utils/FakeObjectFactory';
import SLOW_JEST_TIMEOUT from 'shared/__tests__/utils/slow-jest-timeout';
import { waitFor } from 'shared/__tests__/utils/test-utils';
import { DEFAULT_LANGUAGE, Language } from 'shared/i18n/i18n';

Expand Down Expand Up @@ -94,121 +95,139 @@ describe('frontend/kesaseteli/employer/src/pages/application.tsx', () => {
});

describe('when loading application returns data', () => {
it('shows validation errors and disables continue button when missing values', async () => {
expectAuthorizedReply();
expectToGetApplicationFromBackend(application);
renderPage(ApplicationPage, { query: { id } });
const applicationPage = getApplicationPageApi(application);
const required =
/(tieto puuttuu tai on virheellinen)|(errors.required)/i;
await applicationPage.step1.expectations.stepIsLoaded();
await applicationPage.step1.actions.typeContactPersonName('');
await applicationPage.step1.expectations.inputHasError(
'contact_person_name',
required
);
await applicationPage.step1.actions.typeContactPersonEmail('');
await applicationPage.step1.expectations.inputHasError(
'contact_person_email',
required
);
await applicationPage.step1.actions.typeStreetAddress('');
await applicationPage.step1.expectations.inputHasError(
'street_address',
required
);
await applicationPage.step1.actions.typeContactPersonPhone('');
await applicationPage.step1.expectations.inputHasError(
'contact_person_phone_number',
required
);
});
it(
'shows validation errors and disables continue button when missing values',
async () => {
expectAuthorizedReply();
expectToGetApplicationFromBackend(application);
renderPage(ApplicationPage, { query: { id } });
const applicationPage = getApplicationPageApi(application);
const required =
/(tieto puuttuu tai on virheellinen)|(errors.required)/i;
await applicationPage.step1.expectations.stepIsLoaded();
await applicationPage.step1.actions.typeContactPersonName('');
await applicationPage.step1.expectations.inputHasError(
'contact_person_name',
required
);
await applicationPage.step1.actions.typeContactPersonEmail('');
await applicationPage.step1.expectations.inputHasError(
'contact_person_email',
required
);
await applicationPage.step1.actions.typeStreetAddress('');
await applicationPage.step1.expectations.inputHasError(
'street_address',
required
);
await applicationPage.step1.actions.typeContactPersonPhone('');
await applicationPage.step1.expectations.inputHasError(
'contact_person_phone_number',
required
);
},
SLOW_JEST_TIMEOUT
);

it('shows validation errors when value is too long', async () => {
expectAuthorizedReply();
expectToGetApplicationFromBackend(application);
renderPage(ApplicationPage, { query: { id } });
const applicationPage = getApplicationPageApi(application);
await applicationPage.step1.expectations.stepIsLoaded();
await applicationPage.step1.actions.typeContactPersonName(
'a'.repeat(257)
); // max limit is 256
await applicationPage.step1.expectations.inputHasError(
'contact_person_name',
/(syöttämäsi tieto on liian pitkä)|(errors.maxlength)/i
);
await applicationPage.step1.actions.typeContactPersonEmail(
'john@doe'
);
await applicationPage.step1.expectations.inputHasError(
'contact_person_email',
/(syöttämäsi tieto on virheellistä muotoa)|(errors.pattern)/i
);
await applicationPage.step1.actions.typeStreetAddress(
's'.repeat(257)
); // max limit is 64
await applicationPage.step1.expectations.inputHasError(
'street_address',
/(syöttämäsi tieto on liian pitkä)|(errors.maxlength)/i
);
await applicationPage.step1.actions.typeContactPersonPhone(
'1'.repeat(65)
); // max limit is 64
await applicationPage.step1.expectations.inputHasError(
'contact_person_phone_number',
/(syöttämäsi tieto on liian pitkä)|(errors.maxlength)/i
);
});
it(
'shows validation errors when value is too long',
async () => {
expectAuthorizedReply();
expectToGetApplicationFromBackend(application);
renderPage(ApplicationPage, { query: { id } });
const applicationPage = getApplicationPageApi(application);
await applicationPage.step1.expectations.stepIsLoaded();
await applicationPage.step1.actions.typeContactPersonName(
'a'.repeat(257)
); // max limit is 256
await applicationPage.step1.expectations.inputHasError(
'contact_person_name',
/(syöttämäsi tieto on liian pitkä)|(errors.maxlength)/i
);
await applicationPage.step1.actions.typeContactPersonEmail(
'john@doe'
);
await applicationPage.step1.expectations.inputHasError(
'contact_person_email',
/(syöttämäsi tieto on virheellistä muotoa)|(errors.pattern)/i
);
await applicationPage.step1.actions.typeStreetAddress(
's'.repeat(257)
); // max limit is 64
await applicationPage.step1.expectations.inputHasError(
'street_address',
/(syöttämäsi tieto on liian pitkä)|(errors.maxlength)/i
);
await applicationPage.step1.actions.typeContactPersonPhone(
'1'.repeat(65)
); // max limit is 64
await applicationPage.step1.expectations.inputHasError(
'contact_person_phone_number',
/(syöttämäsi tieto on liian pitkä)|(errors.maxlength)/i
);
},
SLOW_JEST_TIMEOUT
);

it('saves application when next button is clicked', async () => {
expectAuthorizedReply();
expectToGetApplicationFromBackend(application);
renderPage(ApplicationPage, { query: { id } });
const applicationPage = getApplicationPageApi(application);
await applicationPage.step1.expectations.stepIsLoaded();
applicationPage.step1.expectations.displayCompanyData();
applicationPage.step1.expectations.inputValueIsSet(
'contact_person_name'
);
applicationPage.step1.expectations.inputValueIsSet(
'contact_person_email'
);
applicationPage.step1.expectations.inputValueIsSet(
'contact_person_phone_number'
);
const contact_person_name = 'John Doe';
const contact_person_email = '[email protected]';
const contact_person_phone_number = '+358503758288';
const street_address = 'Pohjoisesplanadi 11-13, 00170 Helsinki';
await applicationPage.step1.actions.typeContactPersonName(
contact_person_name
);
await applicationPage.step1.actions.typeContactPersonEmail(
contact_person_email
);
await applicationPage.step1.actions.typeStreetAddress(street_address);
await applicationPage.step1.actions.typeContactPersonPhone(
contact_person_phone_number
);
await applicationPage.step1.actions.clickNextButtonAndExpectToSaveApplication();
await applicationPage.step2.expectations.stepIsLoaded();
});
it(
'saves application when next button is clicked',
async () => {
expectAuthorizedReply();
expectToGetApplicationFromBackend(application);
renderPage(ApplicationPage, { query: { id } });
const applicationPage = getApplicationPageApi(application);
await applicationPage.step1.expectations.stepIsLoaded();
applicationPage.step1.expectations.displayCompanyData();
applicationPage.step1.expectations.inputValueIsSet(
'contact_person_name'
);
applicationPage.step1.expectations.inputValueIsSet(
'contact_person_email'
);
applicationPage.step1.expectations.inputValueIsSet(
'contact_person_phone_number'
);
const contact_person_name = 'John Doe';
const contact_person_email = '[email protected]';
const contact_person_phone_number = '+358503758288';
const street_address = 'Pohjoisesplanadi 11-13, 00170 Helsinki';
await applicationPage.step1.actions.typeContactPersonName(
contact_person_name
);
await applicationPage.step1.actions.typeContactPersonEmail(
contact_person_email
);
await applicationPage.step1.actions.typeStreetAddress(
street_address
);
await applicationPage.step1.actions.typeContactPersonPhone(
contact_person_phone_number
);
await applicationPage.step1.actions.clickNextButtonAndExpectToSaveApplication();
await applicationPage.step2.expectations.stepIsLoaded();
},
SLOW_JEST_TIMEOUT
);

it('can traverse between wizard steps', async () => {
expectAuthorizedReply();
expectToGetApplicationFromBackend(application);
renderPage(ApplicationPage, { query: { id } });
const applicationPage = getApplicationPageApi(application);
await applicationPage.step1.expectations.stepIsLoaded();
await applicationPage.step1.actions.clickNextButton();
await applicationPage.step2.expectations.stepIsLoaded();
await applicationPage.step2.actions.clickNextButton();
await applicationPage.step3.expectations.stepIsLoaded();
await applicationPage.step3.actions.clickPreviousButton();
await applicationPage.step2.expectations.stepIsLoaded();
await applicationPage.step2.actions.clickPreviousButton();
await applicationPage.step1.expectations.stepIsLoaded();
});
it(
'can traverse between wizard steps',
async () => {
expectAuthorizedReply();
expectToGetApplicationFromBackend(application);
renderPage(ApplicationPage, { query: { id } });
const applicationPage = getApplicationPageApi(application);
await applicationPage.step1.expectations.stepIsLoaded();
await applicationPage.step1.actions.clickNextButton();
await applicationPage.step2.expectations.stepIsLoaded();
await applicationPage.step2.actions.clickNextButton();
await applicationPage.step3.expectations.stepIsLoaded();
await applicationPage.step3.actions.clickPreviousButton();
await applicationPage.step2.expectations.stepIsLoaded();
await applicationPage.step2.actions.clickPreviousButton();
await applicationPage.step1.expectations.stepIsLoaded();
},
SLOW_JEST_TIMEOUT
);
});
});
});
Expand Down
105 changes: 60 additions & 45 deletions frontend/kesaseteli/youth/src/__tests__/additional_info.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ import renderComponent from 'kesaseteli-shared/__tests__/utils/components/render
import { fakeAdditionalInfoApplication } from 'kesaseteli-shared/__tests__/utils/fake-objects';
import YouthApplicationStatusType from 'kesaseteli-shared/types/youth-application-status-type';
import React from 'react';
import SLOW_JEST_TIMEOUT from 'shared/__tests__/utils/slow-jest-timeout';
import { waitFor } from 'shared/__tests__/utils/test-utils';
import { DEFAULT_LANGUAGE } from 'shared/i18n/i18n';

jest.retryTimes(5);

describe('frontend/kesaseteli/youth/src/pages/additional_info.tsx', () => {
const APPLICATION_ID = 'abc-123';

Expand Down Expand Up @@ -132,50 +131,66 @@ describe('frontend/kesaseteli/youth/src/pages/additional_info.tsx', () => {
});

describe(`sends filled form data to the backend`, () => {
it(`with default language`, async () => {
expectToGetYouthApplicationStatus(APPLICATION_ID, {
status: 'additional_information_requested',
});
renderPage(AdditionalInfoPage, {
query: { id: APPLICATION_ID },
});
const { additional_info_description, additional_info_user_reasons } =
fakeAdditionalInfoApplication();
const additionalInfoPageApi = getAdditionalInfoPageApi(APPLICATION_ID);
await additionalInfoPageApi.expectations.formIsPresent();
await additionalInfoPageApi.actions.clickAndSelectReasonsFromDropdown(
additional_info_user_reasons
);
await additionalInfoPageApi.actions.inputDescription(
additional_info_description
);
await additionalInfoPageApi.actions.clickSendButton(200);
await additionalInfoPageApi.expectations.notificationIsPresent('sent');
});
it(
`with default language`,
async () => {
expectToGetYouthApplicationStatus(APPLICATION_ID, {
status: 'additional_information_requested',
});
renderPage(AdditionalInfoPage, {
query: { id: APPLICATION_ID },
});
const { additional_info_description, additional_info_user_reasons } =
fakeAdditionalInfoApplication();
const additionalInfoPageApi =
getAdditionalInfoPageApi(APPLICATION_ID);
await additionalInfoPageApi.expectations.formIsPresent();
await additionalInfoPageApi.actions.clickAndSelectReasonsFromDropdown(
additional_info_user_reasons
);
await additionalInfoPageApi.actions.inputDescription(
additional_info_description
);
await additionalInfoPageApi.actions.clickSendButton(200);
await additionalInfoPageApi.expectations.notificationIsPresent(
'sent'
);
},
SLOW_JEST_TIMEOUT
);

it(`with changed language`, async () => {
expectToGetYouthApplicationStatus(APPLICATION_ID, {
status: 'additional_information_requested',
});
renderPage(AdditionalInfoPage, {
query: { id: APPLICATION_ID },
locale: 'sv',
});
const { additional_info_description, additional_info_user_reasons } =
fakeAdditionalInfoApplication();
const additionalInfoPageApi = getAdditionalInfoPageApi(APPLICATION_ID, {
language: 'sv',
});
await additionalInfoPageApi.expectations.formIsPresent();
await additionalInfoPageApi.actions.clickAndSelectReasonsFromDropdown(
additional_info_user_reasons
);
await additionalInfoPageApi.actions.inputDescription(
additional_info_description
);
await additionalInfoPageApi.actions.clickSendButton(200);
await additionalInfoPageApi.expectations.notificationIsPresent('sent');
});
it(
`with changed language`,
async () => {
expectToGetYouthApplicationStatus(APPLICATION_ID, {
status: 'additional_information_requested',
});
renderPage(AdditionalInfoPage, {
query: { id: APPLICATION_ID },
locale: 'sv',
});
const { additional_info_description, additional_info_user_reasons } =
fakeAdditionalInfoApplication();
const additionalInfoPageApi = getAdditionalInfoPageApi(
APPLICATION_ID,
{
language: 'sv',
}
);
await additionalInfoPageApi.expectations.formIsPresent();
await additionalInfoPageApi.actions.clickAndSelectReasonsFromDropdown(
additional_info_user_reasons
);
await additionalInfoPageApi.actions.inputDescription(
additional_info_description
);
await additionalInfoPageApi.actions.clickSendButton(200);
await additionalInfoPageApi.expectations.notificationIsPresent(
'sent'
);
},
SLOW_JEST_TIMEOUT
);
});
});
});
2 changes: 0 additions & 2 deletions frontend/kesaseteli/youth/src/__tests__/index.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ import { waitFor } from 'shared/__tests__/utils/test-utils';
import { DEFAULT_LANGUAGE, Language } from 'shared/i18n/i18n';
import { difference } from 'shared/utils/array.utils';

jest.retryTimes(5);

describe('frontend/kesaseteli/youth/src/pages/index.tsx', () => {
it('should not violate accessibility', async () => {
expectToGetSchoolsFromBackend();
Expand Down
Loading

0 comments on commit 1508b7c

Please sign in to comment.