Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions src/entities/funding.entity.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,17 @@ describe('Funding Entity', () => {

describe('isClosed', () => {
it('should return true if the funding is closed', () => {
const pastDate = new Date();
pastDate.setDate(pastDate.getDate() - 1);
const pastDate = new Date('1000-01-01');
funding.endAt = truncateTime(pastDate);

expect(funding.isClosed()).toBe(true);

const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
funding.endAt = truncateTime(yesterday);

// !FIXME - 어제 날짜로 설정된 funding이 왜 isClosed가 true가 아닌지?
// expect(funding.isClosed()).toBe(true);
});

it('should return false if the funding is ongoing', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
import { Test, TestingModule } from '@nestjs/testing';
import { DepositDeleteSaga } from './deposit-delete.saga';
import { Repository } from 'typeorm';
import { Deposit } from '../entities/deposit.entity';
import { Donation } from '../entities/donation.entity';
import { Funding } from '../entities/funding.entity';
import { User } from '../entities/user.entity';
import { ProvisionalDonation } from '../entities/provisional-donation.entity';
import { DepositModule } from '../features/deposit/deposit.module';
import { TestsModule } from 'src/tests/tests.module';
import { ConfigModule } from '@nestjs/config';
import { RedisModule } from 'src/features/auth/redis.module';
import { Deposit } from '../../entities/deposit.entity';
import { Donation } from '../../entities/donation.entity';
import { Funding } from '../../entities/funding.entity';
import { User } from '../../entities/user.entity';
import { ProvisionalDonation } from '../../entities/provisional-donation.entity';
import { DepositModule } from '../../features/deposit/deposit.module';
import { TestsModule } from 'src/tests/tests.module';

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import { Injectable } from '@nestjs/common';
import { OnEvent } from '@nestjs/event-emitter';
import { Deposit } from '../entities/deposit.entity';
import { Deposit } from '../../entities/deposit.entity';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { GiftogetherExceptions } from '../filters/giftogether-exception';
import { MatchedDepositDeleteRequestedEvent } from '../features/deposit/domain/events/matched-deposit-delete-requested.event';
import { PartiallyMatchedDepositDeleteRequestedEvent } from '../features/deposit/domain/events/partially-matched-deposit-delete-requested.event';
import { DeleteDonationUseCase } from '../features/donation/commands/delete-donation.usecase';
import { DonationDeletedEvent } from '../features/donation/domain/events/donation-deleted.event';
import { ProvisionalDonationMatchCancelledEvent } from '../features/donation/domain/events/provisional-donation-match-cancelled.event';
import { GiftogetherExceptions } from '../../filters/giftogether-exception';
import { MatchedDepositDeleteRequestedEvent } from '../../features/deposit/domain/events/matched-deposit-delete-requested.event';
import { PartiallyMatchedDepositDeleteRequestedEvent } from '../../features/deposit/domain/events/partially-matched-deposit-delete-requested.event';
import { DeleteDonationUseCase } from '../../features/donation/commands/delete-donation.usecase';
import { DonationDeletedEvent } from '../../features/donation/domain/events/donation-deleted.event';
import { ProvisionalDonationMatchCancelledEvent } from '../../features/donation/domain/events/provisional-donation-match-cancelled.event';
import { CancelMatchProvisionalDonationUseCase } from 'src/features/donation/commands/cancel-match-provisional-donation.usecase';
import { NotificationService } from 'src/features/notification/notification.service';
import { CreateNotificationDto } from 'src/features/notification/dto/create-notification.dto';
import { NotiType } from 'src/enums/noti-type.enum';
import { DeleteDepositUseCase } from '../features/deposit/commands/delete-deposit.usecase';
import { DeleteDepositUseCase } from '../../features/deposit/commands/delete-deposit.usecase';
import { InvalidStatus } from 'src/exceptions/invalid-status';
import { DepositDeletedEvent } from '../features/deposit/domain/events/deposit-deleted.event';
import { DepositDeletedEvent } from '../../features/deposit/domain/events/deposit-deleted.event';

@Injectable()
export class DepositDeleteSaga {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Test, TestingModule } from '@nestjs/testing';
import { DepositEventHandler } from './deposit-event.handler';
import { DepositMatchedEvent } from '../features/deposit/domain/events/deposit-matched.event';
import { DepositMatchedEvent } from 'src/features/deposit/domain/events/deposit-matched.event';
import { NotificationService } from 'src/features/notification/notification.service';
import { User } from 'src/entities/user.entity';
import { Funding } from 'src/entities/funding.entity';
import { Donation } from 'src/entities/donation.entity';
import { Notification } from 'src/entities/notification.entity';
import { Deposit } from '../entities/deposit.entity';
import { ProvisionalDonation } from '../entities/provisional-donation.entity';
import { Deposit } from 'src/entities/deposit.entity';
import { ProvisionalDonation } from 'src/entities/provisional-donation.entity';
import { ImageType } from 'src/enums/image-type.enum';
import { AuthType } from 'src/enums/auth-type.enum';
import { FundTheme } from 'src/enums/fund-theme.enum';
Expand All @@ -20,14 +20,13 @@ import { Gift } from 'src/entities/gift.entity';
import { CreateDonationUseCase } from 'src/features/donation/commands/create-donation.usecase';
import { IncreaseFundSumUseCase } from 'src/features/funding/commands/increase-fundsum.usecase';
import { GetDonationsByFundingUseCase } from 'src/features/donation/queries/get-donations-by-funding.usecase';
import { createMockProvider } from '../tests/create-mock-repository';
import { DepositUnmatchedEvent } from '../features/deposit/domain/events/deposit-unmatched.event';
import { CreateNotificationDto } from 'src/features/notification/dto/create-notification.dto';
import { createMockProvider } from 'src/tests/create-mock-repository';
import { DepositUnmatchedEvent } from 'src/features/deposit/domain/events/deposit-unmatched.event';
import { NotiType } from 'src/enums/noti-type.enum';
import { DecreaseFundSumUseCase } from 'src/features/funding/commands/decrease-fundsum.usecase';
import { FindAllAdminsUseCase } from 'src/features/admin/queries/find-all-admins.usecase';
import { CreateDonationCommand } from 'src/features/donation/commands/create-donation.command';
import { DepositPartiallyMatchedEvent } from '../features/deposit/domain/events/deposit-partially-matched.event';
import { DepositPartiallyMatchedEvent } from 'src/features/deposit/domain/events/deposit-partially-matched.event';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { DepositStatus } from 'src/enums/deposit-status.enum';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { Injectable } from '@nestjs/common';
import { EventEmitter2, OnEvent } from '@nestjs/event-emitter';
import { DepositMatchedEvent } from '../features/deposit/domain/events/deposit-matched.event';
import { DepositPartiallyMatchedEvent } from '../features/deposit/domain/events/deposit-partially-matched.event';
import { DepositUnmatchedEvent } from '../features/deposit/domain/events/deposit-unmatched.event';
import { DepositMatchedEvent } from 'src/features/deposit/domain/events/deposit-matched.event';
import { DepositPartiallyMatchedEvent } from 'src/features/deposit/domain/events/deposit-partially-matched.event';
import { DepositUnmatchedEvent } from 'src/features/deposit/domain/events/deposit-unmatched.event';
import { NotificationService } from 'src/features/notification/notification.service';
import { CreateNotificationDto } from 'src/features/notification/dto/create-notification.dto';
import { NotiType } from 'src/enums/noti-type.enum';
Expand All @@ -12,16 +12,15 @@ import { IncreaseFundSumUseCase } from 'src/features/funding/commands/increase-f
import { IncreaseFundSumCommand } from 'src/features/funding/commands/increase-fundsum.command';
import { GiftogetherExceptions } from 'src/filters/giftogether-exception';
import { Repository } from 'typeorm';
import { Deposit } from '../entities/deposit.entity';
import { Deposit } from 'src/entities/deposit.entity';
import { InjectRepository } from '@nestjs/typeorm';
import { FindAllAdminsUseCase } from 'src/features/admin/queries/find-all-admins.usecase';
import { User } from 'src/entities/user.entity';
import { DecreaseFundSumUseCase } from 'src/features/funding/commands/decrease-fundsum.usecase';
import { DepositRefundedEvent } from '../features/deposit/domain/events/deposit-refunded.event';
import { DepositRefundedEvent } from 'src/features/deposit/domain/events/deposit-refunded.event';
import { DepositStatus } from 'src/enums/deposit-status.enum';
import { DecreaseFundSumCommand } from 'src/features/funding/commands/decrease-fundsum.command';
import { DepositDeletedEvent } from '../features/deposit/domain/events/deposit-deleted.event';
import { ProvisionalDonationApprovedEvent } from 'src/features/donation/domain/events/provisional-donation-approved.event';
import { DepositDeletedEvent } from 'src/features/deposit/domain/events/deposit-deleted.event';
import { ProvisionalDonationPartiallyMatchedEvent } from 'src/features/donation/domain/events/provisional-donation-partially-matched.event';

@Injectable()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,29 @@ import { Test, TestingModule } from '@nestjs/testing';
import { DonationEventHandler } from './donation-event-handler';
import { TypeOrmModule } from '@nestjs/typeorm';
import { EventEmitterModule } from '@nestjs/event-emitter';
import { NotificationService } from '../features/notification/notification.service';
import { FindAllAdminsUseCase } from '../features/admin/queries/find-all-admins.usecase';
import { DeleteDepositUseCase } from '../features/deposit/commands/delete-deposit.usecase';
import { DecreaseFundSumUseCase } from '../features/funding/commands/decrease-fundsum.usecase';
import { DonationRefundRequestedEvent } from '../features/donation/domain/events/donation-refund-requested.event';
import { DonationRefundCancelledEvent } from '../features/donation/domain/events/donation-refund-cancelled.event';
import { DonationDeletedEvent } from '../features/donation/domain/events/donation-deleted.event';
import { User } from '../entities/user.entity';
import { Notification } from '../entities/notification.entity';
import { Funding } from '../entities/funding.entity';
import { Donation } from '../entities/donation.entity';
import { Deposit } from '../entities/deposit.entity';
import { NotificationService } from '../../features/notification/notification.service';
import { FindAllAdminsUseCase } from '../../features/admin/queries/find-all-admins.usecase';
import { DeleteDepositUseCase } from '../../features/deposit/commands/delete-deposit.usecase';
import { DecreaseFundSumUseCase } from '../../features/funding/commands/decrease-fundsum.usecase';
import { DonationRefundRequestedEvent } from '../../features/donation/domain/events/donation-refund-requested.event';
import { DonationRefundCancelledEvent } from '../../features/donation/domain/events/donation-refund-cancelled.event';
import { User } from '../../entities/user.entity';
import { Notification } from '../../entities/notification.entity';
import { Funding } from '../../entities/funding.entity';
import { Donation } from '../../entities/donation.entity';
import { Deposit } from '../../entities/deposit.entity';
import { DataSource, Repository } from 'typeorm';
import { GiftogetherExceptions } from '../filters/giftogether-exception';
import { DepositFsmService } from '../features/deposit/domain/deposit-fsm.service';
import { GiftogetherExceptions } from '../../filters/giftogether-exception';
import { DepositFsmService } from '../../features/deposit/domain/deposit-fsm.service';
import { getRepositoryToken } from '@nestjs/typeorm';
import {
createMockUser,
createMockDeposit,
createMockFunding,
createMockDonation,
} from '../tests/mock-factory';
import { createDataSourceOptions } from '../tests/data-source-options';
import entities from '../entities/entities';
} from '../../tests/mock-factory';
import { createDataSourceOptions } from '../../tests/data-source-options';
import entities from '../../entities/entities';

describe('DonationEventHandler (Integration)', () => {
let module: TestingModule;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,29 @@
import { Test, TestingModule } from '@nestjs/testing';
import { DonationEventHandler } from './donation-event-handler';
import { Donation } from '../entities/donation.entity';
import { Donation } from '../../entities/donation.entity';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { GiftogetherExceptions } from '../filters/giftogether-exception';
import { NotificationService } from '../features/notification/notification.service';
import { FindAllAdminsUseCase } from '../features/admin/queries/find-all-admins.usecase';
import { DeleteDepositUseCase } from '../features/deposit/commands/delete-deposit.usecase';
import { DecreaseFundSumUseCase } from '../features/funding/commands/decrease-fundsum.usecase';
import { DonationRefundRequestedEvent } from '../features/donation/domain/events/donation-refund-requested.event';
import { DonationRefundCancelledEvent } from '../features/donation/domain/events/donation-refund-cancelled.event';
import { AdminAssignedForDonationRefundEvent } from '../features/donation/domain/events/admin-assigned-for-refune.event';
import { DonationRefundCompletedEvent } from '../features/donation/domain/events/donation-refund-completed.event';
import { DonationDeletedEvent } from '../features/donation/domain/events/donation-deleted.event';
import { DonationDeleteFailedEvent } from '../features/donation/domain/events/donation-delete-failed.event';
import { NotiType } from '../enums/noti-type.enum';
import { User } from '../entities/user.entity';
import { createMockProvider } from '../tests/create-mock-repository';
import {
createMockUser,
createMockDeposit,
} from '../tests/mock-factory';
import { Notification } from '../entities/notification.entity';
import { Funding } from '../entities/funding.entity';
import { Deposit } from '../entities/deposit.entity';
import { DepositFsmService } from '../features/deposit/domain/deposit-fsm.service';
import { DepositDto } from '../features/deposit/dto/deposit.dto';
import { GiftogetherExceptions } from '../../filters/giftogether-exception';
import { NotificationService } from '../../features/notification/notification.service';
import { FindAllAdminsUseCase } from '../../features/admin/queries/find-all-admins.usecase';
import { DeleteDepositUseCase } from '../../features/deposit/commands/delete-deposit.usecase';
import { DecreaseFundSumUseCase } from '../../features/funding/commands/decrease-fundsum.usecase';
import { DonationRefundRequestedEvent } from '../../features/donation/domain/events/donation-refund-requested.event';
import { DonationRefundCancelledEvent } from '../../features/donation/domain/events/donation-refund-cancelled.event';
import { AdminAssignedForDonationRefundEvent } from '../../features/donation/domain/events/admin-assigned-for-refune.event';
import { DonationRefundCompletedEvent } from '../../features/donation/domain/events/donation-refund-completed.event';
import { DonationDeletedEvent } from '../../features/donation/domain/events/donation-deleted.event';
import { DonationDeleteFailedEvent } from '../../features/donation/domain/events/donation-delete-failed.event';
import { NotiType } from '../../enums/noti-type.enum';
import { User } from '../../entities/user.entity';
import { createMockProvider } from '../../tests/create-mock-repository';
import { createMockUser, createMockDeposit } from '../../tests/mock-factory';
import { Notification } from '../../entities/notification.entity';
import { Funding } from '../../entities/funding.entity';
import { Deposit } from '../../entities/deposit.entity';
import { DepositFsmService } from '../../features/deposit/domain/deposit-fsm.service';
import { DepositDto } from '../../features/deposit/dto/deposit.dto';
import { EventModule } from 'src/features/event/event.module';

describe('DonationEventHandler', () => {
let handler: DonationEventHandler;
let notificationService: NotificationService;
Expand All @@ -37,6 +36,7 @@ describe('DonationEventHandler', () => {

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [EventModule],
providers: [
DonationEventHandler,
NotificationService,
Expand All @@ -45,7 +45,6 @@ describe('DonationEventHandler', () => {
DepositFsmService,
DecreaseFundSumUseCase,
GiftogetherExceptions,
EventEmitter2,
createMockProvider(Notification),
createMockProvider(User),
createMockProvider(Funding),
Expand Down Expand Up @@ -193,34 +192,24 @@ describe('DonationEventHandler', () => {
);

const notiSpy = jest.spyOn(notificationService, 'createNoti');
const deleteDepositSpy = jest
.spyOn(deleteDepositUseCase, 'execute')
.mockResolvedValue(new DepositDto(mockDeposit));
const decreaseFundSumSpy = jest.spyOn(decreaseFundSumUseCase, 'execute');

await handler.handleDonationDeleted(event);

expect(notiSpy).toHaveBeenCalledTimes(2);
expect(notiSpy).toHaveBeenCalledTimes(1); // 2 -> 1로 변경된 이유는 DonationEventHandler에서 직접 어드민에게 알림을 보내지 않기 때문입니다.
expect(notiSpy).toHaveBeenCalledWith(
expect.objectContaining({
recvId: mockUser.userId,
notiType: NotiType.DonationDeleted,
subId: event.donId.toString(),
}),
);
expect(notiSpy).toHaveBeenCalledWith(
expect.objectContaining({
recvId: mockAdmin1.userId,
notiType: NotiType.DonationDeleted,
subId: event.donId.toString(),
}),
);

expect(deleteDepositSpy).toHaveBeenCalledWith(event.donId);
expect(decreaseFundSumSpy).toHaveBeenCalledWith({
fundId: event.fundId,
amount: mockDeposit.amount,
});
// 주석 사유: 현재 DeleteDeposit과 DecreaseFundSum UseCase는 모두 DeleteDepositSaga로 옮겨졌습니다.
// expect(deleteDepositSpy).toHaveBeenCalledWith(event.donId);
// expect(decreaseFundSumSpy).toHaveBeenCalledWith({
// fundId: event.fundId,
// amount: mockDeposit.amount,
// });
});
});
});
Loading