jest.mock('shared/supabase/init') jest.mock('shared/supabase/users') jest.mock('shared/supabase/utils') import * as blockUserModule from 'api/block-user' import {AuthedUser} from 'api/helpers/endpoint' import * as supabaseInit from 'shared/supabase/init' import * as supabaseUsers from 'shared/supabase/users' import * as supabaseUtils from 'shared/supabase/utils' describe('blockUser', () => { let mockPg: any beforeEach(() => { jest.resetAllMocks() mockPg = { tx: jest.fn(async (cb) => { const mockTx = {} await cb(mockTx) }), } ;(supabaseInit.createSupabaseDirectClient as jest.Mock).mockReturnValue(mockPg) }) afterEach(() => { jest.restoreAllMocks() }) describe('when given valid input', () => { it('block the user successfully', async () => { const mockParams = {id: '123'} const mockAuth = {uid: '321'} as AuthedUser const mockReq = {} as any await blockUserModule.blockUser(mockParams, mockAuth, mockReq) expect(mockPg.tx).toHaveBeenCalledTimes(1) expect(supabaseUsers.updatePrivateUser).toBeCalledTimes(2) expect(supabaseUsers.updatePrivateUser).toHaveBeenNthCalledWith( 1, expect.any(Object), mockAuth.uid, {blockedByUserIds: supabaseUtils.FieldVal.arrayConcat(mockParams.id)}, ) expect(supabaseUsers.updatePrivateUser).toHaveBeenNthCalledWith( 2, expect.any(Object), mockParams.id, {blockedByUserIds: supabaseUtils.FieldVal.arrayConcat(mockAuth.uid)}, ) }) }) describe('when an error occurs', () => { it('throw an error if the user tries to block themselves', async () => { const mockParams = {id: '123'} const mockAuth = {uid: '123'} as AuthedUser const mockReq = {} as any expect(blockUserModule.blockUser(mockParams, mockAuth, mockReq)).rejects.toThrowError( 'You cannot block yourself', ) }) }) }) describe('unblockUser', () => { let mockPg: any beforeEach(() => { jest.resetAllMocks() mockPg = { tx: jest.fn(async (cb) => { const mockTx = {} await cb(mockTx) }), } ;(supabaseInit.createSupabaseDirectClient as jest.Mock).mockReturnValue(mockPg) }) afterEach(() => { jest.restoreAllMocks() }) describe('when given valid input', () => { it('should block the user successfully', async () => { const mockParams = {id: '123'} const mockAuth = {uid: '321'} as AuthedUser const mockReq = {} as any await blockUserModule.unblockUser(mockParams, mockAuth, mockReq) expect(mockPg.tx).toHaveBeenCalledTimes(1) expect(supabaseUsers.updatePrivateUser).toBeCalledTimes(2) expect(supabaseUsers.updatePrivateUser).toHaveBeenNthCalledWith( 1, expect.any(Object), mockAuth.uid, {blockedByUserIds: supabaseUtils.FieldVal.arrayConcat(mockParams.id)}, ) expect(supabaseUsers.updatePrivateUser).toHaveBeenNthCalledWith( 2, expect.any(Object), mockParams.id, {blockedByUserIds: supabaseUtils.FieldVal.arrayConcat(mockAuth.uid)}, ) }) }) })