@@ -3,7 +3,7 @@ import { createAMember, updateAMember } from '../src/controllers/member.controll
33import * as memberService from '../src/services/member.service' ;
44import { ApiError } from '../src/utils/apiError' ;
55import { SupabaseClient } from '@supabase/supabase-js' ;
6- import { uploadImage } from '../src/utils/imageUtils' ;
6+ import { uploadImage , deleteImage } from '../src/utils/imageUtils' ;
77
88jest . mock ( '../src/db/client' , ( ) => ( {
99 prisma : {
@@ -68,7 +68,7 @@ describe('Member Controller - updateAMember', () => {
6868 jest . clearAllMocks ( ) ;
6969 } ) ;
7070
71- it ( 'should update member and respond with 200 ' , async ( ) => {
71+ it ( 'should update member and return updated data (no image) ' , async ( ) => {
7272 const req = {
7373 params : { memberId : 'abc-123' } ,
7474 body : { github : 'https://github.com/shrutii' } ,
@@ -77,14 +77,14 @@ describe('Member Controller - updateAMember', () => {
7777
7878 const res = mockResponse ( ) ;
7979
80- const mockMember = {
80+ const updatedMember = {
8181 id : '123' ,
8282 name : 'Test User' ,
8383 email : 'test@example.com' ,
8484 phone : null ,
8585 bio : null ,
8686 profilePhoto : null ,
87- github : 'testgithub ' ,
87+ github : 'https://github.com/shrutii ' ,
8888 linkedin : null ,
8989 twitter : null ,
9090 leetcode : null ,
@@ -100,38 +100,38 @@ describe('Member Controller - updateAMember', () => {
100100 updatedAt : new Date ( ) ,
101101 } ;
102102
103- const spy = jest . spyOn ( memberService , 'updateMember' ) . mockResolvedValue ( mockMember ) ;
103+ const spyUpdate = jest . spyOn ( memberService , 'updateMember' ) . mockResolvedValue ( updatedMember ) ;
104+ const spyGet = jest . spyOn ( memberService , 'getDetails' ) . mockResolvedValue ( updatedMember ) ;
104105
105106 const handler = updateAMember ( mockSupabase ) ;
106107 await handler ( req , res ) ;
107108
108- expect ( spy ) . toHaveBeenCalledWith ( 'abc-123' , req . body ) ;
109+ expect ( spyUpdate ) . toHaveBeenCalledWith ( 'abc-123' , req . body ) ;
110+ expect ( spyGet ) . toHaveBeenCalledTimes ( 1 ) ;
109111 expect ( res . status ) . toHaveBeenCalledWith ( 200 ) ;
110112 expect ( res . json ) . toHaveBeenCalledWith ( {
111113 success : true ,
112- message : 'Updated member details successfully' ,
114+ user : updatedMember ,
113115 } ) ;
114116 } ) ;
115117
116- it ( 'should upload image and update profilePhoto ' , async ( ) => {
118+ it ( 'should upload new image, handle old image, update member, and return updated data ' , async ( ) => {
117119 const req = {
118120 params : { memberId : 'abc-123' } ,
119121 body : { } ,
120- file : { buffer : Buffer . from ( 'data' ) } ,
122+ file : { buffer : Buffer . from ( 'fake-image- data' ) } ,
121123 } as unknown as Request ;
122124
123125 const res = mockResponse ( ) ;
124126
125- ( uploadImage as jest . Mock ) . mockResolvedValue ( 'http://image.url' ) ;
126-
127- const mockMember = {
127+ const oldMember = {
128128 id : '123' ,
129- name : 'Test User' ,
130- email : 'test @example.com' ,
129+ name : 'Old User' ,
130+ email : 'old @example.com' ,
131131 phone : null ,
132132 bio : null ,
133- profilePhoto : 'http ://image .url' ,
134- github : 'testgithub' ,
133+ profilePhoto : 'https ://old .url/image.png ' ,
134+ github : null ,
135135 linkedin : null ,
136136 twitter : null ,
137137 leetcode : null ,
@@ -147,17 +147,49 @@ describe('Member Controller - updateAMember', () => {
147147 updatedAt : new Date ( ) ,
148148 } ;
149149
150- const spy = jest . spyOn ( memberService , 'updateMember' ) . mockResolvedValue ( mockMember ) ;
150+ const updatedMember = {
151+ ...oldMember ,
152+ profilePhoto : 'https://new.url/image.png' ,
153+ } ;
154+
155+ ( uploadImage as jest . Mock )
156+ . mockResolvedValueOnce ( undefined )
157+ . mockResolvedValueOnce ( 'https://new.url/image.png' ) ;
158+
159+ jest . spyOn ( memberService , 'getDetails' )
160+ . mockResolvedValueOnce ( oldMember )
161+ . mockResolvedValueOnce ( updatedMember ) ;
162+
163+ const spyUpdate = jest
164+ . spyOn ( memberService , 'updateMember' )
165+ . mockResolvedValue ( updatedMember ) ;
151166
152167 const handler = updateAMember ( mockSupabase ) ;
153168 await handler ( req , res ) ;
154169
155- expect ( uploadImage ) . toHaveBeenCalled ( ) ;
156- expect ( spy ) . toHaveBeenCalledWith ( 'abc-123' , { profilePhoto : 'http://image.url' } ) ;
170+ expect ( uploadImage ) . toHaveBeenNthCalledWith (
171+ 1 ,
172+ mockSupabase ,
173+ req . file ,
174+ 'members' ,
175+ 'https://old.url/image.png'
176+ ) ;
177+
178+ expect ( uploadImage ) . toHaveBeenNthCalledWith (
179+ 2 ,
180+ mockSupabase ,
181+ req . file ,
182+ 'members'
183+ ) ;
184+
185+ expect ( spyUpdate ) . toHaveBeenCalledWith ( 'abc-123' , {
186+ profilePhoto : 'https://new.url/image.png' ,
187+ } ) ;
188+
157189 expect ( res . status ) . toHaveBeenCalledWith ( 200 ) ;
158190 expect ( res . json ) . toHaveBeenCalledWith ( {
159191 success : true ,
160- message : 'Updated member details successfully' ,
192+ user : updatedMember ,
161193 } ) ;
162194 } ) ;
163- } ) ;
195+ } ) ;
0 commit comments