@@ -7,21 +7,6 @@ import { scheduleWorkflowNotifications } from "@calcom/trpc/server/routers/viewe
77
88import { scanWorkflowBody } from "./scanWorkflowBody" ;
99
10- const mockAkismetCheckSpam = vi . fn ( ) ;
11-
12- // Mock the entire module
13- vi . mock ( "akismet-api" , ( ) => {
14- return {
15- AkismetClient : class {
16- constructor ( ) {
17- return {
18- checkSpam : mockAkismetCheckSpam ,
19- } ;
20- }
21- } ,
22- } ;
23- } ) ;
24-
2510vi . mock ( "@calcom/lib/autoLock" , async ( importActual ) => {
2611 const actual = await importActual < typeof import ( "@calcom/lib/autoLock" ) > ( ) ;
2712 return {
@@ -54,15 +39,18 @@ const mockWorkflow = {
5439} ;
5540
5641describe ( "scanWorkflowBody" , ( ) => {
42+ const mockFetch = vi . fn ( ) ;
43+
5744 beforeEach ( ( ) => {
5845 vi . resetAllMocks ( ) ;
59- process . env . AKISMET_API_KEY = "test-key" ;
46+ vi . stubGlobal ( "fetch" , mockFetch ) ;
47+ process . env . IFFY_API_KEY = "test-key" ;
6048 prismaMock . workflowStep . findMany . mockResolvedValue ( [ mockWorkflowStep ] ) ;
6149 prismaMock . workflow . findFirst . mockResolvedValue ( mockWorkflow ) ;
6250 } ) ;
6351
64- it ( "should skip scan if AKISMET_API_KEY is not set" , async ( ) => {
65- process . env . AKISMET_API_KEY = "" ;
52+ it ( "should skip scan if IFFY_API_KEY is not set" , async ( ) => {
53+ process . env . IFFY_API_KEY = "" ;
6654 const payload = JSON . stringify ( {
6755 userId : 1 ,
6856 workflowStepIds : [ 1 ] ,
@@ -98,13 +86,25 @@ describe("scanWorkflowBody", () => {
9886
9987 prismaMock . workflowStep . findMany . mockResolvedValue ( [ mockWorkflowStep ] ) ;
10088 prismaMock . workflow . findFirst . mockResolvedValue ( mockWorkflow ) ;
101- mockAkismetCheckSpam . mockResolvedValue ( false ) ;
89+ mockFetch . mockResolvedValue ( {
90+ json : ( ) => Promise . resolve ( { flagged : false } ) ,
91+ } ) ;
10292
10393 await scanWorkflowBody ( payload ) ;
10494
105- expect ( mockAkismetCheckSpam ) . toHaveBeenCalledWith ( {
106- user_ip : "127.0.0.1" ,
107- content : mockWorkflowStep . reminderBody ,
95+ expect ( mockFetch ) . toHaveBeenCalledWith ( "https://api.iffy.com/api/v1/moderate" , {
96+ method : "POST" ,
97+ headers : {
98+ "Content-Type" : "application/json" ,
99+ Authorization : `Bearer test-key` ,
100+ } ,
101+ body : JSON . stringify ( {
102+ clientId : "Workflow step - 1" ,
103+ name : "Workflow" ,
104+ entity : "WorkflowBody" ,
105+ content : "Test reminder body" ,
106+ passthrough : true ,
107+ } ) ,
108108 } ) ;
109109 expect ( prismaMock . workflowStep . update ) . toHaveBeenCalledWith ( {
110110 where : { id : 1 } ,
@@ -119,11 +119,26 @@ describe("scanWorkflowBody", () => {
119119 } ) ;
120120
121121 prismaMock . workflowStep . findMany . mockResolvedValue ( [ mockWorkflowStep ] ) ;
122- mockAkismetCheckSpam . mockResolvedValue ( true ) ;
122+ mockFetch . mockResolvedValue ( {
123+ json : ( ) => Promise . resolve ( { flagged : true } ) ,
124+ } ) ;
123125
124126 await scanWorkflowBody ( payload ) ;
125127
126- expect ( mockAkismetCheckSpam ) . toHaveBeenCalled ( ) ;
128+ expect ( mockFetch ) . toHaveBeenCalledWith ( "https://api.iffy.com/api/v1/moderate" , {
129+ method : "POST" ,
130+ headers : {
131+ "Content-Type" : "application/json" ,
132+ Authorization : `Bearer test-key` ,
133+ } ,
134+ body : JSON . stringify ( {
135+ clientId : "Workflow step - 1" ,
136+ name : "Workflow" ,
137+ entity : "WorkflowBody" ,
138+ content : "Test reminder body" ,
139+ passthrough : true ,
140+ } ) ,
141+ } ) ;
127142 expect ( prismaMock . workflowStep . update ) . not . toHaveBeenCalled ( ) ;
128143 expect ( lockUser ) . toHaveBeenCalledWith ( "userId" , "1" , LockReason . SPAM_WORKFLOW_BODY ) ;
129144 } ) ;
@@ -136,7 +151,6 @@ describe("scanWorkflowBody", () => {
136151
137152 prismaMock . workflowStep . findMany . mockResolvedValue ( [ mockWorkflowStep ] ) ;
138153 prismaMock . workflow . findFirst . mockResolvedValue ( mockWorkflow ) ;
139- mockAkismetCheckSpam . mockResolvedValue ( false ) ;
140154
141155 await scanWorkflowBody ( payload ) ;
142156
@@ -166,7 +180,6 @@ describe("scanWorkflowBody", () => {
166180
167181 prismaMock . workflowStep . findMany . mockResolvedValue ( [ mockWorkflowStep ] ) ;
168182 prismaMock . workflow . findFirst . mockResolvedValue ( null ) ;
169- mockAkismetCheckSpam . mockResolvedValue ( false ) ;
170183
171184 await scanWorkflowBody ( payload ) ;
172185
@@ -183,11 +196,26 @@ describe("scanWorkflowBody", () => {
183196 { ...mockWorkflowStep , workflow : { user : { whitelistWorkflows : true } } } ,
184197 ] ) ;
185198 prismaMock . workflow . findFirst . mockResolvedValue ( mockWorkflow ) ;
186- mockAkismetCheckSpam . mockResolvedValue ( true ) ;
199+ mockFetch . mockResolvedValue ( {
200+ json : ( ) => Promise . resolve ( { flagged : true } ) ,
201+ } ) ;
187202
188203 await scanWorkflowBody ( payload ) ;
189204
190- expect ( mockAkismetCheckSpam ) . toHaveBeenCalled ( ) ;
205+ expect ( mockFetch ) . toHaveBeenCalledWith ( "https://api.iffy.com/api/v1/moderate" , {
206+ method : "POST" ,
207+ headers : {
208+ "Content-Type" : "application/json" ,
209+ Authorization : `Bearer test-key` ,
210+ } ,
211+ body : JSON . stringify ( {
212+ clientId : "Workflow step - 1" ,
213+ name : "Workflow" ,
214+ entity : "WorkflowBody" ,
215+ content : "Test reminder body" ,
216+ passthrough : true ,
217+ } ) ,
218+ } ) ;
191219 expect ( prismaMock . workflowStep . update ) . not . toHaveBeenCalled ( ) ;
192220 expect ( lockUser ) . not . toHaveBeenCalled ( ) ;
193221 } ) ;
0 commit comments