Bladeren bron

fix: change response type to html for muting marketing emails

Karol Sójko 3 jaren geleden
bovenliggende
commit
ba373ebc6b

+ 15 - 8
packages/auth/src/Controller/InternalController.spec.ts

@@ -19,6 +19,7 @@ describe('InternalController', () => {
   let muteMarketingEmails: MuteMarketingEmails
 
   let request: express.Request
+  let response: express.Response
   let user: User
 
   const createController = () =>
@@ -48,6 +49,11 @@ describe('InternalController', () => {
       body: {},
       params: {},
     } as jest.Mocked<express.Request>
+
+    response = {} as jest.Mocked<express.Response>
+    response.setHeader = jest.fn()
+    response.status = jest.fn().mockReturnThis()
+    response.send = jest.fn()
   })
 
   it('should get user features', async () => {
@@ -170,26 +176,27 @@ describe('InternalController', () => {
   it('should mute marketing emails user setting', async () => {
     request.params.settingUuid = '1-2-3'
 
-    muteMarketingEmails.execute = jest.fn().mockReturnValue({ success: true })
+    muteMarketingEmails.execute = jest.fn().mockReturnValue({ success: true, message: 'foobar' })
 
-    const httpResponse = <results.JsonResult>await createController().muteMarketingEmails(request)
-    const result = await httpResponse.executeAsync()
+    await createController().muteMarketingEmails(request, response)
 
     expect(muteMarketingEmails.execute).toHaveBeenCalledWith({ settingUuid: '1-2-3' })
 
-    expect(result.statusCode).toEqual(200)
+    expect(response.setHeader).toHaveBeenCalledWith('content-type', 'text/html')
+    expect(response.send).toHaveBeenCalledWith('foobar')
   })
 
   it('should not mute marketing emails user setting if it does not exist', async () => {
     request.params.settingUuid = '1-2-3'
 
-    muteMarketingEmails.execute = jest.fn().mockReturnValue({ success: false })
+    muteMarketingEmails.execute = jest.fn().mockReturnValue({ success: false, message: 'foobar' })
 
-    const httpResponse = <results.JsonResult>await createController().muteMarketingEmails(request)
-    const result = await httpResponse.executeAsync()
+    await createController().muteMarketingEmails(request, response)
 
     expect(muteMarketingEmails.execute).toHaveBeenCalledWith({ settingUuid: '1-2-3' })
 
-    expect(result.statusCode).toEqual(404)
+    expect(response.setHeader).toHaveBeenCalledWith('content-type', 'text/html')
+    expect(response.status).toHaveBeenCalledWith(404)
+    expect(response.send).toHaveBeenCalledWith('foobar')
   })
 })

+ 8 - 4
packages/auth/src/Controller/InternalController.ts

@@ -1,4 +1,4 @@
-import { Request } from 'express'
+import { Request, Response } from 'express'
 import { inject } from 'inversify'
 import {
   BaseHttpController,
@@ -84,16 +84,20 @@ export class InternalController extends BaseHttpController {
   }
 
   @httpGet('/settings/marketing-emails/:settingUuid/mute')
-  async muteMarketingEmails(request: Request): Promise<results.JsonResult> {
+  async muteMarketingEmails(request: Request, response: Response): Promise<void> {
     const { settingUuid } = request.params
     const result = await this.doMuteMarketingEmails.execute({
       settingUuid,
     })
 
+    response.setHeader('content-type', 'text/html')
+
     if (result.success) {
-      return this.json({ message: result.message })
+      response.send(result.message)
+
+      return
     }
 
-    return this.json({ message: result.message }, 404)
+    response.status(404).send(result.message)
   }
 }