Skip to content

Commit 3f4f55b

Browse files
Finish course review post route and modified tests.
1 parent 2141890 commit 3f4f55b

3 files changed

Lines changed: 63 additions & 27 deletions

File tree

src/routes/course.js

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ GET routes
1111

1212
router.get('/', (req, res, next) => {
1313
Course.find({}, (err, courses) => {
14-
if(err){
15-
return next(err);
16-
}
14+
if(err) return next(err);
1715
let coursesArray = [];
1816
for(let i=0; i<courses.length; i++){
1917
let obj = {
@@ -34,7 +32,7 @@ router.get('/:courseId', (req, res, next) => {
3432
.populate({path: 'reviews',
3533
populate: {path: 'user'}})
3634
.exec((err, course) => {
37-
Utils.isError(err, next);
35+
if(err) return next(err);
3836
res.locals.course = course;
3937
let status = 200;
4038
return res.status(status).json({success: true, message: "Course Successfully retrieved!", status: status, course: res.locals.course });
@@ -46,7 +44,7 @@ PUT Routes
4644
*/
4745
router.put('/:courseId', authorizeUser, (req, res, next) => {
4846
Course.findByIdAndUpdate(req.params.courseId, req.body, (err, course) => {
49-
Utils.isError(err, next);
47+
if(err) return next(err);
5048
let status = 204;
5149
return res.status(status).json({}); //Send status 204 and no content..
5250
});
@@ -61,9 +59,7 @@ router.post('/', authorizeUser, (req, res, next) => {
6159
}
6260
const courseData = req.body;
6361
Course.create(courseData, (err, course) => {
64-
if(err){
65-
return next(err);
66-
}
62+
if(err) return next(err);
6763
let status = 201;
6864
return res.status(status).json({success: true, message: "Course Successfully added!", status: status, course});
6965
});
@@ -72,17 +68,19 @@ router.post('/', authorizeUser, (req, res, next) => {
7268
router.post('/:courseId/reviews', authorizeUser, (req, res, next) => {
7369
let review = new Review(req.body);
7470
review.save((err) => {
75-
Utils.isError(err, next);
71+
if(err) return next(err);
7672
Course.findById(req.params.courseId, (err, course) => {
77-
Utils.isError(err, next);
73+
if(err) return next(err);
7874
course.reviews.push(review._id);
7975
course.save((err) => {
80-
Utils.isError(err, next);
76+
if(err) return next(err);
8177
let status = 201;
8278
res.location('/api/courses/'+req.params.courseId);
83-
return res.status(status).json({success: true, message: "Review Successfully added to Course!", status: status, course});
79+
return res.status(status).json({}); //Supposed to return no content. therefore no json.
8480
});
8581
});
8682
});
8783
});
84+
85+
8886
module.exports = router;

src/utils.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,4 @@ export default class Utils {
44
err.status = status;
55
return next(err);
66
}
7-
static isError(err, next){
8-
if(err){
9-
return next(err);
10-
}
11-
}
127
}

test/course_test.js

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -173,28 +173,71 @@ describe('Courses', () => {
173173
});
174174

175175
describe('/POST course/:courseId/reviews', () => {
176+
let review = {
177+
user: '57029ed4795118be119cc438',
178+
postedOn: "2016-02-04T21:22:00.000Z",
179+
rating: 4,
180+
review: "Lorem ipsum This is a review that I am writing, blah blah blah de blah"
181+
};
182+
let courseId = "57029ed4795118be119cc43d";
183+
176184
it('should POST when a review is supplied with proper information and has an authorized user', (done) => {
177-
let review = {
178-
user: '57029ed4795118be119cc438',
179-
postedOn: "2016-02-04T21:22:00.000Z",
180-
rating: 4,
181-
review: "Lorem ipsum This is a review that I am writing, blah blah blah de blah"
185+
successPostReview(courseId, validAuth, review, done);
186+
});
187+
188+
it('should POST only required attribute for review when supplied with garbage parameters', (done) => {
189+
let excessReview = review;
190+
excessReview.extra = 'this is extra param';
191+
successPostReview(courseId, validAuth, excessReview, done);
192+
});
193+
194+
it('should not POST when user is not authorized', (done) => {
195+
let invalidAuth = {
196+
user: 'invalid@notvalid.com',
197+
pass: 'notValidPass'
182198
};
183-
let courseId = "57029ed4795118be119cc43d";
184-
postReview(courseId, validAuth, review, done);
199+
failPostReview(401, "Access Denied: Wrong email or password", courseId, invalidAuth, review, done);
185200
});
186201

187-
function postReview(courseId, validAuth, review, done) {
202+
it('should not POST when review has out of bounds rating', (done) => {
203+
let badReview = review;
204+
badReview.rating = 20;
205+
failPostReview(500, "Review validation failed: rating: Path `rating` (20) is more than maximum allowed value (5).", courseId, validAuth, badReview, done);
206+
});
207+
208+
it('should not POST when rating is missing', (done) => {
209+
let badReview = review;
210+
badReview.rating = null;
211+
failPostReview(500, "Review validation failed: rating: Path `rating` is required.", courseId, validAuth, badReview, done);
212+
});
213+
214+
it('should not POST when not supplied with a review', (done) => {
215+
let badReview = {};
216+
failPostReview(500, "Review validation failed: rating: Path `rating` is required.", courseId, validAuth, badReview, done);
217+
});
218+
219+
function successPostReview(courseId, auth, review, done) {
188220
chai.request(server)
189221
.post(courseIndexLink+courseId+'/reviews')
190-
.auth(validAuth.user, validAuth.pass)
222+
.auth(auth.user, auth.pass)
191223
.send(review)
192224
.end((err, res) => {
193-
res.body.should.have.property('message').equal("Review Successfully added to Course!");
194225
res.should.have.status(201);
195226
done();
196227
});
197228
};
229+
230+
function failPostReview(status, msg, courseId, auth, review, done) {
231+
chai.request(server)
232+
.post(courseIndexLink+courseId+'/reviews')
233+
.auth(auth.user, auth.pass)
234+
.send(review)
235+
.end((err, res) => {
236+
res.body.should.have.property('message').equal(msg);
237+
res.should.have.status(status);
238+
done();
239+
});
240+
};
198241
});
199242

200243
});

0 commit comments

Comments
 (0)