module cleanup
This commit is contained in:
258
apps/api/src/domain/sponsor/SponsorService.test.ts
Normal file
258
apps/api/src/domain/sponsor/SponsorService.test.ts
Normal file
@@ -0,0 +1,258 @@
|
||||
import { describe, it, expect, beforeEach, vi, Mock } from 'vitest';
|
||||
import { SponsorService } from './SponsorService';
|
||||
import type { GetSponsorshipPricingUseCase } from '@core/racing/application/use-cases/GetSponsorshipPricingUseCase';
|
||||
import type { GetSponsorsUseCase } from '@core/racing/application/use-cases/GetSponsorsUseCase';
|
||||
import type { CreateSponsorUseCase } from '@core/racing/application/use-cases/CreateSponsorUseCase';
|
||||
import type { GetSponsorDashboardUseCase } from '@core/racing/application/use-cases/GetSponsorDashboardUseCase';
|
||||
import type { GetSponsorSponsorshipsUseCase } from '@core/racing/application/use-cases/GetSponsorSponsorshipsUseCase';
|
||||
import type { GetSponsorUseCase } from '@core/racing/application/use-cases/GetSponsorUseCase';
|
||||
import type { GetPendingSponsorshipRequestsUseCase } from '@core/racing/application/use-cases/GetPendingSponsorshipRequestsUseCase';
|
||||
import type { AcceptSponsorshipRequestUseCase } from '@core/racing/application/use-cases/AcceptSponsorshipRequestUseCase';
|
||||
import type { RejectSponsorshipRequestUseCase } from '@core/racing/application/use-cases/RejectSponsorshipRequestUseCase';
|
||||
import type { Logger } from '@core/shared/application';
|
||||
import { Result } from '@core/shared/application/Result';
|
||||
|
||||
describe('SponsorService', () => {
|
||||
let service: SponsorService;
|
||||
let getSponsorshipPricingUseCase: { execute: Mock };
|
||||
let getSponsorsUseCase: { execute: Mock };
|
||||
let createSponsorUseCase: { execute: Mock };
|
||||
let getSponsorDashboardUseCase: { execute: Mock };
|
||||
let getSponsorSponsorshipsUseCase: { execute: Mock };
|
||||
let getSponsorUseCase: { execute: Mock };
|
||||
let getPendingSponsorshipRequestsUseCase: { execute: Mock };
|
||||
let acceptSponsorshipRequestUseCase: { execute: Mock };
|
||||
let rejectSponsorshipRequestUseCase: { execute: Mock };
|
||||
let logger: {
|
||||
debug: Mock;
|
||||
info: Mock;
|
||||
warn: Mock;
|
||||
error: Mock;
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
getSponsorshipPricingUseCase = { execute: vi.fn() };
|
||||
getSponsorsUseCase = { execute: vi.fn() };
|
||||
createSponsorUseCase = { execute: vi.fn() };
|
||||
getSponsorDashboardUseCase = { execute: vi.fn() };
|
||||
getSponsorSponsorshipsUseCase = { execute: vi.fn() };
|
||||
getSponsorUseCase = { execute: vi.fn() };
|
||||
getPendingSponsorshipRequestsUseCase = { execute: vi.fn() };
|
||||
acceptSponsorshipRequestUseCase = { execute: vi.fn() };
|
||||
rejectSponsorshipRequestUseCase = { execute: vi.fn() };
|
||||
logger = {
|
||||
debug: vi.fn(),
|
||||
info: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
error: vi.fn(),
|
||||
};
|
||||
|
||||
service = new SponsorService(
|
||||
getSponsorshipPricingUseCase as unknown as GetSponsorshipPricingUseCase,
|
||||
getSponsorsUseCase as unknown as GetSponsorsUseCase,
|
||||
createSponsorUseCase as unknown as CreateSponsorUseCase,
|
||||
getSponsorDashboardUseCase as unknown as GetSponsorDashboardUseCase,
|
||||
getSponsorSponsorshipsUseCase as unknown as GetSponsorSponsorshipsUseCase,
|
||||
getSponsorUseCase as unknown as GetSponsorUseCase,
|
||||
getPendingSponsorshipRequestsUseCase as unknown as GetPendingSponsorshipRequestsUseCase,
|
||||
acceptSponsorshipRequestUseCase as unknown as AcceptSponsorshipRequestUseCase,
|
||||
rejectSponsorshipRequestUseCase as unknown as RejectSponsorshipRequestUseCase,
|
||||
logger as unknown as Logger,
|
||||
);
|
||||
});
|
||||
|
||||
describe('getEntitySponsorshipPricing', () => {
|
||||
it('should return sponsorship pricing', async () => {
|
||||
const mockPresenter = {
|
||||
viewModel: { entityType: 'season', entityId: 'season-1', pricing: [] },
|
||||
};
|
||||
getSponsorshipPricingUseCase.execute.mockResolvedValue(undefined);
|
||||
|
||||
// Mock the presenter
|
||||
const originalGetSponsorshipPricingPresenter = await import('./presenters/GetSponsorshipPricingPresenter');
|
||||
const mockPresenterClass = vi.fn().mockImplementation(() => mockPresenter);
|
||||
vi.doMock('./presenters/GetSponsorshipPricingPresenter', () => ({
|
||||
GetSponsorshipPricingPresenter: mockPresenterClass,
|
||||
}));
|
||||
|
||||
const result = await service.getEntitySponsorshipPricing();
|
||||
|
||||
expect(result).toEqual(mockPresenter.viewModel);
|
||||
expect(getSponsorshipPricingUseCase.execute).toHaveBeenCalledWith(undefined, mockPresenter);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getSponsors', () => {
|
||||
it('should return sponsors list', async () => {
|
||||
const mockPresenter = {
|
||||
viewModel: { sponsors: [] },
|
||||
};
|
||||
getSponsorsUseCase.execute.mockResolvedValue(undefined);
|
||||
|
||||
const result = await service.getSponsors();
|
||||
|
||||
expect(result).toEqual(mockPresenter.viewModel);
|
||||
expect(getSponsorsUseCase.execute).toHaveBeenCalledWith(undefined, expect.any(Object));
|
||||
});
|
||||
});
|
||||
|
||||
describe('createSponsor', () => {
|
||||
it('should create sponsor successfully', async () => {
|
||||
const input = { name: 'Test Sponsor', contactEmail: 'test@example.com' };
|
||||
const mockPresenter = {
|
||||
viewModel: { id: 'sponsor-1', name: 'Test Sponsor' },
|
||||
};
|
||||
createSponsorUseCase.execute.mockResolvedValue(undefined);
|
||||
|
||||
const result = await service.createSponsor(input);
|
||||
|
||||
expect(result).toEqual(mockPresenter.viewModel);
|
||||
expect(createSponsorUseCase.execute).toHaveBeenCalledWith(input, expect.any(Object));
|
||||
});
|
||||
});
|
||||
|
||||
describe('getSponsorDashboard', () => {
|
||||
it('should return sponsor dashboard', async () => {
|
||||
const params = { sponsorId: 'sponsor-1' };
|
||||
const mockPresenter = {
|
||||
viewModel: { sponsorId: 'sponsor-1', metrics: {}, sponsoredLeagues: [] },
|
||||
};
|
||||
getSponsorDashboardUseCase.execute.mockResolvedValue(undefined);
|
||||
|
||||
const result = await service.getSponsorDashboard(params);
|
||||
|
||||
expect(result).toEqual(mockPresenter.viewModel);
|
||||
expect(getSponsorDashboardUseCase.execute).toHaveBeenCalledWith(params, expect.any(Object));
|
||||
});
|
||||
});
|
||||
|
||||
describe('getSponsorSponsorships', () => {
|
||||
it('should return sponsor sponsorships', async () => {
|
||||
const params = { sponsorId: 'sponsor-1' };
|
||||
const mockPresenter = {
|
||||
viewModel: { sponsorId: 'sponsor-1', sponsorships: [] },
|
||||
};
|
||||
getSponsorSponsorshipsUseCase.execute.mockResolvedValue(undefined);
|
||||
|
||||
const result = await service.getSponsorSponsorships(params);
|
||||
|
||||
expect(result).toEqual(mockPresenter.viewModel);
|
||||
expect(getSponsorSponsorshipsUseCase.execute).toHaveBeenCalledWith(params, expect.any(Object));
|
||||
});
|
||||
});
|
||||
|
||||
describe('getSponsor', () => {
|
||||
it('should return sponsor when found', async () => {
|
||||
const sponsorId = 'sponsor-1';
|
||||
const mockSponsor = { id: sponsorId, name: 'Test Sponsor' };
|
||||
getSponsorUseCase.execute.mockResolvedValue(Result.ok(mockSponsor));
|
||||
|
||||
const result = await service.getSponsor(sponsorId);
|
||||
|
||||
expect(result).toEqual(mockSponsor);
|
||||
expect(getSponsorUseCase.execute).toHaveBeenCalledWith({ sponsorId });
|
||||
});
|
||||
|
||||
it('should return null when sponsor not found', async () => {
|
||||
const sponsorId = 'sponsor-1';
|
||||
getSponsorUseCase.execute.mockResolvedValue(Result.err({ code: 'NOT_FOUND' }));
|
||||
|
||||
const result = await service.getSponsor(sponsorId);
|
||||
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('getPendingSponsorshipRequests', () => {
|
||||
it('should return pending sponsorship requests', async () => {
|
||||
const params = { entityType: 'season' as const, entityId: 'season-1' };
|
||||
const mockResult = {
|
||||
entityType: 'season',
|
||||
entityId: 'season-1',
|
||||
requests: [],
|
||||
totalCount: 0,
|
||||
};
|
||||
getPendingSponsorshipRequestsUseCase.execute.mockResolvedValue(Result.ok(mockResult));
|
||||
|
||||
const result = await service.getPendingSponsorshipRequests(params);
|
||||
|
||||
expect(result).toEqual(mockResult);
|
||||
expect(getPendingSponsorshipRequestsUseCase.execute).toHaveBeenCalledWith(params);
|
||||
});
|
||||
|
||||
it('should return empty result on error', async () => {
|
||||
const params = { entityType: 'season' as const, entityId: 'season-1' };
|
||||
getPendingSponsorshipRequestsUseCase.execute.mockResolvedValue(Result.err({ code: 'REPOSITORY_ERROR' }));
|
||||
|
||||
const result = await service.getPendingSponsorshipRequests(params);
|
||||
|
||||
expect(result).toEqual({
|
||||
entityType: 'season',
|
||||
entityId: 'season-1',
|
||||
requests: [],
|
||||
totalCount: 0,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('acceptSponsorshipRequest', () => {
|
||||
it('should accept sponsorship request successfully', async () => {
|
||||
const requestId = 'request-1';
|
||||
const respondedBy = 'user-1';
|
||||
const mockResult = {
|
||||
requestId,
|
||||
sponsorshipId: 'sponsorship-1',
|
||||
status: 'accepted' as const,
|
||||
acceptedAt: new Date(),
|
||||
platformFee: 10,
|
||||
netAmount: 90,
|
||||
};
|
||||
acceptSponsorshipRequestUseCase.execute.mockResolvedValue(Result.ok(mockResult));
|
||||
|
||||
const result = await service.acceptSponsorshipRequest(requestId, respondedBy);
|
||||
|
||||
expect(result).toEqual(mockResult);
|
||||
expect(acceptSponsorshipRequestUseCase.execute).toHaveBeenCalledWith({ requestId, respondedBy });
|
||||
});
|
||||
|
||||
it('should return null on error', async () => {
|
||||
const requestId = 'request-1';
|
||||
const respondedBy = 'user-1';
|
||||
acceptSponsorshipRequestUseCase.execute.mockResolvedValue(Result.err({ code: 'NOT_FOUND' }));
|
||||
|
||||
const result = await service.acceptSponsorshipRequest(requestId, respondedBy);
|
||||
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('rejectSponsorshipRequest', () => {
|
||||
it('should reject sponsorship request successfully', async () => {
|
||||
const requestId = 'request-1';
|
||||
const respondedBy = 'user-1';
|
||||
const reason = 'Not interested';
|
||||
const mockResult = {
|
||||
requestId,
|
||||
status: 'rejected' as const,
|
||||
rejectedAt: new Date(),
|
||||
reason,
|
||||
};
|
||||
rejectSponsorshipRequestUseCase.execute.mockResolvedValue(Result.ok(mockResult));
|
||||
|
||||
const result = await service.rejectSponsorshipRequest(requestId, respondedBy, reason);
|
||||
|
||||
expect(result).toEqual(mockResult);
|
||||
expect(rejectSponsorshipRequestUseCase.execute).toHaveBeenCalledWith({ requestId, respondedBy, reason });
|
||||
});
|
||||
|
||||
it('should return null on error', async () => {
|
||||
const requestId = 'request-1';
|
||||
const respondedBy = 'user-1';
|
||||
rejectSponsorshipRequestUseCase.execute.mockResolvedValue(Result.err({ code: 'NOT_FOUND' }));
|
||||
|
||||
const result = await service.rejectSponsorshipRequest(requestId, respondedBy);
|
||||
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user