Skip to content

Commit d2defad

Browse files
committed
chore
1 parent e898ed0 commit d2defad

File tree

6 files changed

+122
-6
lines changed

6 files changed

+122
-6
lines changed

exercises/connect.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const mongoose = require('mongoose')
2+
mongoose.Promise = global.Promise
23

34
const connect = (url) => mongoose.connect(url, {
45
useNewUrlParser: true

exercises/hooks/__test__/org.spec.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const Project = require('../project')
2+
const Org = require('../org')
3+
const mongoose = require('mongoose')
4+
5+
describe('Org model', () => {
6+
test('removes projects when org is remove', async () => {
7+
const org = await Org.create({name: 'org'})
8+
await Project.create([
9+
{name: 'project1', org: org.id},
10+
{name: 'project', org: org.id}
11+
])
12+
13+
await org.remove()
14+
const matchedProjects = await Project.find({org: org._id}).exec()
15+
expect(matchedProjects).toHaveLength(0)
16+
})
17+
})
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
const Project = require('../project')
2+
const mongoose = require('mongoose')
3+
4+
describe('Project model', () => {
5+
test('project names are unique per org', async () => {
6+
expect.assertions(1)
7+
8+
const org = mongoose.Types.ObjectId()
9+
const name = 'name'
10+
try {
11+
await Project.init()
12+
await Project.create([
13+
{org, name},
14+
{org, name}
15+
])
16+
} catch (e) {
17+
expect(e).toBeTruthy()
18+
}
19+
})
20+
test('budgetLeft virtual should calculate budget left', async () => {
21+
const project = await Project.create({
22+
name: 'p1',
23+
org: mongoose.Types.ObjectId(),
24+
budget: 4000,
25+
spent: 1000
26+
})
27+
28+
expect(project.budgetLeft).toBe(3000)
29+
})
30+
})

exercises/hooks/org.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const mongoose = require('mongoose')
2+
const Project = require('./project')
3+
const cdnUrl = 'https://cdn.adminapp.com'
4+
5+
const orgSchema = new mongoose.Schema({
6+
name: {
7+
type: String,
8+
required: true,
9+
unique: true
10+
},
11+
subscription: {
12+
status: {
13+
type: String,
14+
required: true,
15+
default: ['active'],
16+
enum: ['active', 'trialing', 'overdue', 'canceled']
17+
},
18+
last4: {
19+
type: Number,
20+
min: 4,
21+
max: 4
22+
}
23+
}
24+
})
25+
26+
27+
orgSchema.post('remove', async (doc, next) => {
28+
console.log('hello')
29+
await Project.remove({org: doc._id}).exec()
30+
next()
31+
})
32+
33+
orgSchema.virtual('avatar').get(function() {
34+
return `${cdnUrl}/${this._id.toString()}`
35+
})
36+
37+
module.exports = mongoose.model('org', orgSchema)

exercises/hooks/project.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const mongoose = require('mongoose')
2+
3+
const projectSchema = new mongoose.Schema({
4+
name: {
5+
type: String,
6+
required: true
7+
},
8+
org: {
9+
type: mongoose.Schema.Types.ObjectId,
10+
ref: 'org',
11+
required: true
12+
},
13+
dueOn: Date,
14+
budget: {
15+
type: Number,
16+
default: 0
17+
},
18+
spent: {
19+
type: Number,
20+
default: 0
21+
},
22+
onTrack: {
23+
type: Boolean,
24+
default: false
25+
}
26+
})
27+
28+
projectSchema.index({
29+
org: 1,
30+
name: 1
31+
}, {unique: true})
32+
33+
34+
projectSchema.virtual('budgetLeft').get(function() {
35+
return this.budget - this.spent
36+
})
37+
module.exports = mongoose.model('project', projectSchema)

exercises/queries/__test__/queries.spec.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,6 @@ describe('queries', () => {
100100
describe('addRelatedPosts', () => {
101101
test('should not overrided related posts that are there', async () => {
102102
const author = mongoose.Types.ObjectId()
103-
104-
// const posts = await Post.create([
105-
// {title: 'learn things', content: createConent(100), contentLength: 100, author},
106-
// {title: 'lean more things', content: createConent(100), contentLength: 100, author},
107-
// {title: 'lean more things++', content: createConent(100), contentLength: 100, author}
108-
// ])
109103
const post = await Post.create({
110104
author,
111105
title: 'Post',

0 commit comments

Comments
 (0)