Skip to content

Commit 3a40cc1

Browse files
mayank-sahaieleanorreem
authored andcommitted
added ALREADY_APPLIED error code
This commit introduces a new error code, ALREADY_APPLIED (along with the related test cases) to provide a more accurate error message for users who attempt to apply a partner access code that has already been used with their account.
1 parent cf576d4 commit 3a40cc1

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

src/partner-access/partner-access.service.spec.ts

+25
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
import { Repository } from 'typeorm';
1919
import { createQueryBuilderMock } from '../../test/utils/mockUtils';
2020
import { PartnerAccessEntity } from '../entities/partner-access.entity';
21+
import { PartnerAccessCodeStatusEnum } from '../utils/constants';
2122
import { CreatePartnerAccessDto } from './dtos/create-partner-access.dto';
2223
import { GetPartnerAccessesDto } from './dtos/get-partner-access.dto';
2324
import { UpdatePartnerAccessDto } from './dtos/update-partner-access.dto';
@@ -165,6 +166,30 @@ describe('PartnerAccessService', () => {
165166
activatedAt: partnerAccess.activatedAt, // need to just fudge this as it is test specific
166167
});
167168
});
169+
it('should return an error when partner access code has already been used by another user account', async () => {
170+
const repoSpyCreateQueryBuilder = jest.spyOn(repo, 'createQueryBuilder');
171+
repoSpyCreateQueryBuilder.mockImplementation(
172+
createQueryBuilderMock({
173+
getOne: jest.fn().mockResolvedValue({ id: '123456', userId: 'anotherUserId' }),
174+
}) as never,
175+
);
176+
177+
await expect(service.assignPartnerAccess(mockGetUserDto, '123456')).rejects.toThrow(
178+
PartnerAccessCodeStatusEnum.ALREADY_IN_USE,
179+
);
180+
});
181+
it('should return an error when partner access code has already been applied to the account', async () => {
182+
const repoSpyCreateQueryBuilder = jest.spyOn(repo, 'createQueryBuilder');
183+
repoSpyCreateQueryBuilder.mockImplementation(
184+
createQueryBuilderMock({
185+
getOne: jest.fn().mockResolvedValue({ id: '123456', userId: mockGetUserDto.user.id }),
186+
}) as never,
187+
);
188+
189+
await expect(service.assignPartnerAccess(mockGetUserDto, '123456')).rejects.toThrow(
190+
PartnerAccessCodeStatusEnum.ALREADY_APPLIED,
191+
);
192+
});
168193
});
169194

170195
describe('assignPartnerAccessOnSignUp', () => {

src/partner-access/partner-access.service.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,10 @@ export class PartnerAccessService {
6363
.getOne();
6464
}
6565

66-
async getValidPartnerAccessCode(partnerAccessCode: string): Promise<PartnerAccessEntity> {
66+
async getValidPartnerAccessCode(
67+
partnerAccessCode: string,
68+
userId?: string,
69+
): Promise<PartnerAccessEntity> {
6770
const format = /[!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]/;
6871

6972
if (format.test(partnerAccessCode) || partnerAccessCode.length !== 6) {
@@ -77,7 +80,11 @@ export class PartnerAccessService {
7780
}
7881

7982
if (partnerAccess.userId) {
80-
throw new HttpException(PartnerAccessCodeStatusEnum.ALREADY_IN_USE, HttpStatus.CONFLICT);
83+
if (userId && partnerAccess.userId === userId) {
84+
throw new HttpException(PartnerAccessCodeStatusEnum.ALREADY_APPLIED, HttpStatus.CONFLICT);
85+
} else {
86+
throw new HttpException(PartnerAccessCodeStatusEnum.ALREADY_IN_USE, HttpStatus.CONFLICT);
87+
}
8188
}
8289

8390
// ensure the partner access code has been created no more than a year ago
@@ -180,7 +187,7 @@ export class PartnerAccessService {
180187
{ user, partnerAccesses, courses }: GetUserDto,
181188
partnerAccessCode: string,
182189
): Promise<PartnerAccessEntity> {
183-
const partnerAccess = await this.getValidPartnerAccessCode(partnerAccessCode);
190+
const partnerAccess = await this.getValidPartnerAccessCode(partnerAccessCode, user.id);
184191

185192
partnerAccess.userId = user.id;
186193
partnerAccess.activatedAt = new Date();

src/utils/constants.ts

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export enum PartnerAccessCodeStatusEnum {
3939
INVALID_CODE = 'INVALID_CODE',
4040
DOES_NOT_EXIST = 'DOES_NOT_EXIST',
4141
ALREADY_IN_USE = 'ALREADY_IN_USE',
42+
ALREADY_APPLIED = 'ALREADY_APPLIED',
4243
CODE_EXPIRED = 'CODE_EXPIRED',
4344
}
4445

0 commit comments

Comments
 (0)