Refactor queries and db, make basic getReviews tests · SDC-Raspberry/atelier-api@de7de41 · GitHub
Skip to content

Commit de7de41

Browse files
committed
Refactor queries and db, make basic getReviews tests
1 parent ac34d05 commit de7de41

5 files changed

Lines changed: 103 additions & 57 deletions

File tree

‎__tests__/_mockData.js‎

Lines changed: 25 additions & 1 deletion

‎__tests__/queries.test.js‎

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ const {
1111
Characteristic
1212
} = require('../server/db/schemas.js');
1313

14-
// Define mock data
14+
const queries = require('../server/db/queries.js');
1515

1616
const {
17-
reviewMockData
17+
reviewMockData,
18+
reviewPhotoMockData
1819
} = require('./_mockData.js');
1920

2021
describe("Query Tests", () => {
@@ -31,28 +32,43 @@ describe("Query Tests", () => {
3132
describe('getReviews', () => {
3233
beforeEach((done) => {
3334
Review.deleteMany({})
35+
.then(() => ReviewPhoto.deleteMany({}))
3436
.then(() => done());
3537
});
3638

37-
// do all the query tests
38-
it('should add entries into the db', () => {
39+
it('should return the meta content for a query', () => {
40+
return queries.getReviews(1, 5, undefined, 12345)
41+
.then(response => {
42+
assert.propertyVal(response, 'product', 12345);
43+
assert.propertyVal(response, 'page', 1);
44+
assert.propertyVal(response, 'count', 5);
45+
assert.exists(response.results);
46+
});
47+
});
48+
49+
it('should get an entry for a given product_id that includes a photo entry', () => {
50+
return Review.collection.insertMany(reviewMockData)
51+
.then(() => ReviewPhoto.collection.insertMany(reviewPhotoMockData))
52+
.then(() => queries.getReviews(1, 5, undefined, 12))
53+
.then(response => {
54+
const results = response.results;
55+
assert.lengthOf(results, 1);
56+
assert.propertyVal(results[0], 'reviewer_name', 'Sallie_Kovacek');
57+
assert.propertyVal(results[0], 'reviewer_email', 'Magdalen49@yahoo.com');
58+
assert.isArray(results[0].photos);
59+
assert.lengthOf(results[0].photos, 1);
60+
assert.propertyVal(results[0].photos[0], 'id', 13);
61+
assert.propertyVal(results[0].photos[0], 'url', 'https://images.unsplash.com/photo-1526948128573-703ee1aeb6fa?ixlib=rb-1.2.1&auto=format&fit=crop&w=1650&q=80');
62+
});
63+
});
64+
65+
it('should return an empty array when no entries exist at a given product_id', () => {
3966
return Review.collection.insertMany(reviewMockData)
40-
.then(result => {
41-
const query = Review.find({ product_id : 1 });
42-
return query.lean().exec()
43-
.then(result => {
44-
assert.lengthOf(result, 1);
45-
assert.propertyVal(result[0], 'reviewer_name', 'mymainstreammother');
46-
assert.propertyVal(result[0], 'reviewer_email', 'first.last@gmail.com');
47-
});
48-
}).then(result => {
49-
const query = Review.find({ product_id : 2 });
50-
return query.lean().exec()
51-
.then(result => {
52-
assert.lengthOf(result, 1);
53-
assert.propertyVal(result[0], 'reviewer_name', 'negativity');
54-
assert.propertyVal(result[0], 'reviewer_email', 'first.last@gmail.com');
55-
});
67+
.then(() => ReviewPhoto.collection.insertMany(reviewPhotoMockData))
68+
.then(() => queries.getReviews(1, 5, undefined, -1))
69+
.then(response => {
70+
assert.isArray(response.results);
71+
assert.lengthOf(response.results, 0);
5672
});
5773
});
5874

‎server/db/db.js‎

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Initilize database
2+
3+
const mongoose = require("mongoose");
4+
const dbName = "atelier";
5+
mongoose.connect(`mongodb://localhost:27017/${dbName}`, {
6+
useNewUrlParser: true,
7+
useUnifiedTopology: true,
8+
});
9+
10+
// Get Models
11+
12+
const {
13+
Product,
14+
Review,
15+
ReviewPhoto,
16+
CharacteristicReview,
17+
Characteristic
18+
} = require('./schemas.js');
19+
20+
// Connect to database
21+
22+
const db = mongoose.connection;
23+
db.on("error", console.error.bind(console, "connection error:"));
24+
db.once("open", () => {
25+
console.log(`Mongoose DB "${dbName}" initialized\n`)
26+
27+
Product.findOne({})
28+
.then(result => console.log('products: ' + !!result))
29+
.then(() => Review.findOne({}))
30+
.then(result => console.log('reviews: ' + !!result))
31+
.then(() => ReviewPhoto.findOne({}))
32+
.then(result => console.log('reviews_photos: ' + !!result))
33+
.then(() => CharacteristicReview.findOne({}))
34+
.then(result => console.log('characteristics_reviews: ' + !!result))
35+
.then(() => Characteristic.findOne({}))
36+
.then(result => console.log('characteristics: ' + !!result));
37+
});
38+
39+
module.exports = db;
Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,3 @@
1-
// Initilize database
2-
3-
const mongoose = require("mongoose");
4-
const dbName = "atelier";
5-
mongoose.connect(`mongodb://localhost:27017/${dbName}`, {
6-
useNewUrlParser: true,
7-
useUnifiedTopology: true,
8-
});
9-
10-
// Get Models
11-
121
const {
132
Product,
143
Review,
@@ -17,25 +6,6 @@ const {
176
Characteristic
187
} = require('./schemas.js');
198

20-
// Connect to database
21-
22-
const db = mongoose.connection;
23-
db.on("error", console.error.bind(console, "connection error:"));
24-
db.once("open", () => {
25-
console.log(`Mongoose DB "${dbName}" initialized\n`)
26-
27-
Product.findOne({})
28-
.then(result => console.log('products: ' + !!result))
29-
.then(() => Review.findOne({}))
30-
.then(result => console.log('reviews: ' + !!result))
31-
.then(() => ReviewPhoto.findOne({}))
32-
.then(result => console.log('reviews_photos: ' + !!result))
33-
.then(() => CharacteristicReview.findOne({}))
34-
.then(result => console.log('characteristics_reviews: ' + !!result))
35-
.then(() => Characteristic.findOne({}))
36-
.then(result => console.log('characteristics: ' + !!result));
37-
});
38-
399
// Helper functions
4010

4111
const newestCompare = (a, b) => {
@@ -79,8 +49,6 @@ const getReviews = async (page, count, sort, product_id) => {
7949
.where({ product_id: product_id })
8050
.limit(totalResults);
8151

82-
console.time('query');
83-
8452
let reviewResults = await reviewQuery.lean().exec();
8553
if (sortFunction) {
8654
reviewResults.sort(sortFunction);
@@ -113,8 +81,6 @@ const getReviews = async (page, count, sort, product_id) => {
11381

11482
output.results = reviewResults;
11583

116-
console.timeEnd('query');
117-
11884
return output;
11985
};
12086

‎server/server.js‎

Lines changed: 3 additions & 2 deletions

0 commit comments

Comments
 (0)