Skip to content

Commit 70ad511

Browse files
authored
Merge branch 'main' into feat/user-notification-show-at
2 parents c256e3c + 2a6fa98 commit 70ad511

File tree

8 files changed

+86
-37
lines changed

8 files changed

+86
-37
lines changed

__tests__/workers/feedbackClassify.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,24 @@ describe('feedbackClassify worker', () => {
164164
expect(mockClassifyUserFeedback).not.toHaveBeenCalled();
165165
expect(mockCreateFeedbackIssue).not.toHaveBeenCalled();
166166
});
167+
168+
it('should keep new category values when creating Linear issue', async () => {
169+
const feedback = await con.getRepository(Feedback).save({
170+
userId: '1',
171+
category: 7,
172+
description: 'Content quality feedback',
173+
status: FeedbackStatus.Pending,
174+
flags: {},
175+
});
176+
177+
await expectSuccessfulTypedBackground<'api.v1.feedback-created'>(worker, {
178+
feedbackId: feedback.id,
179+
});
180+
181+
expect(mockCreateFeedbackIssue).toHaveBeenCalledWith(
182+
expect.objectContaining({
183+
category: 7,
184+
}),
185+
);
186+
});
167187
});

__tests__/workers/feedbackUpdatedSlack.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,4 +235,34 @@ describe('feedbackUpdatedSlack worker', () => {
235235
expect(updated?.flags?.slackNotifiedAt).toBeUndefined();
236236
expect(postMessageMock).toHaveBeenCalledTimes(1);
237237
});
238+
239+
it('should render new category display names in slack notification', async () => {
240+
const feedback = await con.getRepository(Feedback).save({
241+
userId: '1',
242+
category: 7,
243+
description: 'Content quality feedback',
244+
status: FeedbackStatus.Accepted,
245+
flags: {},
246+
});
247+
248+
await expectSuccessfulTypedBackground<'api.v1.feedback-updated'>(worker, {
249+
feedbackId: feedback.id,
250+
});
251+
252+
expect(postMessageMock).toHaveBeenCalledTimes(1);
253+
const [{ blocks }] = postMessageMock.mock.calls[0];
254+
const categoryBlock = blocks?.find((block) => {
255+
if (block.type !== 'section' || !('fields' in block)) {
256+
return false;
257+
}
258+
259+
return block.fields?.some(
260+
(field) =>
261+
field.type === 'mrkdwn' &&
262+
field.text === '*Category:*\nContent Quality',
263+
);
264+
});
265+
266+
expect(categoryBlock).toBeDefined();
267+
});
238268
});

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"@connectrpc/connect-fastify": "^1.6.1",
3838
"@connectrpc/connect-node": "^1.6.1",
3939
"@dailydotdev/graphql-redis-subscriptions": "^2.4.3",
40-
"@dailydotdev/schema": "0.2.73",
40+
"@dailydotdev/schema": "0.2.74",
4141
"@dailydotdev/ts-ioredis-pool": "^1.0.2",
4242
"@fastify/cookie": "^11.0.2",
4343
"@fastify/cors": "^11.2.0",

pnpm-lock.yaml

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/common/feedback.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,32 @@ import {
33
UserFeedbackSentiment,
44
} from '@dailydotdev/schema';
55

