Skip to content

Commit d643527

Browse files
aaightCascade Bot
andauthored
fix(webhooks): relax webhook CRUD from superAdminProcedure to adminProcedure (#1086)
Co-authored-by: Cascade Bot <bot@cascade.dev>
1 parent 884f8ee commit d643527

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

src/api/routers/webhooks.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { z } from 'zod';
2-
import { router, superAdminProcedure } from '../trpc.js';
2+
import { adminProcedure, router } from '../trpc.js';
33
import {
44
applyOneTimeTokens,
55
oneTimeTokensSchema,
@@ -23,7 +23,7 @@ import type {
2323
export type { GitHubWebhook, JiraWebhookInfo, SentryWebhookInfo, TrelloWebhook };
2424

2525
export const webhooksRouter = router({
26-
list: superAdminProcedure
26+
list: adminProcedure
2727
.input(
2828
z.object({
2929
projectId: z.string(),
@@ -65,7 +65,7 @@ export const webhooksRouter = router({
6565
};
6666
}),
6767

68-
create: superAdminProcedure
68+
create: adminProcedure
6969
.input(
7070
z.object({
7171
projectId: z.string(),
@@ -161,7 +161,7 @@ export const webhooksRouter = router({
161161
return results;
162162
}),
163163

164-
delete: superAdminProcedure
164+
delete: adminProcedure
165165
.input(
166166
z.object({
167167
projectId: z.string(),

tests/unit/api/routers/webhooks.test.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expect, it, vi } from 'vitest';
2-
import { createMockSuperAdmin, createMockUser } from '../../../helpers/factories.js';
2+
import { createMockUser } from '../../../helpers/factories.js';
33
import {
44
createCallerFor,
55
expectTRPCError,
@@ -75,7 +75,7 @@ import { webhooksRouter } from '../../../../src/api/routers/webhooks.js';
7575

7676
const createCaller = createCallerFor(webhooksRouter);
7777

78-
const mockUser = createMockSuperAdmin();
78+
const mockUser = createMockUser();
7979

8080
const mockProject = {
8181
id: 'my-project',
@@ -220,9 +220,25 @@ describe('webhooksRouter', () => {
220220
await expectTRPCError(caller.list({ projectId: 'my-project' }), 'UNAUTHORIZED');
221221
});
222222

223-
it('throws FORBIDDEN for admin role (not superadmin)', async () => {
223+
it('allows admin role to list webhooks', async () => {
224+
setupProjectContext();
225+
226+
mockFetch.mockResolvedValue({
227+
ok: true,
228+
json: () => Promise.resolve([]),
229+
});
230+
mockListWebhooks.mockResolvedValue({ data: [] });
231+
224232
const adminUser = createMockUser({ role: 'admin' });
225233
const caller = createCaller({ user: adminUser, effectiveOrgId: adminUser.orgId });
234+
const result = await caller.list({ projectId: 'my-project' });
235+
expect(result.trello).toEqual([]);
236+
expect(result.github).toEqual([]);
237+
});
238+
239+
it('throws FORBIDDEN for member role', async () => {
240+
const memberUser = createMockUser({ role: 'member' });
241+
const caller = createCaller({ user: memberUser, effectiveOrgId: memberUser.orgId });
226242
await expectTRPCError(caller.list({ projectId: 'my-project' }), 'FORBIDDEN');
227243
});
228244

0 commit comments

Comments
 (0)