Skip to content

Commit c712d93

Browse files
committed
feat: tests
1 parent 48edde2 commit c712d93

File tree

1 file changed

+183
-0
lines changed

1 file changed

+183
-0
lines changed
Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
import { describe, it, expect, beforeEach } from 'bun:test'
2+
import { useFeedbackStore } from '../feedback-store'
3+
4+
describe('FeedbackStore', () => {
5+
beforeEach(() => {
6+
useFeedbackStore.getState().reset()
7+
})
8+
9+
describe('openFeedbackForMessage', () => {
10+
it('should open feedback mode for a specific message', () => {
11+
const store = useFeedbackStore.getState()
12+
13+
store.openFeedbackForMessage('message-123')
14+
15+
const state = useFeedbackStore.getState()
16+
expect(state.feedbackMode).toBe(true)
17+
expect(state.feedbackMessageId).toBe('message-123')
18+
expect(state.feedbackText).toBe('')
19+
expect(state.feedbackCategory).toBe('other')
20+
})
21+
22+
it('should open general feedback mode when messageId is null', () => {
23+
const store = useFeedbackStore.getState()
24+
25+
store.openFeedbackForMessage(null)
26+
27+
const state = useFeedbackStore.getState()
28+
expect(state.feedbackMode).toBe(true)
29+
expect(state.feedbackMessageId).toBeNull()
30+
})
31+
})
32+
33+
describe('closeFeedback', () => {
34+
it('should close feedback mode', () => {
35+
const store = useFeedbackStore.getState()
36+
store.openFeedbackForMessage('message-123')
37+
38+
store.closeFeedback()
39+
40+
const state = useFeedbackStore.getState()
41+
expect(state.feedbackMode).toBe(false)
42+
expect(state.feedbackMessageId).toBeNull()
43+
})
44+
})
45+
46+
describe('feedback text management', () => {
47+
it('should update feedback text and cursor', () => {
48+
const store = useFeedbackStore.getState()
49+
50+
store.setFeedbackText('This is my feedback')
51+
store.setFeedbackCursor(10)
52+
53+
const state = useFeedbackStore.getState()
54+
expect(state.feedbackText).toBe('This is my feedback')
55+
expect(state.feedbackCursor).toBe(10)
56+
})
57+
58+
it('should update feedback category', () => {
59+
const store = useFeedbackStore.getState()
60+
61+
store.setFeedbackCategory('good_result')
62+
63+
expect(useFeedbackStore.getState().feedbackCategory).toBe('good_result')
64+
})
65+
})
66+
67+
describe('input save and restore', () => {
68+
it('should save and restore input state', () => {
69+
const store = useFeedbackStore.getState()
70+
71+
store.saveCurrentInput('My current input', 15)
72+
73+
const restored = store.restoreSavedInput()
74+
expect(restored.value).toBe('My current input')
75+
expect(restored.cursor).toBe(15)
76+
})
77+
})
78+
79+
describe('feedback submission tracking', () => {
80+
it('should mark a message as having feedback submitted', () => {
81+
const store = useFeedbackStore.getState()
82+
83+
store.markMessageFeedbackSubmitted('message-123', 'good_result')
84+
85+
const state = useFeedbackStore.getState()
86+
expect(state.messagesWithFeedback.has('message-123')).toBe(true)
87+
expect(state.messageFeedbackCategories.get('message-123')).toBe('good_result')
88+
})
89+
90+
it('should track multiple message feedbacks', () => {
91+
const store = useFeedbackStore.getState()
92+
93+
store.markMessageFeedbackSubmitted('message-1', 'good_result')
94+
store.markMessageFeedbackSubmitted('message-2', 'bad_result')
95+
store.markMessageFeedbackSubmitted('message-3', 'app_bug')
96+
97+
const state = useFeedbackStore.getState()
98+
expect(state.messagesWithFeedback.size).toBe(3)
99+
expect(state.messageFeedbackCategories.size).toBe(3)
100+
expect(state.messageFeedbackCategories.get('message-2')).toBe('bad_result')
101+
})
102+
})
103+
104+
describe('resetFeedbackForm', () => {
105+
it('should reset form fields but keep metadata', () => {
106+
const store = useFeedbackStore.getState()
107+
108+
store.setFeedbackText('Some text')
109+
store.setFeedbackCursor(5)
110+
store.setFeedbackCategory('bad_result')
111+
store.openFeedbackForMessage('message-123')
112+
store.markMessageFeedbackSubmitted('message-456', 'good_result')
113+
114+
store.resetFeedbackForm()
115+
116+
const state = useFeedbackStore.getState()
117+
expect(state.feedbackText).toBe('')
118+
expect(state.feedbackCursor).toBe(0)
119+
expect(state.feedbackCategory).toBe('other')
120+
expect(state.feedbackMessageId).toBeNull()
121+
expect(state.messagesWithFeedback.has('message-456')).toBe(true)
122+
})
123+
})
124+
125+
describe('reset', () => {
126+
it('should reset entire store to initial state', () => {
127+
const store = useFeedbackStore.getState()
128+
129+
store.openFeedbackForMessage('message-123')
130+
store.setFeedbackText('Some text')
131+
store.markMessageFeedbackSubmitted('message-456', 'good_result')
132+
store.saveCurrentInput('Saved input', 10)
133+
134+
store.reset()
135+
136+
const state = useFeedbackStore.getState()
137+
expect(state.feedbackMode).toBe(false)
138+
expect(state.feedbackMessageId).toBeNull()
139+
expect(state.feedbackText).toBe('')
140+
expect(state.feedbackCursor).toBe(0)
141+
expect(state.feedbackCategory).toBe('other')
142+
expect(state.savedInputValue).toBe('')
143+
expect(state.savedCursorPosition).toBe(0)
144+
expect(state.messagesWithFeedback.size).toBe(0)
145+
expect(state.messageFeedbackCategories.size).toBe(0)
146+
})
147+
})
148+
149+
describe('selectors', () => {
150+
it('should correctly select feedback open state for specific message', () => {
151+
const { selectIsFeedbackOpenForMessage } = require('../feedback-store')
152+
const store = useFeedbackStore.getState()
153+
154+
store.openFeedbackForMessage('message-123')
155+
156+
const state = useFeedbackStore.getState()
157+
expect(selectIsFeedbackOpenForMessage('message-123')(state)).toBe(true)
158+
expect(selectIsFeedbackOpenForMessage('message-456')(state)).toBe(false)
159+
})
160+
161+
it('should correctly select if message has submitted feedback', () => {
162+
const { selectHasSubmittedFeedback } = require('../feedback-store')
163+
const store = useFeedbackStore.getState()
164+
165+
store.markMessageFeedbackSubmitted('message-123', 'good_result')
166+
167+
const state = useFeedbackStore.getState()
168+
expect(selectHasSubmittedFeedback('message-123')(state)).toBe(true)
169+
expect(selectHasSubmittedFeedback('message-456')(state)).toBe(false)
170+
})
171+
172+
it('should correctly select message feedback category', () => {
173+
const { selectMessageFeedbackCategory } = require('../feedback-store')
174+
const store = useFeedbackStore.getState()
175+
176+
store.markMessageFeedbackSubmitted('message-123', 'bad_result')
177+
178+
const state = useFeedbackStore.getState()
179+
expect(selectMessageFeedbackCategory('message-123')(state)).toBe('bad_result')
180+
expect(selectMessageFeedbackCategory('message-456')(state)).toBeUndefined()
181+
})
182+
})
183+
})

0 commit comments

Comments
 (0)