Skip to content

Commit

Permalink
ui tests complete, now to the backend
Browse files Browse the repository at this point in the history
  • Loading branch information
danieljordan-caci committed May 9, 2024
1 parent d1223e1 commit d4ed370
Show file tree
Hide file tree
Showing 9 changed files with 213 additions and 15 deletions.
16 changes: 16 additions & 0 deletions src/components/LockedMoveBanner/LockedMoveBanner.test.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import React from 'react';
import { render } from '@testing-library/react';

import LockedMoveBanner from './LockedMoveBanner';

describe('LockedMoveBanner', () => {
it('renders children with a lock icon', () => {
const { getByTestId, getByText } = render(<LockedMoveBanner>Some random text</LockedMoveBanner>);

const banner = getByTestId('locked-move-banner');
expect(banner).toBeInTheDocument();

const childText = getByText('Some random text');
expect(childText).toBeInTheDocument();
});
});
2 changes: 1 addition & 1 deletion src/components/Table/SearchResultsTable.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const moveSearchColumns = (moveLockFlag) => [
</div>
);
}
return null; // Return null if any condition is not met
return null;
}),
createHeader('Move code', 'locator', {
id: 'locator',
Expand Down
35 changes: 34 additions & 1 deletion src/components/Table/SearchResultsTable.test.jsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import { render, screen, waitFor } from '@testing-library/react';

import SearchResultsTable from './SearchResultsTable';

import { isBooleanFlagEnabled } from 'utils/featureFlags';

jest.mock('utils/featureFlags', () => ({
...jest.requireActual('utils/featureFlags'),
isBooleanFlagEnabled: jest.fn().mockImplementation(() => Promise.resolve()),
}));

const mockTableData = [
{
branch: 'ARMY',
Expand All @@ -19,6 +26,8 @@ const mockTableData = [
requestedDeliveryDate: '2024-04-10',
originGBLOC: 'KKFA',
destinationGBLOC: 'CNNQ',
lockExpiresAt: '2099-10-15T23:48:35.420Z',
lockedByOfficeUserID: '2744435d-7ba8-4cc5-bae5-f302c72c966e',
},
];

Expand Down Expand Up @@ -80,6 +89,10 @@ function mockErrorQuery() {
}

describe('SearchResultsTable', () => {
afterEach(() => {
jest.restoreAllMocks();
});

it('renders a move search', () => {
render(<SearchResultsTable handleClick={() => {}} title="Results" useQueries={mockQueries} />);
const results = screen.queryByText('Results (1)');
Expand Down Expand Up @@ -117,6 +130,26 @@ describe('SearchResultsTable', () => {
const phone = screen.queryByText('212-123-4567');
expect(phone).toBeInTheDocument();
});
it('renders a lock icon when move lock flag is on', async () => {
isBooleanFlagEnabled.mockResolvedValue(true);

render(<SearchResultsTable handleClick={() => {}} title="Results" useQueries={mockQueries} searchType="move" />);

await waitFor(() => {
const lockIcon = screen.queryByTestId('lock-icon');
expect(lockIcon).toBeInTheDocument();
});
});
it('does NOT render a lock icon when move lock flag is off', async () => {
isBooleanFlagEnabled.mockResolvedValue(false);

render(<SearchResultsTable handleClick={() => {}} title="Results" useQueries={mockQueries} searchType="move" />);

await waitFor(() => {
const lockIcon = screen.queryByTestId('lock-icon');
expect(lockIcon).not.toBeInTheDocument();
});
});
it('renders create move button on customer search', () => {
render(
<SearchResultsTable handleClick={() => {}} title="Results" useQueries={mockQueries} searchType="customer" />,
Expand Down
41 changes: 40 additions & 1 deletion src/pages/Office/MoveQueue/MoveQueue.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ import React from 'react';
import Select from 'react-select';
import { mount } from 'enzyme';
import * as reactRouterDom from 'react-router-dom';
import { render, screen } from '@testing-library/react';
import { render, screen, waitFor } from '@testing-library/react';

import MoveQueue from './MoveQueue';

import { MockProviders } from 'testUtils';
import { MOVE_STATUS_OPTIONS } from 'constants/queues';
import { generalRoutes, tooRoutes } from 'constants/routes';
import { isBooleanFlagEnabled } from 'utils/featureFlags';

jest.mock('react-router-dom', () => ({
...jest.requireActual('react-router-dom'), // this line preserves the non-hook exports
Expand All @@ -17,6 +18,11 @@ jest.mock('react-router-dom', () => ({
}));
jest.setTimeout(60000);

jest.mock('utils/featureFlags', () => ({
...jest.requireActual('utils/featureFlags'),
isBooleanFlagEnabled: jest.fn().mockImplementation(() => Promise.resolve()),
}));

jest.mock('hooks/queries', () => ({
useUserQueries: () => {
return {
Expand Down Expand Up @@ -52,6 +58,8 @@ jest.mock('hooks/queries', () => ({
originGBLOC: 'EEEE',
requestedMoveDate: '2023-02-10',
appearedInTooAt: '2023-02-10T00:00:00.000Z',
lockExpiresAt: '2099-02-10T00:00:00.000Z',
lockedByOfficeUserID: '2744435d-7ba8-4cc5-bae5-f302c72c966e',
},
{
id: 'move2',
Expand All @@ -77,6 +85,7 @@ jest.mock('hooks/queries', () => ({
};
},
}));

const GetMountedComponent = (queueTypeToMount) => {
reactRouterDom.useParams.mockReturnValue({ queueType: queueTypeToMount });
const wrapper = mount(
Expand All @@ -88,6 +97,10 @@ const GetMountedComponent = (queueTypeToMount) => {
};
const SEARCH_OPTIONS = ['Move Code', 'DoD ID', 'Customer Name'];
describe('MoveQueue', () => {
afterEach(() => {
jest.restoreAllMocks();
});

it('should render the h1', () => {
expect(GetMountedComponent(tooRoutes.MOVE_QUEUE).find('h1').text()).toBe('All moves (2)');
});
Expand Down Expand Up @@ -225,4 +238,30 @@ describe('MoveQueue', () => {
await expect(screen.getByText('Error - 404')).toBeInTheDocument();
await expect(screen.getByText("We can't find the page you're looking for")).toBeInTheDocument();
});
it('renders a lock icon when move lock flag is on', async () => {
isBooleanFlagEnabled.mockResolvedValue(true);
reactRouterDom.useParams.mockReturnValue({ queueType: tooRoutes.MOVE_QUEUE });
render(
<reactRouterDom.BrowserRouter>
<MoveQueue />
</reactRouterDom.BrowserRouter>,
);
await waitFor(() => {
const lockIcon = screen.queryByTestId('lock-icon');
expect(lockIcon).toBeInTheDocument();
});
});
it('does NOT render a lock icon when move lock flag is off', async () => {
isBooleanFlagEnabled.mockResolvedValue(false);
reactRouterDom.useParams.mockReturnValue({ queueType: tooRoutes.MOVE_QUEUE });
render(
<reactRouterDom.BrowserRouter>
<MoveQueue />
</reactRouterDom.BrowserRouter>,
);
await await waitFor(() => {
const lockIcon = screen.queryByTestId('lock-icon');
expect(lockIcon).not.toBeInTheDocument();
});
});
});
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from 'react';
import { mount } from 'enzyme';
import { QueryClient } from '@tanstack/react-query';
import { render, screen } from '@testing-library/react';
import { render, screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import * as reactRouterDom from 'react-router-dom';

Expand All @@ -10,12 +10,17 @@ import PaymentRequestQueue from './PaymentRequestQueue';
import { MockProviders } from 'testUtils';
import { PAYMENT_REQUEST_STATUS_OPTIONS } from 'constants/queues';
import { generalRoutes, tioRoutes } from 'constants/routes';
import { isBooleanFlagEnabled } from 'utils/featureFlags';

jest.mock('react-router-dom', () => ({
...jest.requireActual('react-router-dom'), // this line preserves the non-hook exports
useParams: jest.fn(),
useNavigate: jest.fn(),
}));
jest.mock('utils/featureFlags', () => ({
...jest.requireActual('utils/featureFlags'),
isBooleanFlagEnabled: jest.fn().mockImplementation(() => Promise.resolve()),
}));
jest.setTimeout(60000);
jest.mock('hooks/queries', () => ({
useUserQueries: () => {
Expand Down Expand Up @@ -54,6 +59,8 @@ jest.mock('hooks/queries', () => ({
originDutyLocation: {
name: 'Scott AFB',
},
lockExpiresAt: '2099-10-15T23:48:35.420Z',
lockedByOfficeUserID: '2744435d-7ba8-4cc5-bae5-f302c72c966e',
},
],
totalCount: 1,
Expand Down Expand Up @@ -320,4 +327,32 @@ describe('PaymentRequestQueue', () => {
await expect(screen.getByText('Error - 404')).toBeInTheDocument();
await expect(screen.getByText("We can't find the page you're looking for")).toBeInTheDocument();
});
it('renders a lock icon when move lock flag is on', async () => {
reactRouterDom.useParams.mockReturnValue({ queueType: tioRoutes.PAYMENT_REQUEST_QUEUE });
isBooleanFlagEnabled.mockResolvedValue(true);

render(
<reactRouterDom.BrowserRouter>
<PaymentRequestQueue />
</reactRouterDom.BrowserRouter>,
);
await waitFor(() => {
const lockIcon = screen.queryByTestId('lock-icon');
expect(lockIcon).toBeInTheDocument();
});
});
it('does NOT render a lock icon when move lock flag is off', async () => {
reactRouterDom.useParams.mockReturnValue({ queueType: tioRoutes.PAYMENT_REQUEST_QUEUE });
isBooleanFlagEnabled.mockResolvedValue(false);

render(
<reactRouterDom.BrowserRouter>
<PaymentRequestQueue />
</reactRouterDom.BrowserRouter>,
);
await waitFor(() => {
const lockIcon = screen.queryByTestId('lock-icon');
expect(lockIcon).not.toBeInTheDocument();
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ const ServicesCounselingMoveInfo = () => {
// if the current user is the one who has it locked, it will not display
const renderLockedBanner = () => {
const officeUser = data?.office_user;
if (move.lockedByOfficeUserID && moveLockFlag) {
if (move?.lockedByOfficeUserID && moveLockFlag) {
if (move?.lockedByOfficeUserID !== officeUser?.id) {
return (
<LockedMoveBanner data-testid="locked-move-banner">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ import ServicesCounselingMoveInfo from './ServicesCounselingMoveInfo';
import { mockPage, ReactQueryWrapper } from 'testUtils';
import { roleTypes } from 'constants/userRoles';
import { configureStore } from 'shared/store';
import { isBooleanFlagEnabled } from 'utils/featureFlags';

jest.mock('utils/featureFlags', () => ({
...jest.requireActual('utils/featureFlags'),
isBooleanFlagEnabled: jest.fn().mockImplementation(() => Promise.resolve()),
}));

const testMoveCode = '1A5PM3';
const loggedInTIOState = {
Expand All @@ -31,6 +37,9 @@ jest.mock('hooks/queries', () => ({
useTXOMoveInfoQueries: () => {
return {
customerData: { id: '2468', last_name: 'Kerry', first_name: 'Smith', dodID: '999999999' },
move: {
lockedByOfficeUserID: '2744435d-7ba8-4cc5-bae5-f302c72c966e',
},
order: {
id: '4321',
customerID: '2468',
Expand Down Expand Up @@ -160,4 +169,24 @@ describe('Services Counseling Move Info Container', () => {
},
);
});
it('renders a lock icon when move lock flag is on', async () => {
isBooleanFlagEnabled.mockResolvedValue(true);

renderSCMoveInfo();

await waitFor(() => {
const lockIcon = screen.queryByTestId('locked-move-banner');
expect(lockIcon).toBeInTheDocument();
});
});
it('does NOT render a lock icon when move lock flag is off', async () => {
isBooleanFlagEnabled.mockResolvedValue(false);

renderSCMoveInfo();

await waitFor(() => {
const lockIcon = screen.queryByTestId('locked-move-banner');
expect(lockIcon).not.toBeInTheDocument();
});
});
});
2 changes: 1 addition & 1 deletion src/pages/Office/TXOMoveInfo/TXOMoveInfo.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ const TXOMoveInfo = () => {
// if the current user is the one who has it locked, it will not display
const renderLockedBanner = () => {
const officeUser = data?.office_user;
if (move.lockedByOfficeUserID && moveLockFlag) {
if (move?.lockedByOfficeUserID && moveLockFlag) {
if (move?.lockedByOfficeUserID !== officeUser?.id) {
return (
<LockedMoveBanner data-testid="locked-move-banner">
Expand Down
Loading

0 comments on commit d4ed370

Please sign in to comment.