Skip to content

Commit

Permalink
done
Browse files Browse the repository at this point in the history
  • Loading branch information
maxwn04 committed Oct 20, 2024
1 parent c4aa01c commit 0b8fe13
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 7 deletions.
15 changes: 8 additions & 7 deletions services/UserAccountService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,14 +167,15 @@ export default class UserAccountService {
}

public async collectOnboarding(user: UserModel): Promise<UserModel> {
if (user.attendances.length < 5
|| user.resumes.length < 1
|| user.profilePicture == null
|| user.bio == null) {
throw new BadRequestError('Onboarding tasks not completed');
const userProfile = await this.getFullUserProfile(user);
if (userProfile.attendanceCount < 5
|| userProfile.resumes.length < 1
|| userProfile.profilePicture == null
|| userProfile.bio == null) {
throw new BadRequestError('Onboarding tasks not completed!');
}
if (user.onboardingCollected) {
throw new BadRequestError('Onboarding reward already collected');
if (userProfile.onboardingCollected) {
throw new BadRequestError('Onboarding reward already collected!');
}
return this.transactions.readWrite(async (txn) => {
const userRepository = Repositories.user(txn);
Expand Down
87 changes: 87 additions & 0 deletions tests/onboardingReward.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import { EventModel } from '../models/EventModel';
import { DatabaseConnection, UserFactory, PortalState, EventFactory, ResumeFactory } from './data';
import { ControllerFactory } from './controllers';

beforeAll(async () => {
await DatabaseConnection.connect();
});

beforeEach(async () => {
await DatabaseConnection.clear();
});

afterAll(async () => {
await DatabaseConnection.clear();
await DatabaseConnection.close();
});

describe('collect onboarding reward', () => {
test('can collect onboarding reward', async () => {
const conn = await DatabaseConnection.get();
const member = UserFactory.fake({
bio: 'this is a bio',
profilePicture: 'https://pfp.com',
});
const resume = ResumeFactory.fake({ user: member, isResumeVisible: true });

const events: EventModel[] = [];
for (let i = 0; i < 5; i += 1) {
events.push(EventFactory.fake({ pointValue: 10 }));
}

await new PortalState()
.createUsers(member)
.createEvents(events[0], events[1], events[2], events[3], events[4])
.attendEvents([member], events)
.createResumes(member, resume)
.write();

const userController = ControllerFactory.user(conn);
const response = await userController.collectOnboarding(member);
const userProfile = response.user;

expect(userProfile.onboardingCollected).toBe(true);
expect(userProfile.points).toBe(60);
});

test('conditions not fulfilled', async () => {
const conn = await DatabaseConnection.get();
const member = UserFactory.fake();

await new PortalState()
.createUsers(member)
.write();

const userController = ControllerFactory.user(conn);

await expect(userController.collectOnboarding(member))
.rejects.toThrow('Onboarding tasks not completed');
});

test('can collect onboarding reward', async () => {
const conn = await DatabaseConnection.get();
const member = UserFactory.fake({
bio: 'this is a bio',
profilePicture: 'https://pfp.com',
onboardingCollected: true,
});
const resume = ResumeFactory.fake({ user: member, isResumeVisible: true });

const events: EventModel[] = [];
for (let i = 0; i < 5; i += 1) {
events.push(EventFactory.fake({ pointValue: 10 }));
}

await new PortalState()
.createUsers(member)
.createEvents(events[0], events[1], events[2], events[3], events[4])
.attendEvents([member], events)
.createResumes(member, resume)
.write();

const userController = ControllerFactory.user(conn);

await expect(userController.collectOnboarding(member))
.rejects.toThrow('Onboarding reward already collected!');
});
});

0 comments on commit 0b8fe13

Please sign in to comment.