6+
const categoryDisplayNames: Record<number, string> = {
7+
[UserFeedbackCategory.BUG]: 'Bug Report',
8+
[UserFeedbackCategory.FEATURE_REQUEST]: 'Feature Request',
9+
[UserFeedbackCategory.GENERAL]: 'General Feedback',
10+
[UserFeedbackCategory.OTHER]: 'Other',
11+
[UserFeedbackCategory.UX_ISSUE]: 'UX Issue',
12+
[UserFeedbackCategory.PERFORMANCE]: 'Performance',
13+
[UserFeedbackCategory.CONTENT_QUALITY]: 'Content Quality',
14+
};
15+
16+
const categoryLabelNames: Record<number, string> = {
17+
[UserFeedbackCategory.BUG]: 'bug',
18+
[UserFeedbackCategory.FEATURE_REQUEST]: 'feature-request',
19+
[UserFeedbackCategory.GENERAL]: 'general',
20+
[UserFeedbackCategory.OTHER]: 'other',
21+
[UserFeedbackCategory.UX_ISSUE]: 'ux-issue',
22+
[UserFeedbackCategory.PERFORMANCE]: 'performance',
23+
[UserFeedbackCategory.CONTENT_QUALITY]: 'content-quality',
24+
};
25+
626
export const getCategoryDisplayName = (category: number): string => {
7-
switch (category) {
8-
case UserFeedbackCategory.BUG:
9-
return 'Bug Report';
10-
case UserFeedbackCategory.FEATURE_REQUEST:
11-
return 'Feature Request';
12-
case UserFeedbackCategory.GENERAL:
13-
return 'General Feedback';
14-
case UserFeedbackCategory.OTHER:
15-
return 'Other';
16-
default:
17-
return 'Feedback';
18-
}
27+
return categoryDisplayNames[category] ?? 'Feedback';
28+
};
29+
30+
export const getCategoryLabelName = (category: number): string => {
31+
return categoryLabelNames[category] ?? 'unknown';
1932
};
2033

2134
export const getSentimentEmoji = (sentiment?: string): string => {

src/common/schema/feedback.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { UserFeedbackCategory } from '@dailydotdev/schema';
21
import { z } from 'zod';
32

4-
export const feedbackCategorySchema = z.enum(UserFeedbackCategory);
3+
const feedbackCategories = [0, 1, 2, 3, 4, 5, 6, 7] as const;
4+
5+
export const feedbackCategorySchema = z.literal(feedbackCategories);
56

67
export const feedbackInputSchema = z.object({
78
category: feedbackCategorySchema,

src/integrations/linear/index.ts

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { LinearClient } from '@linear/sdk';
22
import {
3-
UserFeedbackCategory,
43
UserFeedbackSentiment,
54
UserFeedbackTeam,
65
UserFeedbackUrgency,
@@ -10,6 +9,7 @@ import type { FeedbackClassification } from '../../entity/Feedback';
109
import { GarmrService, IGarmrClient } from '../garmr';
1110
import {
1211
getCategoryDisplayName,
12+
getCategoryLabelName,
1313
getSentimentEmoji,
1414
} from '../../common/feedback';
1515

@@ -63,21 +63,6 @@ interface CreateFeedbackIssueResult {
6363
const mapUrgencyToPriority = (urgency?: string): number =>
6464
Number(urgency) || UserFeedbackUrgency.MEDIUM;
6565

66-
const getCategoryLabelName = (category: number): string => {
67-
switch (category) {
68-
case UserFeedbackCategory.BUG:
69-
return 'bug';
70-
case UserFeedbackCategory.FEATURE_REQUEST:
71-
return 'feature-request';
72-
case UserFeedbackCategory.GENERAL:
73-
return 'general';
74-
case UserFeedbackCategory.OTHER:
75-
return 'other';
76-
default:
77-
return 'unknown';
78-
}
79-
};
80-
8166
const getUrgencyDisplayName = (urgency?: string): string => {
8267
switch (Number(urgency)) {
8368
case UserFeedbackUrgency.CRITICAL:

src/schema/feedback.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export const typeDefs = /* GraphQL */ `
2121
"""
2222
input FeedbackInput {
2323
"""
24-
Category of feedback (BUG, FEATURE_REQUEST, GENERAL, OTHER)
24+
Category of feedback (BUG, FEATURE_REQUEST, GENERAL, OTHER, UX_ISSUE, PERFORMANCE, CONTENT_QUALITY)
2525
"""
2626
category: ProtoEnumValue!
2727

0 commit comments

Comments
 (0)