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
4 changes: 4 additions & 0 deletions src/entities/gift.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
Entity,
JoinColumn,
ManyToOne,
OneToOne,
PrimaryGeneratedColumn,
} from 'typeorm';
import { Funding } from './funding.entity';
Expand Down Expand Up @@ -46,4 +47,7 @@ export class Gift implements IImageId {
@ManyToOne(() => Image, (image) => image.imgId)
@JoinColumn({ name: 'defaultImgId' })
defaultImgId?: number;

@OneToOne(() => Image, (image) => image.subId)
image: Image;
}
9 changes: 8 additions & 1 deletion src/features/deposit/deposit.e2e.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import { TestsModule } from 'src/tests/tests.module';
import { MatchDepositUseCase } from './commands/match-deposit.usecase';
import { ProvisionalDonationPartiallyMatchedEvent } from '../donation/domain/events/provisional-donation-partially-matched.event';
import { DonationDeletedEvent } from '../donation/domain/events/donation-deleted.event';
import { Gift } from 'src/entities/gift.entity';

describe('Deposit API E2E Test', () => {
let app: INestApplication;
Expand All @@ -42,6 +43,7 @@ describe('Deposit API E2E Test', () => {
let depositRepo: Repository<Deposit>;
let donationRepo: Repository<Donation>;
let notiRepo: Repository<Notification>;
let giftRepo: Repository<Gift>;
let mockFunding: Funding;
let mockFundingOwner: User;
let mockDonor: User;
Expand All @@ -64,6 +66,7 @@ describe('Deposit API E2E Test', () => {
depositRepo = moduleFixture.get(getRepositoryToken(Deposit));
donationRepo = moduleFixture.get(getRepositoryToken(Donation));
notiRepo = moduleFixture.get(getRepositoryToken(Notification));
giftRepo = moduleFixture.get(getRepositoryToken(Gift));
g2gException = moduleFixture.get(GiftogetherExceptions);
eventEmitter = moduleFixture.get<EventEmitter2>(EventEmitter2);
testAuthBase = await moduleFixture.resolve(TestAuthBase); // REQUEST scoped provider
Expand Down Expand Up @@ -392,11 +395,15 @@ describe('Deposit API E2E Test', () => {
fundingRepo,
depositRepo,
donationRepo,
giftRepo,
},
undefined,
{ deposit: 1, donation: 1 },
{ deposit: 1, donation: 1, gift: 1 },
);

// check if the gift is created
expect(mockFunding.gifts).toHaveLength(1);

const deposit = await depositRepo.findOne({
where: { depositId: mockFunding.donations[0].deposit.depositId },
});
Expand Down
2 changes: 2 additions & 0 deletions src/tests/create-mock-funding-delegate.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ import { Donation } from "../entities/donation.entity";
import { Funding } from "../entities/funding.entity";
import { ProvisionalDonation } from "../entities/provisional-donation.entity";
import { User } from "../entities/user.entity";
import { Gift } from "src/entities/gift.entity";

export interface CreateMockFundingWithRelationsDelegate {
userRepo: Repository<User>;
fundingRepo: Repository<Funding>;
depositRepo?: Repository<Deposit>;
donationRepo?: Repository<Donation>;
provDonRepo?: Repository<ProvisionalDonation>;
giftRepo?: Repository<Gift>;
}
32 changes: 32 additions & 0 deletions src/tests/mock-factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { Nickname } from '../util/nickname';
import { DonationService } from '../features/donation/donation.service';
import { CreateMockFundingWithRelationsDelegate } from './create-mock-funding-delegate.interface';
import { CreateMockUserDelegate } from './create-mock-user-delegate.interface';
import { Gift } from 'src/entities/gift.entity';

const baseNick = (): string => {
const nickname = new Nickname();
Expand Down Expand Up @@ -138,6 +139,24 @@ export const createMockDonation = (
} as Donation;
};

/**
* 선물 객체를 생성합니다.
*/
export const createMockGift = (overwrites?: Partial<Gift>): Gift => {
const defaultGift = {
giftTitle: faker.commerce.productName(),
giftUrl: faker.internet.url(),
giftOrd: faker.number.int({ min: 1, max: 100 }),
giftOpt: faker.lorem.sentence(),
giftCont: faker.lorem.sentence().slice(0, 20),
} as Gift;

return {
...defaultGift,
...overwrites,
} as Gift;
};

/**
* 펀딩을 생성합니다. 옵션으로 예치, 프로비전 후원, 후원을 생성할 수 있습니다.
*
Expand Down Expand Up @@ -171,6 +190,7 @@ export const createMockFundingWithRelations = async (
deposit?: number;
provDonation?: number;
donation?: number;
gift?: number;
},
): Promise<Funding> => {
if (
Expand Down Expand Up @@ -252,6 +272,18 @@ export const createMockFundingWithRelations = async (
);
}

// Handler optional gifts
if (delegate.giftRepo) {
const gifts = await delegate.giftRepo.save(
Array(amount?.gift ?? 1)
.fill(null)
.map(() => createMockGift()),
);

mockFunding.gifts = gifts;
await delegate.fundingRepo.save(mockFunding);
}

return mockFunding;
};

Expand Down