Skip to content

Commit

Permalink
refactor: Change getOne to have resource and user as input
Browse files Browse the repository at this point in the history
  • Loading branch information
AlmogVC committed Dec 13, 2018
1 parent 729904a commit 1a9f045
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 52 deletions.
2 changes: 1 addition & 1 deletion src/reaction/reaction.contoller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export class ReactionController {
}

static async getOne(req: Request, res: Response) {
const reaction = await ReactionManager.getOne(req.query);
const reaction = await ReactionManager.getOne(req.query.resource, req.query.user);
if (!reaction) {
throw new ReactionNotFoundError();
}
Expand Down
9 changes: 3 additions & 6 deletions src/reaction/reaction.manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@ import { ReactionRepository } from './reaction.repository';
export class ReactionManager implements ReactionRepository {
static async create(reaction: IReaction) {
const existingReaction: IReaction | null =
await ReactionManager.getOne({
user: reaction.user,
resource: reaction.resource,
});
await ReactionManager.getOne(reaction.user, reaction.resource);

if (existingReaction) {
return Promise.resolve(existingReaction);
Expand All @@ -28,8 +25,8 @@ export class ReactionManager implements ReactionRepository {
return ReactionRepository.deleteMany(resource);
}

static getOne(reactionFilter: Partial<IReaction>) {
return ReactionRepository.getOne(reactionFilter);
static getOne(resource: string, user: string) {
return ReactionRepository.getOne(resource, user);
}

static getMany(reactionFilter: Partial<IReaction>) {
Expand Down
51 changes: 16 additions & 35 deletions src/reaction/reaction.repository.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ const reactionFilter: Partial<IReaction> = {
const reactionDataToUpdate: Partial<IReaction> = { type: ReactionType.Dislike };
const unexistingReaction: Partial<IReaction> = {
resource: '5bf54919902f5a46a0fb2e33',
user: 'aaaa@vavaav',
};
const unknownProperty: Object = { unknownProperty: true };

Expand Down Expand Up @@ -287,7 +288,7 @@ describe('Reaction Repository', function () {
expect(deleted).to.exist;
expect(deleted).to.be.true;

const getDeleted = await ReactionRepository.getOne(reaction);
const getDeleted = await ReactionRepository.getOne(reaction.resource, reaction.user);
expect(getDeleted).to.not.exist;
});

Expand Down Expand Up @@ -325,8 +326,8 @@ describe('Reaction Repository', function () {
expect(deleted).to.exist;
expect(deleted).to.be.true;

const getDeleted = await ReactionRepository.getOne(reaction);
const getDeleted2 = await ReactionRepository.getOne(reaction2);
const getDeleted = await ReactionRepository.getOne(reaction.resource, reaction.user);
const getDeleted2 = await ReactionRepository.getOne(reaction2.resource, reaction2.user);
expect(getDeleted).to.not.exist;
expect(getDeleted2).to.not.exist;
});
Expand All @@ -336,9 +337,9 @@ describe('Reaction Repository', function () {
expect(deleted).to.exist;
expect(deleted).to.be.true;

const getDeleted = await ReactionRepository.getOne(reaction);
const getDeleted2 = await ReactionRepository.getOne(reaction2);
const getDeleted3 = await ReactionRepository.getOne(reaction3);
const getDeleted = await ReactionRepository.getOne(reaction.resource, reaction.user);
const getDeleted2 = await ReactionRepository.getOne(reaction2.resource, reaction2.user);
const getDeleted3 = await ReactionRepository.getOne(reaction3.resource, reaction3.user);
expect(getDeleted).to.not.exist;
expect(getDeleted2).to.not.exist;
expect(getDeleted3).to.not.exist;
Expand All @@ -348,8 +349,8 @@ describe('Reaction Repository', function () {
const res = await ReactionRepository.deleteMany(new mongoose.Types.ObjectId().toHexString());
expect(res).to.be.true;

const getReaction = await ReactionRepository.getOne(reaction);
const getReaction2 = await ReactionRepository.getOne(reaction2);
const getReaction = await ReactionRepository.getOne(reaction.resource, reaction.user);
const getReaction2 = await ReactionRepository.getOne(reaction2.resource, reaction2.user);
expect(getReaction).to.exist;
expect(getReaction2).to.exist;
});
Expand All @@ -358,9 +359,9 @@ describe('Reaction Repository', function () {
const res = await ReactionRepository.deleteMany([new mongoose.Types.ObjectId().toHexString(), new mongoose.Types.ObjectId().toHexString()]);
expect(res).to.be.true;

const getReaction = await ReactionRepository.getOne(reaction);
const getReaction2 = await ReactionRepository.getOne(reaction2);
const getReaction3 = await ReactionRepository.getOne(reaction3);
const getReaction = await ReactionRepository.getOne(reaction.resource, reaction.user);
const getReaction2 = await ReactionRepository.getOne(reaction2.resource, reaction2.user);
const getReaction3 = await ReactionRepository.getOne(reaction3.resource, reaction3.user);
expect(getReaction).to.exist;
expect(getReaction2).to.exist;
expect(getReaction3).to.exist;
Expand All @@ -378,10 +379,7 @@ describe('Reaction Repository', function () {
});

it('Should return document by id', async function () {
const returnedReaction = await ReactionRepository.getOne({
resource: reaction.resource,
user: reaction.user,
} as Partial<IReaction>);
const returnedReaction = await ReactionRepository.getOne(reaction.resource, reaction.user);

expect(returnedReaction).to.exist;

Expand All @@ -390,30 +388,18 @@ describe('Reaction Repository', function () {
}
});

it('Should return document by reactionType', async function () {
const createdReaction = await ReactionRepository.getOne({
type: reaction.type,
} as Partial<IReaction>);

expect(createdReaction).to.exist;

for (const prop in reaction) {
expect(createdReaction).to.have.property(prop, reaction[prop as keyof IReaction]);
}
});

it('Should return null when document does not exist', async function () {
const returnedReaction = await ReactionRepository.getOne(unexistingReaction);
const returnedReaction = await ReactionRepository.getOne(unexistingReaction.resource!, unexistingReaction.user!);
expect(returnedReaction).to.not.exist;
});
});

context('When data is invalid', function () {
it('Should throw error when filter does not exist', async function () {
it('Should throw error when resource and user does not exist', async function () {
let hasThrown = false;

try {
await ReactionRepository.getOne({});
await ReactionRepository.getOne('', '');
} catch (err) {
hasThrown = true;
expect(err).to.exist;
Expand All @@ -422,11 +408,6 @@ describe('Reaction Repository', function () {
expect(hasThrown).to.be.true;
}
});

it('Should return null when filter is not in the correct format', async function () {
const doc = await ReactionRepository.getOne(unknownProperty);
expect(doc).to.not.exist;
});
});
});

Expand Down
13 changes: 7 additions & 6 deletions src/reaction/reaction.repository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,15 @@ export class ReactionRepository {
return Promise.resolve(response.ok === 1);
}

static getOne(reactionFilter: Partial<IReaction>)
static getOne(resource: string, user: string)
: Promise<IReaction | null> {
if (Object.keys(reactionFilter).length === 0) {
throw new ServerError('Filter is required.');
if (!resource || !user) {
throw new ServerError('Resource and User are required.');
}
return ReactionModel.findOne(
reactionFilter,
).exec();
return ReactionModel.findOne({
resource,
user,
}).exec();
}

static getMany(reactionFilter: Partial<IReaction>)
Expand Down
7 changes: 4 additions & 3 deletions src/reaction/reaction.router.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { ReactionManager } from './reaction.manager';
import { sign } from 'jsonwebtoken';
import { ReactionRepository } from './reaction.repository';

describe('Reaction Module', function () {
describe('Reaction Router', function () {
let server: Server;

const authorizationHeader = `Bearer ${sign('mock-user', config.authentication.secret)}`;
Expand Down Expand Up @@ -79,8 +79,9 @@ describe('Reaction Module', function () {
};

const reactionDataToUpdate: Partial<IReaction> = { type: ReactionType.Dislike };
const unexistingReaction: Partial<IReaction> = {
const unexistingReaction = {
resource: '5bf54919902f5a46a0fb2e33',
user: 'a@aaaab',
};
const unknownProperty: Object = { unknownProperty: true };

Expand Down Expand Up @@ -329,7 +330,7 @@ describe('Reaction Module', function () {
it('Should return error when reaction not found', function (done: MochaDone) {
request(server.app)
.get('/api/reaction/one')
.query(unexistingReaction)
.query({ resource: unexistingReaction.resource, user: unexistingReaction.user })
.set({ authorization: authorizationHeader })
.expect(404)
.expect('Content-Type', /json/)
Expand Down
5 changes: 4 additions & 1 deletion src/reaction/validator/reaction.mocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,10 @@ export class ValidRequestMocks {
headers: {
authorization: this.authorizationHeader,
},
query: this.reaction,
query: {
resource: this.reaction.resource,
user: this.reaction.user,
},
});

getMany = createRequest({
Expand Down

0 comments on commit 1a9f045

Please sign in to comment.