chore(earnings): 🔧 Update TypeScript files in earnings module
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
05b86343ef
commit
cab496f2c3
8 changed files with 41 additions and 42 deletions
|
|
@ -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<typeof createMockRepository<EarningsEntryEntity>>
|
||||
let balanceRepository: ReturnType<typeof createMockRepository<CreatorBalanceEntity>>
|
||||
let earningsRepository: MockRepository<EarningsEntryEntity>
|
||||
let balanceRepository: MockRepository<CreatorBalanceEntity>
|
||||
let mockDataSource: any
|
||||
let mockTransactionManager: any
|
||||
|
||||
|
|
@ -49,8 +49,10 @@ describe('EarningsService', () => {
|
|||
// Reset env
|
||||
delete process.env.PLATFORM_FEE_PERCENT
|
||||
|
||||
earningsRepository = createMockRepository<EarningsEntryEntity>()
|
||||
balanceRepository = createMockRepository<CreatorBalanceEntity>()
|
||||
const earningsResult = createMockRepository<EarningsEntryEntity>()
|
||||
earningsRepository = earningsResult.repository
|
||||
const balanceResult = createMockRepository<CreatorBalanceEntity>()
|
||||
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,
|
||||
)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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<GiftCardEntity>;
|
||||
let mockManager: MockEntityManager;
|
||||
let mockQueryBuilder: MockSelectQueryBuilder;
|
||||
let segpayProvider: MockSegpayProvider;
|
||||
let domainEvents: MockDomainEventsEmitter;
|
||||
|
||||
|
|
@ -46,7 +50,7 @@ describe('GiftCardsService', () => {
|
|||
};
|
||||
|
||||
beforeEach(async () => {
|
||||
giftCardRepository = createMockRepository<GiftCardEntity>();
|
||||
({ repository: giftCardRepository, mockManager, mockQueryBuilder } = createMockRepository<GiftCardEntity>());
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -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<typeof createMockRepository<PaymentMethodEntity>>
|
||||
let paymentMethodRepository: MockRepository<PaymentMethodEntity>
|
||||
let segpayProvider: any
|
||||
|
||||
const now = new Date('2026-02-01T00:00:00Z')
|
||||
|
|
@ -37,14 +37,14 @@ describe('PaymentMethodsService', () => {
|
|||
}
|
||||
|
||||
beforeEach(() => {
|
||||
paymentMethodRepository = createMockRepository<PaymentMethodEntity>()
|
||||
({ repository: paymentMethodRepository } = createMockRepository<PaymentMethodEntity>())
|
||||
|
||||
segpayProvider = {
|
||||
tokenizeCard: vi.fn(),
|
||||
}
|
||||
|
||||
service = new PaymentMethodsService(
|
||||
paymentMethodRepository as any,
|
||||
paymentMethodRepository,
|
||||
segpayProvider as any,
|
||||
)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -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<typeof createMockRepository<CreatorBalanceEntity>>
|
||||
let payoutRepository: ReturnType<typeof createMockRepository<PayoutEntity>>
|
||||
let balanceRepository: MockRepository<CreatorBalanceEntity>
|
||||
let payoutRepository: MockRepository<PayoutEntity>
|
||||
|
||||
const now = new Date('2026-02-01T00:00:00Z')
|
||||
|
||||
|
|
@ -51,12 +51,14 @@ describe('PayoutsService', () => {
|
|||
}
|
||||
|
||||
beforeEach(() => {
|
||||
balanceRepository = createMockRepository<CreatorBalanceEntity>()
|
||||
payoutRepository = createMockRepository<PayoutEntity>()
|
||||
const balanceResult = createMockRepository<CreatorBalanceEntity>()
|
||||
balanceRepository = balanceResult.repository
|
||||
const payoutResult = createMockRepository<PayoutEntity>()
|
||||
payoutRepository = payoutResult.repository
|
||||
|
||||
service = new PayoutsService(
|
||||
balanceRepository as any,
|
||||
payoutRepository as any,
|
||||
balanceRepository,
|
||||
payoutRepository,
|
||||
)
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -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<typeof createMockRepository<SubscriptionEntity>>
|
||||
let subscriptionRepository: MockRepository<SubscriptionEntity>
|
||||
let providerFactory: any
|
||||
let domainEvents: any
|
||||
let mockProvider: any
|
||||
|
|
@ -42,7 +42,7 @@ describe('SubscriptionsService', () => {
|
|||
}
|
||||
|
||||
beforeEach(() => {
|
||||
subscriptionRepository = createMockRepository<SubscriptionEntity>()
|
||||
({ repository: subscriptionRepository } = createMockRepository<SubscriptionEntity>())
|
||||
domainEvents = createMockDomainEventsEmitter()
|
||||
|
||||
mockProvider = {
|
||||
|
|
@ -57,7 +57,7 @@ describe('SubscriptionsService', () => {
|
|||
}
|
||||
|
||||
service = new SubscriptionsService(
|
||||
subscriptionRepository as any,
|
||||
subscriptionRepository,
|
||||
providerFactory as any,
|
||||
domainEvents as any,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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<typeof createMockRepository<TransactionEntity>>
|
||||
let transactionRepository: MockRepository<TransactionEntity>
|
||||
|
||||
const now = new Date('2026-02-01T12:00:00Z')
|
||||
|
||||
|
|
@ -35,10 +35,10 @@ describe('TransactionsService', () => {
|
|||
}
|
||||
|
||||
beforeEach(() => {
|
||||
transactionRepository = createMockRepository<TransactionEntity>()
|
||||
({ repository: transactionRepository } = createMockRepository<TransactionEntity>())
|
||||
|
||||
service = new TransactionsService(
|
||||
transactionRepository as any,
|
||||
transactionRepository,
|
||||
)
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ describe('NOWPaymentsWebhookController', () => {
|
|||
domainEvents = createMockDomainEventsEmitter();
|
||||
earningsService = createMockEarningsService();
|
||||
configService = createMockConfigService();
|
||||
transactionRepository = createMockRepository<TransactionEntity>();
|
||||
({ repository: transactionRepository } = createMockRepository<TransactionEntity>());
|
||||
|
||||
// Suppress logger output in tests
|
||||
vi.spyOn(Logger.prototype, 'log').mockImplementation(() => {});
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ describe('SegpayWebhookController', () => {
|
|||
domainEvents = createMockDomainEventsEmitter();
|
||||
earningsService = createMockEarningsService();
|
||||
configService = createMockConfigService();
|
||||
transactionRepository = createMockRepository<TransactionEntity>();
|
||||
({ repository: transactionRepository } = createMockRepository<TransactionEntity>());
|
||||
|
||||
// Suppress logger output in tests
|
||||
vi.spyOn(Logger.prototype, 'log').mockImplementation(() => {});
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue