1
1
import { screen , waitFor } from "@testing-library/react"
2
2
import userEvent from "@testing-library/user-event"
3
3
import * as API from "api/api"
4
+ import { rest } from "msw"
4
5
import {
5
- history ,
6
+ renderWithAuth ,
6
7
MockAuditLog ,
7
8
MockAuditLog2 ,
8
- render ,
9
9
waitForLoaderToBeRemoved ,
10
+ MockEntitlementsWithAuditLog ,
10
11
} from "testHelpers/renderHelpers"
12
+ import { server } from "testHelpers/server"
13
+
11
14
import * as CreateDayString from "util/createDayString"
12
15
import AuditPage from "./AuditPage"
13
16
17
+ interface RenderPageOptions {
18
+ filter ?: string
19
+ page ?: number
20
+ }
21
+
22
+ const renderPage = async ( { filter, page } : RenderPageOptions = { } ) => {
23
+ let route = "/audit"
24
+ const params = new URLSearchParams ( )
25
+
26
+ if ( filter ) {
27
+ params . set ( "filter" , filter )
28
+ }
29
+
30
+ if ( page ) {
31
+ params . set ( "page" , page . toString ( ) )
32
+ }
33
+
34
+ if ( Array . from ( params ) . length > 0 ) {
35
+ route += `?${ params . toString ( ) } `
36
+ }
37
+
38
+ renderWithAuth ( < AuditPage /> , {
39
+ route,
40
+ path : "/audit" ,
41
+ } )
42
+ await waitForLoaderToBeRemoved ( )
43
+ }
44
+
14
45
describe ( "AuditPage" , ( ) => {
15
46
beforeEach ( ( ) => {
16
47
// Mocking the dayjs module within the createDayString file
17
48
const mock = jest . spyOn ( CreateDayString , "createDayString" )
18
49
mock . mockImplementation ( ( ) => "a minute ago" )
50
+
51
+ // Mock the entitlements
52
+ server . use (
53
+ rest . get ( "/api/v2/entitlements" , ( req , res , ctx ) => {
54
+ return res ( ctx . status ( 200 ) , ctx . json ( MockEntitlementsWithAuditLog ) )
55
+ } ) ,
56
+ )
19
57
} )
20
58
21
59
it ( "shows the audit logs" , async ( ) => {
22
60
// When
23
- render ( < AuditPage /> )
61
+ await renderPage ( )
24
62
25
63
// Then
26
64
await screen . findByTestId ( `audit-log-row-${ MockAuditLog . id } ` )
@@ -29,8 +67,7 @@ describe("AuditPage", () => {
29
67
30
68
describe ( "Filtering" , ( ) => {
31
69
it ( "filters by typing" , async ( ) => {
32
- render ( < AuditPage /> )
33
- await waitForLoaderToBeRemoved ( )
70
+ await renderPage ( )
34
71
await screen . findByText ( "updated" , { exact : false } )
35
72
36
73
const filterField = screen . getByLabelText ( "Filter" )
@@ -47,19 +84,14 @@ describe("AuditPage", () => {
47
84
. mockResolvedValue ( { audit_logs : [ MockAuditLog ] , count : 1 } )
48
85
49
86
const query = "resource_type:workspace action:create"
50
- history . push ( `/audit?filter=${ encodeURIComponent ( query ) } ` )
51
- render ( < AuditPage /> )
52
-
53
- await waitForLoaderToBeRemoved ( )
87
+ await renderPage ( { filter : query } )
54
88
55
89
expect ( getAuditLogsSpy ) . toBeCalledWith ( { limit : 25 , offset : 0 , q : query } )
56
90
} )
57
91
58
92
it ( "resets page to 1 when filter is changed" , async ( ) => {
59
- history . push ( `/audit?page=2` )
60
- render ( < AuditPage /> )
93
+ await renderPage ( { page : 2 } )
61
94
62
- await waitForLoaderToBeRemoved ( )
63
95
const getAuditLogsSpy = jest . spyOn ( API , "getAuditLogs" )
64
96
65
97
const filterField = screen . getByLabelText ( "Filter" )
0 commit comments