-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathnotificationSlice.test.ts
148 lines (126 loc) · 3.93 KB
/
notificationSlice.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import { Store, configureStore } from "@reduxjs/toolkit";
import notificationReducer, {
getUserNotifications,
readNotification,
onIncomingNotification,
markNotificationAsRead,
setNotifications,
INotificationR,
} from "../redux/reducers/notificationSlice";
import api from "../redux/api/api";
import { connectSocketMock, socketMock } from "./__mock__/socketMock";
jest.mock("../redux/api/api");
describe("notificationSlice", () => {
let store;
beforeEach(() => {
// jest.clearAllMocks();
store = configureStore({
reducer: {
notifications: notificationReducer,
},
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware({
serializableCheck: false,
}),
});
});
it("should handle onIncomingNotification", () => {
const notification: INotificationR = {
id: 1,
userId: 1,
title: "New Notification",
message: "This is a new notification",
isRead: false,
createdAt: new Date(),
updatedAt: new Date(),
};
store.dispatch(onIncomingNotification(notification));
const state = store.getState().notifications;
expect(state.notifications).toContainEqual(notification);
expect(state.unreadCount).toBe(1);
});
it("should handle markNotificationAsRead", () => {
const notification: INotificationR = {
id: 1,
userId: 1,
title: "New Notification",
message: "This is a new notification",
isRead: false,
createdAt: new Date(),
updatedAt: new Date(),
};
store.dispatch(onIncomingNotification(notification));
store.dispatch(markNotificationAsRead(notification.id));
const state = store.getState().notifications;
expect(state.notifications[0].isRead).toBe(true);
expect(state.unreadCount).toBe(0);
});
it("should handle setNotifications", () => {
const notifications: INotificationR[] = [
{
id: 1,
userId: 1,
title: "Test Notification",
message: "This is a test notification",
isRead: false,
createdAt: new Date(),
updatedAt: new Date(),
},
];
store.dispatch(setNotifications(notifications));
const state = store.getState().notifications;
expect(state.notifications).toEqual(notifications);
expect(state.unreadCount).toBe(1);
});
it("should handle getUserNotifications thunk", async () => {
const mockNotifications: INotificationR[] = [
{
id: 1,
userId: 1,
title: "Test Notification",
message: "This is a test notification",
isRead: false,
createdAt: new Date(),
updatedAt: new Date(),
},
{
id: 2,
userId: 1,
title: "Test Notification",
message: "This is a test notification",
isRead: false,
createdAt: new Date(),
updatedAt: new Date(),
},
];
(api.get as jest.Mock).mockResolvedValueOnce({
data: { notifications: mockNotifications },
});
const result = await store.dispatch(getUserNotifications());
console.log("Thunk result:", result);
const state = store.getState().notifications;
expect(state.notifications).toEqual(mockNotifications);
expect(state.unreadCount).toBe(2);
});
it("should handle readNotification thunk", async () => {
const notification: INotificationR = {
id: 1,
userId: 1,
title: "Test Notification",
message: "This is a test notification",
isRead: false,
createdAt: new Date(),
updatedAt: new Date(),
};
store.dispatch(onIncomingNotification(notification));
(api.get as jest.Mock).mockResolvedValueOnce({
data: {},
});
// @ts-ignore
await store.dispatch(readNotification(notification.id));
const state = store.getState().notifications;
console.log("State after readNotification:", state); // Debugging output
expect(state.notifications[0].isRead).toBe(true);
expect(state.unreadCount).toBe(0);
});
});