@@ -3,9 +3,36 @@ import { render, waitFor, screen, fireEvent } from "@testing-library/react";
3
3
import fetchMock from "jest-fetch-mock" ;
4
4
import FilteredTable from "./PacksTable" ;
5
5
import { toTitleCase } from "./PacksTable" ;
6
+
7
+ // Mock the Docusaurus dependencies
8
+ jest . mock ( "@docusaurus/theme-common" , ( ) => ( {
9
+ useColorMode : ( ) => ( {
10
+ colorMode : "light" ,
11
+ setColorMode : jest . fn ( ) ,
12
+ } ) ,
13
+ } ) ) ;
14
+
15
+ jest . mock ( "@theme/Admonition" ) ;
16
+
6
17
// Enable fetch mocking
7
18
fetchMock . enableMocks ( ) ;
8
19
20
+ beforeAll ( ( ) => {
21
+ Object . defineProperty ( window , "matchMedia" , {
22
+ writable : true ,
23
+ value : jest . fn ( ) . mockImplementation ( ( query ) => ( {
24
+ matches : false ,
25
+ media : query ,
26
+ onchange : null ,
27
+ addListener : jest . fn ( ) , // deprecated
28
+ removeListener : jest . fn ( ) , // deprecated
29
+ addEventListener : jest . fn ( ) ,
30
+ removeEventListener : jest . fn ( ) ,
31
+ dispatchEvent : jest . fn ( ) ,
32
+ } ) ) ,
33
+ } ) ;
34
+ } ) ;
35
+
9
36
describe ( "FilteredTable Tests" , ( ) => {
10
37
const mockPacks = [
11
38
{
@@ -23,6 +50,7 @@ describe("FilteredTable Tests", () => {
23
50
releaseType : "Experimental" ,
24
51
contributor : "" ,
25
52
docsURL : "" ,
53
+ hash : "mock-hash-1" ,
26
54
} ,
27
55
{
28
56
name : "amazon-linux-eks" ,
@@ -39,6 +67,7 @@ describe("FilteredTable Tests", () => {
39
67
releaseType : "Stable" ,
40
68
contributor : "" ,
41
69
docsURL : "" ,
70
+ hash : "mock-hash-2" ,
42
71
} ,
43
72
] ;
44
73
@@ -49,14 +78,14 @@ describe("FilteredTable Tests", () => {
49
78
50
79
it ( "should show loader initially" , ( ) => {
51
80
const { container } = render ( < FilteredTable /> ) ;
52
- expect ( container . querySelector ( ".loader " ) ) . toBeInTheDocument ( ) ;
81
+ expect ( container . querySelector ( ".ant-spin " ) ) . toBeInTheDocument ( ) ;
53
82
} ) ;
54
83
55
84
it ( "should hide loader and display packs after API call" , async ( ) => {
56
85
fetchMock . mockResponseOnce ( JSON . stringify ( { dateCreated : "2022-08-25" , Packs : mockPacks } ) ) ;
57
86
const { container } = render ( < FilteredTable /> ) ;
58
87
59
- await waitFor ( ( ) => expect ( container . querySelector ( ".loader " ) ) . not . toBeInTheDocument ( ) ) ;
88
+ await waitFor ( ( ) => expect ( container . querySelector ( ".ant-spin " ) ) . not . toBeInTheDocument ( ) ) ;
60
89
expect ( screen . getByText ( "Alpine" ) ) . toBeInTheDocument ( ) ;
61
90
expect ( screen . getByText ( "Amazon EKS optimized Linux" ) ) . toBeInTheDocument ( ) ;
62
91
} ) ;
@@ -102,6 +131,18 @@ describe("FilteredTable Tests", () => {
102
131
103
132
expect ( screen . getByText ( "EKS, vSphere" ) ) . toBeInTheDocument ( ) ;
104
133
} ) ;
134
+
135
+ it ( "should have unique row keys" , async ( ) => {
136
+ fetchMock . mockResponseOnce ( JSON . stringify ( { dateCreated : "2022-08-25" , Packs : mockPacks } ) ) ;
137
+ const { container } = render ( < FilteredTable /> ) ;
138
+
139
+ await waitFor ( ( ) => {
140
+ const rows = container . querySelectorAll ( ".ant-table-row" ) ;
141
+ const keys = Array . from ( rows ) . map ( ( row ) => row . getAttribute ( "data-row-key" ) ) ;
142
+ const uniqueKeys = new Set ( keys ) ;
143
+ expect ( keys . length ) . toBe ( uniqueKeys . size ) ;
144
+ } ) ;
145
+ } ) ;
105
146
} ) ;
106
147
107
148
describe ( "toTitleCase" , ( ) => {
0 commit comments