-
Notifications
You must be signed in to change notification settings - Fork 108
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Create validation set table (#4806)
- Loading branch information
Showing
10 changed files
with
372 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
static/js/validation-sets/hooks/__tests__/useValidationSet.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import * as ReactQuery from "react-query"; | ||
import { renderHook } from "@testing-library/react"; | ||
|
||
import useValidationSet from "../useValidationSet"; | ||
|
||
describe("useValidationSet", () => { | ||
test("Calls useQuery", () => { | ||
jest.spyOn(ReactQuery, "useQuery").mockImplementation(jest.fn()); | ||
renderHook(() => useValidationSet("test-id")); | ||
expect(ReactQuery.useQuery).toHaveBeenCalled(); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
import useValidationSets from "./useValidationSets"; | ||
import useValidationSet from "./useValidationSet"; | ||
|
||
export { useValidationSets }; | ||
export { useValidationSets, useValidationSet }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import { useQuery } from "react-query"; | ||
|
||
function useValidationSet(validationSetId: string | undefined) { | ||
return useQuery({ | ||
queryKey: ["validationSet"], | ||
queryFn: async () => { | ||
const response = await fetch(`/api/validation-sets/${validationSetId}`); | ||
|
||
if (!response.ok) { | ||
throw new Error("Unable to fetch validation set"); | ||
} | ||
|
||
const validationSetData = await response.json(); | ||
|
||
if (!validationSetData.success) { | ||
throw new Error(validationSetData.message); | ||
} | ||
|
||
return validationSetData.data; | ||
}, | ||
}); | ||
} | ||
|
||
export default useValidationSet; |
161 changes: 160 additions & 1 deletion
161
static/js/validation-sets/pages/ValidationSet/ValidationSet.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
149 changes: 149 additions & 0 deletions
149
static/js/validation-sets/pages/ValidationSet/__tests__/ValidationSet.test.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
import { BrowserRouter, useSearchParams } from "react-router-dom"; | ||
import { QueryClient, QueryClientProvider, useQuery } from "react-query"; | ||
import { render, screen, fireEvent, waitFor } from "@testing-library/react"; | ||
import "@testing-library/jest-dom"; | ||
|
||
import ValidationSet from "../ValidationSet"; | ||
|
||
const queryClient = new QueryClient(); | ||
|
||
const renderComponent = () => { | ||
return render( | ||
<QueryClientProvider client={queryClient}> | ||
<BrowserRouter> | ||
<ValidationSet /> | ||
</BrowserRouter> | ||
</QueryClientProvider> | ||
); | ||
}; | ||
|
||
const mockValidationSet = [ | ||
{ | ||
name: "validation-set-1", | ||
revision: 1, | ||
sequence: 1, | ||
snaps: [ | ||
{ | ||
id: "test-snap-1-id", | ||
name: "test-snap-1", | ||
}, | ||
{ | ||
id: "test-snap-2-id", | ||
name: "only-in-sequence-1", | ||
}, | ||
], | ||
timestamp: "2024-08-13T09:49:18Z", | ||
}, | ||
{ | ||
name: "validation-set-1", | ||
revision: 1, | ||
sequence: 2, | ||
snaps: [ | ||
{ | ||
id: "test-snap-1-id", | ||
name: "test-snap-1", | ||
}, | ||
{ | ||
id: "test-snap-2-id", | ||
name: "only-in-sequence-2", | ||
}, | ||
], | ||
timestamp: "2024-08-14T09:49:18Z", | ||
}, | ||
{ | ||
name: "validation-set-1", | ||
revision: 1, | ||
sequence: 3, | ||
snaps: [ | ||
{ | ||
id: "test-snap-1-id", | ||
name: "test-snap-1", | ||
}, | ||
{ | ||
id: "test-snap-2-id", | ||
name: "test-snap-2", | ||
}, | ||
{ | ||
id: "test-snap-3-id", | ||
name: "only-in-sequence-3", | ||
}, | ||
], | ||
timestamp: "2024-08-15T09:49:18Z", | ||
}, | ||
]; | ||
|
||
jest.mock("react-query", () => ({ | ||
...jest.requireActual("react-query"), | ||
useQuery: jest.fn(), | ||
})); | ||
|
||
jest.mock("react-router-dom", () => ({ | ||
...jest.requireActual("react-router-dom"), | ||
useSearchParams: jest.fn(), | ||
})); | ||
|
||
describe("ValidationSet", () => { | ||
test("shows loading state when fetching validation set", () => { | ||
// @ts-ignore | ||
useQuery.mockReturnValue({ status: "loading", data: undefined }); | ||
// @ts-ignore | ||
useSearchParams.mockReturnValue([new URLSearchParams()]); | ||
renderComponent(); | ||
expect( | ||
screen.getByText(/Fetching validation set snaps/) | ||
).toBeInTheDocument(); | ||
}); | ||
|
||
test("shows message if no validation set", () => { | ||
// @ts-ignore | ||
useQuery.mockReturnValue({ status: "success", data: [] }); | ||
// @ts-ignore | ||
useSearchParams.mockReturnValue([new URLSearchParams()]); | ||
renderComponent(); | ||
expect( | ||
screen.getByText(/There are no snaps in this validation set to display/) | ||
).toBeInTheDocument(); | ||
}); | ||
|
||
test("shows message when there is an error fetching validation set", () => { | ||
// @ts-ignore | ||
useQuery.mockReturnValue({ status: "error", data: undefined }); | ||
// @ts-ignore | ||
useSearchParams.mockReturnValue([new URLSearchParams()]); | ||
renderComponent(); | ||
expect( | ||
screen.getByText(/Unable to load validation set snaps/) | ||
).toBeInTheDocument(); | ||
}); | ||
|
||
test("displays validation set snaps", () => { | ||
// @ts-ignore | ||
useQuery.mockReturnValue({ status: "success", data: mockValidationSet }); | ||
// @ts-ignore | ||
useSearchParams.mockReturnValue([new URLSearchParams()]); | ||
renderComponent(); | ||
expect( | ||
screen.getByText(mockValidationSet[0].snaps[0].name) | ||
).toBeInTheDocument(); | ||
}); | ||
|
||
test("sequence selector defaults to latest sequence", () => { | ||
// @ts-ignore | ||
useQuery.mockReturnValue({ status: "success", data: mockValidationSet }); | ||
// @ts-ignore | ||
useSearchParams.mockReturnValue([new URLSearchParams()]); | ||
renderComponent(); | ||
expect(screen.getByLabelText("Sequence")).toHaveValue("3"); | ||
expect(screen.getByText(/only-in-sequence-3/)).toBeInTheDocument(); | ||
}); | ||
|
||
test("sequence selector uses query string value", () => { | ||
// @ts-ignore | ||
useQuery.mockReturnValue({ status: "success", data: mockValidationSet }); | ||
// @ts-ignore | ||
useSearchParams.mockReturnValue([new URLSearchParams({ sequence: "2" })]); | ||
renderComponent(); | ||
expect(screen.getByLabelText("Sequence")).toHaveValue("2"); | ||
expect(screen.getByText(/only-in-sequence-2/)).toBeInTheDocument(); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
export { default } from "./ValidationSet"; | ||
import ValidationSet from "./ValidationSet"; | ||
export default ValidationSet; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.