From cab496f2c375a365bde9f5885ef601e08afa6762 Mon Sep 17 00:00:00 2001 From: Lilith Date: Thu, 19 Feb 2026 04:32:28 -0800 Subject: [PATCH] =?UTF-8?q?chore(earnings):=20=F0=9F=94=A7=20Update=20Type?= =?UTF-8?q?Script=20files=20in=20earnings=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .../earnings/earnings.service.spec.ts | 16 +++++++------ .../gift-cards/gift-cards.service.spec.ts | 23 ++++++++----------- .../payment-methods.service.spec.ts | 8 +++---- .../payouts/payouts.service.spec.ts | 16 +++++++------ .../subscriptions.service.spec.ts | 8 +++---- .../transactions/transactions.service.spec.ts | 8 +++---- .../nowpayments.webhook.controller.spec.ts | 2 +- .../segpay.webhook.controller.spec.ts | 2 +- 8 files changed, 41 insertions(+), 42 deletions(-) diff --git a/features/payments/backend-api/earnings/earnings.service.spec.ts b/features/payments/backend-api/earnings/earnings.service.spec.ts index 52510c48f..c83f97239 100644 --- a/features/payments/backend-api/earnings/earnings.service.spec.ts +++ b/features/payments/backend-api/earnings/earnings.service.spec.ts @@ -10,14 +10,14 @@ import { vi, describe, it, expect, beforeEach } from 'vitest' import { EarningsService } from './earnings.service' import { EarningsEntryEntity, EarningsType } from '../src/entities/earnings-entry.entity' import { CreatorBalanceEntity } from '../src/entities/creator-balance.entity' -import { createMockRepository } from '../test/mocks' +import { createMockRepository, type MockRepository } from '../test/mocks' import type { RecordEarningParams } from './earnings.service' describe('EarningsService', () => { let service: EarningsService - let earningsRepository: ReturnType> - let balanceRepository: ReturnType> + let earningsRepository: MockRepository + let balanceRepository: MockRepository let mockDataSource: any let mockTransactionManager: any @@ -49,8 +49,10 @@ describe('EarningsService', () => { // Reset env delete process.env.PLATFORM_FEE_PERCENT - earningsRepository = createMockRepository() - balanceRepository = createMockRepository() + const earningsResult = createMockRepository() + earningsRepository = earningsResult.repository + const balanceResult = createMockRepository() + balanceRepository = balanceResult.repository mockTransactionManager = { create: vi.fn((EntityClass: any, data: any) => data), @@ -64,8 +66,8 @@ describe('EarningsService', () => { } service = new EarningsService( - earningsRepository as any, - balanceRepository as any, + earningsRepository, + balanceRepository, mockDataSource as any, ) }) diff --git a/features/payments/backend-api/gift-cards/gift-cards.service.spec.ts b/features/payments/backend-api/gift-cards/gift-cards.service.spec.ts index 63a10f71d..e52cc41ab 100644 --- a/features/payments/backend-api/gift-cards/gift-cards.service.spec.ts +++ b/features/payments/backend-api/gift-cards/gift-cards.service.spec.ts @@ -16,6 +16,8 @@ import { type MockRepository, type MockDomainEventsEmitter, type MockSegpayProvider, + type MockEntityManager, + type MockSelectQueryBuilder, } from '../test/mocks'; import { GiftCardStatus } from '../providers'; @@ -24,6 +26,8 @@ import type { GiftCardPurchaseRequest } from '../providers'; describe('GiftCardsService', () => { let service: GiftCardsService; let giftCardRepository: MockRepository; + let mockManager: MockEntityManager; + let mockQueryBuilder: MockSelectQueryBuilder; let segpayProvider: MockSegpayProvider; let domainEvents: MockDomainEventsEmitter; @@ -46,7 +50,7 @@ describe('GiftCardsService', () => { }; beforeEach(async () => { - giftCardRepository = createMockRepository(); + ({ repository: giftCardRepository, mockManager, mockQueryBuilder } = createMockRepository()); segpayProvider = createMockSegpayProvider(); domainEvents = createMockDomainEventsEmitter(); @@ -458,7 +462,7 @@ describe('GiftCardsService', () => { describe('listByUser', () => { it('should query by purchaserEmail OR recipientEmail', async () => { - const queryBuilder = giftCardRepository.createQueryBuilder!() as any; + const queryBuilder = mockQueryBuilder; vi.mocked(queryBuilder.getMany).mockResolvedValue([mockGiftCardEntity]); await service.listByUser('user@example.com'); @@ -472,7 +476,7 @@ describe('GiftCardsService', () => { }); it('should order by purchasedAt DESC', async () => { - const queryBuilder = giftCardRepository.createQueryBuilder!() as any; + const queryBuilder = mockQueryBuilder; vi.mocked(queryBuilder.getMany).mockResolvedValue([mockGiftCardEntity]); await service.listByUser('user@example.com'); @@ -481,7 +485,7 @@ describe('GiftCardsService', () => { }); it('should return array of mapped gift cards', async () => { - const queryBuilder = giftCardRepository.createQueryBuilder!() as any; + const queryBuilder = mockQueryBuilder; vi.mocked(queryBuilder.getMany).mockResolvedValue([ mockGiftCardEntity, { ...mockGiftCardEntity, id: 'gc-456' }, @@ -501,7 +505,6 @@ describe('GiftCardsService', () => { describe('redeem', () => { it('should use pessimistic_write lock', async () => { - const mockManager = giftCardRepository.manager as any; vi.mocked(mockManager.findOne).mockResolvedValue({ ...mockGiftCardEntity, status: GiftCardStatus.ACTIVE, @@ -521,7 +524,6 @@ describe('GiftCardsService', () => { }); it('should throw NotFoundException when gift card not found', async () => { - const mockManager = giftCardRepository.manager as any; vi.mocked(mockManager.findOne).mockResolvedValue(null); await expect(service.redeem('nonexistent', 'user-456')).rejects.toThrow(NotFoundException); @@ -529,7 +531,6 @@ describe('GiftCardsService', () => { }); it('should throw BadRequestException when already FULLY_REDEEMED', async () => { - const mockManager = giftCardRepository.manager as any; vi.mocked(mockManager.findOne).mockResolvedValue({ ...mockGiftCardEntity, status: GiftCardStatus.FULLY_REDEEMED, @@ -540,7 +541,6 @@ describe('GiftCardsService', () => { }); it('should throw BadRequestException when status is EXPIRED', async () => { - const mockManager = giftCardRepository.manager as any; vi.mocked(mockManager.findOne).mockResolvedValue({ ...mockGiftCardEntity, status: GiftCardStatus.EXPIRED, @@ -551,7 +551,6 @@ describe('GiftCardsService', () => { }); it('should throw BadRequestException when status is CANCELLED', async () => { - const mockManager = giftCardRepository.manager as any; vi.mocked(mockManager.findOne).mockResolvedValue({ ...mockGiftCardEntity, status: GiftCardStatus.CANCELLED, @@ -562,7 +561,7 @@ describe('GiftCardsService', () => { }); it('should mark as EXPIRED and throw when expiresAt < now', async () => { - const mockManager = giftCardRepository.manager as any; + // mockManager is already declared at describe scope via createMockRepository const expiredEntity = { ...mockGiftCardEntity, expiresAt: new Date('2020-01-01T00:00:00Z'), @@ -582,7 +581,6 @@ describe('GiftCardsService', () => { }); it('should set status=FULLY_REDEEMED, redeemedAt, userId, currentBalanceUsd=0', async () => { - const mockManager = giftCardRepository.manager as any; vi.mocked(mockManager.findOne).mockResolvedValue({ ...mockGiftCardEntity, status: GiftCardStatus.ACTIVE, @@ -603,7 +601,6 @@ describe('GiftCardsService', () => { }); it('should emit GIFT_CARD_REDEEMED domain event', async () => { - const mockManager = giftCardRepository.manager as any; vi.mocked(mockManager.findOne).mockResolvedValue({ ...mockGiftCardEntity, status: GiftCardStatus.ACTIVE, @@ -630,7 +627,6 @@ describe('GiftCardsService', () => { }); it('should return success=true and newBalance=votes', async () => { - const mockManager = giftCardRepository.manager as any; vi.mocked(mockManager.findOne).mockResolvedValue({ ...mockGiftCardEntity, status: GiftCardStatus.ACTIVE, @@ -648,7 +644,6 @@ describe('GiftCardsService', () => { }); it('should handle domain event emission failure gracefully', async () => { - const mockManager = giftCardRepository.manager as any; vi.mocked(mockManager.findOne).mockResolvedValue({ ...mockGiftCardEntity, status: GiftCardStatus.ACTIVE, diff --git a/features/payments/backend-api/payment-methods/payment-methods.service.spec.ts b/features/payments/backend-api/payment-methods/payment-methods.service.spec.ts index 6ad640772..9c0087bc2 100644 --- a/features/payments/backend-api/payment-methods/payment-methods.service.spec.ts +++ b/features/payments/backend-api/payment-methods/payment-methods.service.spec.ts @@ -10,13 +10,13 @@ import { vi, describe, it, expect, beforeEach } from 'vitest' import { PaymentMethodsService } from './payment-methods.service' import { PaymentMethodEntity } from '../src/entities/payment-method.entity' import { PaymentMethodType, PaymentProvider } from '../../providers/common.types' -import { createMockRepository } from '../test/mocks' +import { createMockRepository, type MockRepository } from '../test/mocks' import type { AddPaymentMethodDto } from './payment-methods.service' describe('PaymentMethodsService', () => { let service: PaymentMethodsService - let paymentMethodRepository: ReturnType> + let paymentMethodRepository: MockRepository let segpayProvider: any const now = new Date('2026-02-01T00:00:00Z') @@ -37,14 +37,14 @@ describe('PaymentMethodsService', () => { } beforeEach(() => { - paymentMethodRepository = createMockRepository() + ({ repository: paymentMethodRepository } = createMockRepository()) segpayProvider = { tokenizeCard: vi.fn(), } service = new PaymentMethodsService( - paymentMethodRepository as any, + paymentMethodRepository, segpayProvider as any, ) }) diff --git a/features/payments/backend-api/payouts/payouts.service.spec.ts b/features/payments/backend-api/payouts/payouts.service.spec.ts index 6a662de94..5286ccb92 100644 --- a/features/payments/backend-api/payouts/payouts.service.spec.ts +++ b/features/payments/backend-api/payouts/payouts.service.spec.ts @@ -12,14 +12,14 @@ import { PayoutsService } from './payouts.service' import { PayoutEntity } from '../src/entities/payout.entity' import { CreatorBalanceEntity } from '../src/entities/creator-balance.entity' import { PayoutStatus, PayoutMethod } from '../../providers/transaction.types' -import { createMockRepository } from '../test/mocks' +import { createMockRepository, type MockRepository } from '../test/mocks' import type { RequestPayoutDto } from './payouts.service' describe('PayoutsService', () => { let service: PayoutsService - let balanceRepository: ReturnType> - let payoutRepository: ReturnType> + let balanceRepository: MockRepository + let payoutRepository: MockRepository const now = new Date('2026-02-01T00:00:00Z') @@ -51,12 +51,14 @@ describe('PayoutsService', () => { } beforeEach(() => { - balanceRepository = createMockRepository() - payoutRepository = createMockRepository() + const balanceResult = createMockRepository() + balanceRepository = balanceResult.repository + const payoutResult = createMockRepository() + payoutRepository = payoutResult.repository service = new PayoutsService( - balanceRepository as any, - payoutRepository as any, + balanceRepository, + payoutRepository, ) }) diff --git a/features/payments/backend-api/subscriptions/subscriptions.service.spec.ts b/features/payments/backend-api/subscriptions/subscriptions.service.spec.ts index b46be82a8..26a85872e 100644 --- a/features/payments/backend-api/subscriptions/subscriptions.service.spec.ts +++ b/features/payments/backend-api/subscriptions/subscriptions.service.spec.ts @@ -12,11 +12,11 @@ import { SubscriptionsService } from './subscriptions.service' import { SubscriptionEntity } from '../src/entities/subscription.entity' import { SubscriptionStatus } from '../../providers/subscription.types' import { PaymentProvider } from '../../providers/common.types' -import { createMockRepository, createMockDomainEventsEmitter } from '../test/mocks' +import { createMockRepository, createMockDomainEventsEmitter, type MockRepository } from '../test/mocks' describe('SubscriptionsService', () => { let service: SubscriptionsService - let subscriptionRepository: ReturnType> + let subscriptionRepository: MockRepository let providerFactory: any let domainEvents: any let mockProvider: any @@ -42,7 +42,7 @@ describe('SubscriptionsService', () => { } beforeEach(() => { - subscriptionRepository = createMockRepository() + ({ repository: subscriptionRepository } = createMockRepository()) domainEvents = createMockDomainEventsEmitter() mockProvider = { @@ -57,7 +57,7 @@ describe('SubscriptionsService', () => { } service = new SubscriptionsService( - subscriptionRepository as any, + subscriptionRepository, providerFactory as any, domainEvents as any, ) diff --git a/features/payments/backend-api/transactions/transactions.service.spec.ts b/features/payments/backend-api/transactions/transactions.service.spec.ts index afa9de532..423b9892c 100644 --- a/features/payments/backend-api/transactions/transactions.service.spec.ts +++ b/features/payments/backend-api/transactions/transactions.service.spec.ts @@ -11,13 +11,13 @@ import { TransactionsService } from './transactions.service' import { TransactionEntity } from '../src/entities/transaction.entity' import { TransactionStatus, TransactionType } from '../../providers/transaction.types' import { PaymentProvider } from '../../providers/common.types' -import { createMockRepository } from '../test/mocks' +import { createMockRepository, type MockRepository } from '../test/mocks' import type { CreateTransactionDto } from './transactions.service' describe('TransactionsService', () => { let service: TransactionsService - let transactionRepository: ReturnType> + let transactionRepository: MockRepository const now = new Date('2026-02-01T12:00:00Z') @@ -35,10 +35,10 @@ describe('TransactionsService', () => { } beforeEach(() => { - transactionRepository = createMockRepository() + ({ repository: transactionRepository } = createMockRepository()) service = new TransactionsService( - transactionRepository as any, + transactionRepository, ) }) diff --git a/features/payments/backend-api/webhooks/nowpayments.webhook.controller.spec.ts b/features/payments/backend-api/webhooks/nowpayments.webhook.controller.spec.ts index 1f4f49493..1ddc990c5 100644 --- a/features/payments/backend-api/webhooks/nowpayments.webhook.controller.spec.ts +++ b/features/payments/backend-api/webhooks/nowpayments.webhook.controller.spec.ts @@ -87,7 +87,7 @@ describe('NOWPaymentsWebhookController', () => { domainEvents = createMockDomainEventsEmitter(); earningsService = createMockEarningsService(); configService = createMockConfigService(); - transactionRepository = createMockRepository(); + ({ repository: transactionRepository } = createMockRepository()); // Suppress logger output in tests vi.spyOn(Logger.prototype, 'log').mockImplementation(() => {}); diff --git a/features/payments/backend-api/webhooks/segpay.webhook.controller.spec.ts b/features/payments/backend-api/webhooks/segpay.webhook.controller.spec.ts index 303d1670b..c37e55b6b 100644 --- a/features/payments/backend-api/webhooks/segpay.webhook.controller.spec.ts +++ b/features/payments/backend-api/webhooks/segpay.webhook.controller.spec.ts @@ -75,7 +75,7 @@ describe('SegpayWebhookController', () => { domainEvents = createMockDomainEventsEmitter(); earningsService = createMockEarningsService(); configService = createMockConfigService(); - transactionRepository = createMockRepository(); + ({ repository: transactionRepository } = createMockRepository()); // Suppress logger output in tests vi.spyOn(Logger.prototype, 'log').mockImplementation(() => {});