@@ -405,4 +405,55 @@ describe('UserController', () => {
405405 expect ( mockResponse . redirect ) . not . toHaveBeenCalled ( ) ;
406406 } ) ;
407407 } ) ;
408+
409+ describe ( 'unsubscribeNewsletter' , ( ) => {
410+ beforeEach ( ( ) => {
411+ mockRequest . query = { } ;
412+ mockResponse . redirect = jest . fn ( ) . mockReturnThis ( ) ;
413+ } ) ;
414+
415+ it ( '이메일이 없으면 메인 페이지로 리다이렉트해야 한다' , async ( ) => {
416+ mockRequest . query = { } ;
417+
418+ await userController . unsubscribeNewsletter (
419+ mockRequest as Request ,
420+ mockResponse as Response ,
421+ nextFunction
422+ ) ;
423+
424+ expect ( mockUserService . unsubscribeNewsletter ) . not . toHaveBeenCalled ( ) ;
425+ expect ( mockResponse . redirect ) . toHaveBeenCalledWith ( '/main' ) ;
426+ expect ( nextFunction ) . not . toHaveBeenCalled ( ) ;
427+ } ) ;
428+
429+ it ( '잘못된 이메일 형식이면 메인 페이지로 리다이렉트해야 한다' , async ( ) => {
430+ mockRequest . query = { email : 'invalid-email' } ;
431+
432+ await userController . unsubscribeNewsletter (
433+ mockRequest as Request ,
434+ mockResponse as Response ,
435+ nextFunction
436+ ) ;
437+
438+ expect ( mockUserService . unsubscribeNewsletter ) . not . toHaveBeenCalled ( ) ;
439+ expect ( mockResponse . redirect ) . toHaveBeenCalledWith ( '/main' ) ;
440+ expect ( nextFunction ) . not . toHaveBeenCalled ( ) ;
441+ } ) ;
442+
443+ it ( '구독 해제 완료시 메인 페이지로 리다이렉트해야 한다' , async ( ) => {
444+ const email = '[email protected] ' ; 445+ mockRequest . query = { email } ;
446+ mockUserService . unsubscribeNewsletter . mockResolvedValue ( undefined ) ;
447+
448+ await userController . unsubscribeNewsletter (
449+ mockRequest as Request ,
450+ mockResponse as Response ,
451+ nextFunction
452+ ) ;
453+
454+ expect ( mockUserService . unsubscribeNewsletter ) . toHaveBeenCalledWith ( email ) ;
455+ expect ( mockResponse . redirect ) . toHaveBeenCalledWith ( '/main' ) ;
456+ expect ( nextFunction ) . not . toHaveBeenCalled ( ) ;
457+ } ) ;
458+ } ) ;
408459} ) ;
0 commit comments