view data fixes
This commit is contained in:
134
apps/website/lib/page-queries/auth/SignupPageQuery.test.ts
Normal file
134
apps/website/lib/page-queries/auth/SignupPageQuery.test.ts
Normal file
@@ -0,0 +1,134 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { SignupPageQuery } from './SignupPageQuery';
|
||||
import { AuthPageService } from '@/lib/services/auth/AuthPageService';
|
||||
import { Result } from '@/lib/contracts/Result';
|
||||
import { SignupViewDataBuilder } from '@/lib/builders/view-data/SignupViewDataBuilder';
|
||||
import { SearchParamParser } from '@/lib/routing/search-params/SearchParamParser';
|
||||
|
||||
// Mock dependencies
|
||||
const mockProcessForgotPasswordParams = vi.fn();
|
||||
const mockProcessLoginParams = vi.fn();
|
||||
const mockProcessResetPasswordParams = vi.fn();
|
||||
const mockProcessSignupParams = vi.fn();
|
||||
vi.mock('@/lib/services/auth/AuthPageService', () => {
|
||||
return {
|
||||
AuthPageService: class {
|
||||
processForgotPasswordParams = mockProcessForgotPasswordParams;
|
||||
processLoginParams = mockProcessLoginParams;
|
||||
processResetPasswordParams = mockProcessResetPasswordParams;
|
||||
processSignupParams = mockProcessSignupParams;
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
vi.mock('@/lib/routing/search-params/SearchParamParser', () => ({
|
||||
SearchParamParser: {
|
||||
parseAuth: vi.fn(),
|
||||
},
|
||||
}));
|
||||
|
||||
vi.mock('@/lib/builders/view-data/SignupViewDataBuilder', () => ({
|
||||
SignupViewDataBuilder: {
|
||||
build: vi.fn(),
|
||||
},
|
||||
}));
|
||||
|
||||
describe('SignupPageQuery', () => {
|
||||
let query: SignupPageQuery;
|
||||
let mockServiceInstance: any;
|
||||
let mockSearchParams: URLSearchParams;
|
||||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
mockServiceInstance = {
|
||||
processSignupParams: mockProcessSignupParams,
|
||||
};
|
||||
query = new SignupPageQuery(mockServiceInstance as any);
|
||||
mockSearchParams = new URLSearchParams('returnTo=/dashboard&token=signup456');
|
||||
});
|
||||
|
||||
it('should return view data when search params are valid and service succeeds', async () => {
|
||||
const parsedParams = { returnTo: '/dashboard', token: 'signup456' };
|
||||
const serviceOutput = { email: 'newuser@example.com' };
|
||||
const viewData = { email: 'newuser@example.com', returnTo: '/dashboard' };
|
||||
|
||||
(SearchParamParser.parseAuth as any).mockReturnValue(Result.ok(parsedParams));
|
||||
mockServiceInstance.processSignupParams.mockResolvedValue(Result.ok(serviceOutput));
|
||||
(SignupViewDataBuilder.build as any).mockReturnValue(viewData);
|
||||
|
||||
const result = await query.execute(mockSearchParams);
|
||||
|
||||
expect(result.isOk()).toBe(true);
|
||||
expect(result.unwrap()).toEqual(viewData);
|
||||
expect(SearchParamParser.parseAuth).toHaveBeenCalledWith(mockSearchParams);
|
||||
expect(mockServiceInstance.processSignupParams).toHaveBeenCalledWith(parsedParams);
|
||||
expect(SignupViewDataBuilder.build).toHaveBeenCalledWith(serviceOutput);
|
||||
});
|
||||
|
||||
it('should return error when search params are invalid', async () => {
|
||||
(SearchParamParser.parseAuth as any).mockReturnValue(Result.err('Invalid params'));
|
||||
|
||||
const result = await query.execute(mockSearchParams);
|
||||
|
||||
expect(result.isErr()).toBe(true);
|
||||
expect(result.getError()).toBe('Invalid search parameters: Invalid params');
|
||||
});
|
||||
|
||||
it('should return error when service fails', async () => {
|
||||
const parsedParams = { returnTo: '/dashboard', token: 'signup456' };
|
||||
|
||||
(SearchParamParser.parseAuth as any).mockReturnValue(Result.ok(parsedParams));
|
||||
mockServiceInstance.processSignupParams.mockResolvedValue(
|
||||
Result.err({ message: 'Service error' })
|
||||
);
|
||||
|
||||
const result = await query.execute(mockSearchParams);
|
||||
|
||||
expect(result.isErr()).toBe(true);
|
||||
expect(result.getError()).toBe('Service error');
|
||||
});
|
||||
|
||||
it('should return error on exception', async () => {
|
||||
const parsedParams = { returnTo: '/dashboard', token: 'signup456' };
|
||||
|
||||
(SearchParamParser.parseAuth as any).mockReturnValue(Result.ok(parsedParams));
|
||||
mockServiceInstance.processSignupParams.mockRejectedValue(new Error('Unexpected error'));
|
||||
|
||||
const result = await query.execute(mockSearchParams);
|
||||
|
||||
expect(result.isErr()).toBe(true);
|
||||
expect(result.getError()).toBe('Unexpected error');
|
||||
});
|
||||
|
||||
it('should provide a static execute method', async () => {
|
||||
const parsedParams = { returnTo: '/dashboard', token: 'signup456' };
|
||||
const serviceOutput = { email: 'newuser@example.com' };
|
||||
const viewData = { email: 'newuser@example.com', returnTo: '/dashboard' };
|
||||
|
||||
(SearchParamParser.parseAuth as any).mockReturnValue(Result.ok(parsedParams));
|
||||
mockServiceInstance.processSignupParams.mockResolvedValue(Result.ok(serviceOutput));
|
||||
(SignupViewDataBuilder.build as any).mockReturnValue(viewData);
|
||||
|
||||
const result = await SignupPageQuery.execute(mockSearchParams);
|
||||
|
||||
expect(result.isOk()).toBe(true);
|
||||
expect(result.unwrap()).toEqual(viewData);
|
||||
});
|
||||
|
||||
it('should handle Record<string, string | string[] | undefined> input', async () => {
|
||||
const recordParams = { returnTo: '/dashboard', token: 'signup456' };
|
||||
const parsedParams = { returnTo: '/dashboard', token: 'signup456' };
|
||||
const serviceOutput = { email: 'newuser@example.com' };
|
||||
const viewData = { email: 'newuser@example.com', returnTo: '/dashboard' };
|
||||
|
||||
(SearchParamParser.parseAuth as any).mockReturnValue(Result.ok(parsedParams));
|
||||
mockServiceInstance.processSignupParams.mockResolvedValue(Result.ok(serviceOutput));
|
||||
(SignupViewDataBuilder.build as any).mockReturnValue(viewData);
|
||||
|
||||
const result = await query.execute(recordParams);
|
||||
|
||||
expect(result.isOk()).toBe(true);
|
||||
expect(result.unwrap()).toEqual(viewData);
|
||||
expect(SearchParamParser.parseAuth).toHaveBeenCalledWith(recordParams);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user