Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions packages/cpt-ui/__tests__/AccessProvider.test.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import React from "react"
import { render, screen, waitFor } from "@testing-library/react"
import {render, screen, waitFor} from "@testing-library/react"
import "@testing-library/jest-dom"

import { TrackerUserInfo } from "@/types/TrackerUserInfoTypes"
import {TrackerUserInfo} from "@/types/TrackerUserInfoTypes"

import { AccessProvider, useAccess } from "@/context/AccessProvider"
import { AuthContext } from "@/context/AuthProvider"
import {AccessProvider, useAccess} from "@/context/AccessProvider"
import {AuthContext} from "@/context/AuthProvider"

import axios from "@/helpers/axios"
jest.mock('@/helpers/axios')
Expand All @@ -14,7 +14,7 @@ jest.mock('@/helpers/axios')
const mockedAxios = axios as jest.Mocked<typeof axios>

function TestConsumer() {
const { noAccess, singleAccess, selectedRole, clear } = useAccess()
const {noAccess, singleAccess, selectedRole, clear} = useAccess()

return (
<div>
Expand All @@ -40,7 +40,7 @@ describe("AccessProvider", () => {
}

const renderWithContext = (authOverrides = {}) => {
const authValue = { ...defaultAuthContext, ...authOverrides }
const authValue = {...defaultAuthContext, ...authOverrides}
return render(
<AuthContext.Provider value={authValue}>
<AccessProvider>
Expand All @@ -58,7 +58,7 @@ describe("AccessProvider", () => {
})

it("does not fetch roles when user is not signed in", () => {
renderWithContext({ isSignedIn: false, idToken: null })
renderWithContext({isSignedIn: false, idToken: null})

// Expect that axios.get is never called.
expect(mockedAxios.get).not.toHaveBeenCalled()
Expand Down Expand Up @@ -94,10 +94,10 @@ describe("AccessProvider", () => {
// When axios.get is called, return a resolved promise with the expected response.
mockedAxios.get.mockResolvedValueOnce({
status: 200,
data: { userInfo: mockUserInfo },
data: {userInfo: mockUserInfo},
})

renderWithContext({ isSignedIn: true, idToken: { toString: jest.fn().mockReturnValue("mock-id-token") } })
renderWithContext({isSignedIn: true, idToken: {toString: jest.fn().mockReturnValue("mock-id-token")}})

await waitFor(() => {
expect(mockedAxios.get).toHaveBeenCalledTimes(1)
Expand All @@ -119,12 +119,12 @@ describe("AccessProvider", () => {

mockedAxios.get.mockResolvedValueOnce({
status: 200,
data: { userInfo: mockUserInfo },
data: {userInfo: mockUserInfo},
})

renderWithContext({
isSignedIn: true,
idToken: { toString: jest.fn().mockReturnValue("mock-id-token") },
idToken: {toString: jest.fn().mockReturnValue("mock-id-token")},
})

await waitFor(() => {
Expand All @@ -139,8 +139,8 @@ describe("AccessProvider", () => {
// Using a type cast to "any" for simplicity if your TrackerUserInfo type requires more fields.
const mockUserInfo: TrackerUserInfo = {
roles_with_access: [
{ role_id: "ROLE1" } as any,
{ role_id: "ROLE2" } as any,
{role_id: "ROLE1"} as any,
{role_id: "ROLE2"} as any,
],
roles_without_access: [],
user_details: {
Expand All @@ -151,12 +151,12 @@ describe("AccessProvider", () => {

mockedAxios.get.mockResolvedValueOnce({
status: 200,
data: { userInfo: mockUserInfo },
data: {userInfo: mockUserInfo},
})

renderWithContext({
isSignedIn: true,
idToken: { toString: jest.fn().mockReturnValue("mock-id-token") },
idToken: {toString: jest.fn().mockReturnValue("mock-id-token")},
})

await waitFor(() => {
Expand All @@ -176,7 +176,7 @@ describe("AccessProvider", () => {

renderWithContext({
isSignedIn: true,
idToken: { toString: jest.fn().mockReturnValue("mock-id-token") },
idToken: {toString: jest.fn().mockReturnValue("mock-id-token")},
})

await waitFor(() => {
Expand Down Expand Up @@ -209,10 +209,10 @@ describe("AccessProvider", () => {

mockedAxios.get.mockResolvedValueOnce({
status: 200,
data: { userInfo: mockUserInfo },
data: {userInfo: mockUserInfo},
})

renderWithContext({ isSignedIn: true, idToken: { toString: jest.fn().mockReturnValue("mock-id-token") } })
renderWithContext({isSignedIn: true, idToken: {toString: jest.fn().mockReturnValue("mock-id-token")}})

// Confirm everything is updated
await waitFor(() => {
Expand Down
58 changes: 29 additions & 29 deletions packages/cpt-ui/__tests__/SelectYourRolePage.test.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import "@testing-library/jest-dom"
import { render, screen, waitFor } from "@testing-library/react"
import { useRouter } from "next/navigation"
import {render, screen, waitFor} from "@testing-library/react"
import {useRouter} from "next/navigation"
import React from "react"
import SelectYourRolePage from "@/app/selectyourrole/page"
import { AuthContext } from "@/context/AuthProvider"
import {AuthContext} from "@/context/AuthProvider"

import axios from "@/helpers/axios"
jest.mock("@/helpers/axios")
Expand Down Expand Up @@ -50,7 +50,7 @@ jest.mock("@/constants/ui-strings/CardStrings", () => {
noAddress: "Address not found",
}

return { SELECT_YOUR_ROLE_PAGE_TEXT, EPS_CARD_STRINGS }
return {SELECT_YOUR_ROLE_PAGE_TEXT, EPS_CARD_STRINGS}
})

// Mock `next/navigation` to prevent errors during component rendering in test
Expand Down Expand Up @@ -81,7 +81,7 @@ jest.mock("@/context/AccessProvider", () => {
const useAccess = () => React.useContext(MockAccessContext)

const __setMockContextValue = (newValue: any) => {
mockContextValue = { ...mockContextValue, ...newValue }
mockContextValue = {...mockContextValue, ...newValue}
// Reassign the context’s defaultValue so subsequent consumers get the new values
MockAccessContext._currentValue = mockContextValue
MockAccessContext._currentValue2 = mockContextValue
Expand All @@ -95,7 +95,7 @@ jest.mock("@/context/AccessProvider", () => {
}
})
// Import the setter for the mock access context.
const { __setMockContextValue } = require("@/context/AccessProvider")
const {__setMockContextValue} = require("@/context/AccessProvider")

// Default mock values for the AuthContext to simulate authentication state
const defaultAuthContext = {
Expand All @@ -109,7 +109,7 @@ const defaultAuthContext = {
}

export const renderWithAuth = (authOverrides = {}) => {
const authValue = { ...defaultAuthContext, ...authOverrides }
const authValue = {...defaultAuthContext, ...authOverrides}

return render(
<AuthContext.Provider value={authValue}>
Expand All @@ -118,8 +118,8 @@ export const renderWithAuth = (authOverrides = {}) => {
)
}

import { SELECT_YOUR_ROLE_PAGE_TEXT } from "@/constants/ui-strings/CardStrings"
import { EpsSpinnerStrings } from "../constants/ui-strings/EpsSpinnerStrings"
import {SELECT_YOUR_ROLE_PAGE_TEXT} from "@/constants/ui-strings/CardStrings"
import {EpsSpinnerStrings} from "../constants/ui-strings/EpsSpinnerStrings"

describe("SelectYourRolePage", () => {
// Clear all mock calls before each test to avoid state leaks
Expand All @@ -132,11 +132,11 @@ describe("SelectYourRolePage", () => {

it("renders loading state when signed in but API call hasn't resolved yet", async () => {
// Simulate a pending API call
mockedAxios.get.mockImplementation(() => new Promise(() => { }))
mockedAxios.get.mockImplementation(() => new Promise(() => {}))

renderWithAuth({
isSignedIn: true,
idToken: { toString: jest.fn().mockReturnValue("mock-id-token") },
idToken: {toString: jest.fn().mockReturnValue("mock-id-token")},
})

// Verify that the loading text appears
Expand All @@ -153,7 +153,7 @@ describe("SelectYourRolePage", () => {

renderWithAuth({
isSignedIn: true,
idToken: { toString: jest.fn().mockReturnValue("mock-id-token") },
idToken: {toString: jest.fn().mockReturnValue("mock-id-token")},
})

await waitFor(() => {
Expand All @@ -177,7 +177,7 @@ describe("SelectYourRolePage", () => {

renderWithAuth({
isSignedIn: true,
idToken: { toString: jest.fn().mockReturnValue("mock-id-token") },
idToken: {toString: jest.fn().mockReturnValue("mock-id-token")},
})

await waitFor(() => {
Expand Down Expand Up @@ -215,18 +215,18 @@ describe("SelectYourRolePage", () => {
// Mock 200 OK with valid userInfo
mockedAxios.get.mockResolvedValue({
status: 200,
data: { userInfo: mockUserInfo },
data: {userInfo: mockUserInfo},
})

renderWithAuth({
isSignedIn: true,
idToken: { toString: jest.fn().mockReturnValue("mock-id-token") },
idToken: {toString: jest.fn().mockReturnValue("mock-id-token")},
})

// Wait for the main content to load
await waitFor(() => {
// Check for the page heading
const heading = screen.getByRole("heading", { level: 1 })
const heading = screen.getByRole("heading", {level: 1})
expect(heading).toHaveTextContent(SELECT_YOUR_ROLE_PAGE_TEXT.title)
})
})
Expand All @@ -248,20 +248,20 @@ describe("SelectYourRolePage", () => {
// Mock fetch to return 200 OK with valid userInfo
mockedAxios.get.mockResolvedValue({
status: 200,
data: { userInfo: mockUserInfo },
data: {userInfo: mockUserInfo},
})

// Render the page with user signed in
__setMockContextValue({ noAccess: true })
__setMockContextValue({noAccess: true})
renderWithAuth({
isSignedIn: true,
idToken: { toString: jest.fn().mockReturnValue("mock-id-token") },
idToken: {toString: jest.fn().mockReturnValue("mock-id-token")},
})

// Wait for the main content to load
await waitFor(() => {
// Check for the no-access title
const heading = screen.getByRole("heading", { level: 1 })
const heading = screen.getByRole("heading", {level: 1})
expect(heading).toHaveTextContent(
SELECT_YOUR_ROLE_PAGE_TEXT.titleNoAccess
)
Expand All @@ -283,23 +283,23 @@ describe("SelectYourRolePage", () => {

mockedAxios.get.mockResolvedValue({
status: 200,
data: { userInfo: mockUserInfo },
data: {userInfo: mockUserInfo},
})

const mockPush = jest.fn();
(useRouter as jest.Mock).mockReturnValue({
push: mockPush,
})

renderWithAuth({ isSignedIn: true, idToken: { toString: jest.fn().mockReturnValue("mock-id-token") } })
renderWithAuth({isSignedIn: true, idToken: {toString: jest.fn().mockReturnValue("mock-id-token")}})

await waitFor(() => {
expect(mockPush).toHaveBeenCalledWith("/searchforaprescription")
})
})

it("renders loading state when waiting for API response", async () => {
mockedAxios.get.mockImplementation(() => new Promise(() => { }))
mockedAxios.get.mockImplementation(() => new Promise(() => {}))
renderWithAuth()
expect(screen.getByText("Loading...")).toBeInTheDocument()
})
Expand All @@ -322,29 +322,29 @@ describe("SelectYourRolePage", () => {

mockedAxios.get.mockResolvedValue({
status: 200,
data: { userInfo: mockUserInfo },
data: {userInfo: mockUserInfo},
})

__setMockContextValue({ noAccess: true })
renderWithAuth({ isSignedIn: true, idToken: { toString: jest.fn().mockReturnValue("mock-id-token") } })
__setMockContextValue({noAccess: true})
renderWithAuth({isSignedIn: true, idToken: {toString: jest.fn().mockReturnValue("mock-id-token")}})

await waitFor(() => {
expect(pushMock).toHaveBeenCalledWith("/searchforaprescription")
})
})

it("does not fetch user roles if user is not signed in", async () => {
renderWithAuth({ isSignedIn: false })
renderWithAuth({isSignedIn: false})
expect(mockedAxios.get).not.toHaveBeenCalled()
})

it("displays an error when the API request fails", async () => {
mockedAxios.get.mockRejectedValue(new Error("Failed to fetch user roles"))

renderWithAuth({ isSignedIn: true, idToken: { toString: jest.fn().mockReturnValue("mock-id-token") } })
renderWithAuth({isSignedIn: true, idToken: {toString: jest.fn().mockReturnValue("mock-id-token")}})

await waitFor(() => {
const errorSummary = screen.getByRole("heading", { name: "Error during role selection" })
const errorSummary = screen.getByRole("heading", {name: "Error during role selection"})
expect(errorSummary).toBeInTheDocument()
expect(screen.getByText("Failed to fetch CPT user info")).toBeInTheDocument()
})
Expand Down
Loading