Skip to content

Commit 1b353b6

Browse files
feat(seed): add tasks in seed ✨
1 parent 042deac commit 1b353b6

File tree

7 files changed

+978
-766
lines changed

7 files changed

+978
-766
lines changed

config/defaults/development.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ module.exports = {
142142
seed: true,
143143
options: {
144144
logResults: true,
145+
seedTasks: [{
146+
title: 'title1',
147+
description: 'do something about something else',
148+
}, {
149+
title: 'title2',
150+
description: 'do something about something else',
151+
}],
145152
seedUser: {
146153
username: 'seeduser',
147154
provider: 'local',

gulpfile.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,11 @@ const seedMongoose = async () => {
158158
await mongooseService.connect();
159159
await mongooseService.loadModels();
160160
const UserService = require(path.resolve('./modules/users/services/user.service'));
161+
const TaskService = require(path.resolve('./modules/tasks/services/tasks.service'));
161162
const seed = require(path.resolve('./lib/services/seed'));
162163
await seed.start({
163164
logResults: true,
164-
}, UserService).catch((e) => {
165+
}, UserService, TaskService).catch((e) => {
165166
console.log(e);
166167
});
167168
await mongooseService.disconnect();

lib/services/mongoose.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ const chalk = require('chalk');
66
const path = require('path');
77
const mongoose = require('mongoose');
88
const config = require('../../config');
9-
// const seed = require('./seed');
109

1110
/**
1211
* Load all mongoose related models

lib/services/seed.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,18 @@ const seedTheUser = (UserService, user) => async (password) => {
2626
}
2727
};
2828

29-
module.exports.start = async (options, UserService) => {
29+
// save the specified user with the password provided from the resolved promise
30+
const seedTasks = async (TaskService, task, user) => {
31+
try {
32+
const result = await TaskService.create(task, user);
33+
if (seedOptions.logResults) console.log(chalk.bold.red(`Database Seeding:\t\t\tLocal ${task.title} added`));
34+
return result;
35+
} catch (err) {
36+
throw new AppError('Failed to seedTasks.', { code: 'LIB_ERROR' });
37+
}
38+
};
39+
40+
module.exports.start = async (options, UserService, TaskService) => {
3041
let pwd;
3142
const result = [];
3243

@@ -35,6 +46,8 @@ module.exports.start = async (options, UserService) => {
3546
if (_.has(options, 'logResults')) seedOptions.logResults = options.logResults;
3647
if (_.has(options, 'seedUser')) seedOptions.seedUser = options.seedUser;
3748
if (_.has(options, 'seedAdmin')) seedOptions.seedAdmin = options.seedAdmin;
49+
if (_.has(options, 'seedTasks')) seedOptions.seedTasks = options.seedTasks;
50+
3851

3952
try {
4053
if (process.env.NODE_ENV === 'production') {
@@ -45,6 +58,11 @@ module.exports.start = async (options, UserService) => {
4558
result.push(await seedTheUser(UserService, seedOptions.seedUser)(pwd));
4659
pwd = await UserService.generateRandomPassphrase();
4760
result.push(await seedTheUser(UserService, seedOptions.seedAdmin)(pwd));
61+
62+
if (process.env.NODE_ENV === 'development') {
63+
result.push(await seedTasks(TaskService, seedOptions.seedTasks[0], result[0]));
64+
result.push(await seedTasks(TaskService, seedOptions.seedTasks[1], result[1]));
65+
}
4866
}
4967
} catch (err) {
5068
console.log(err);

modules/core/tests/core.config.tests.js

Lines changed: 74 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ const seed = require(path.resolve('./lib/services/seed'));
1515
*/
1616
describe('Configuration Tests:', () => {
1717
let UserService = null;
18+
let TaskService = null;
1819

1920
beforeAll(() => mongooseService.connect()
2021
.then(() => {
2122
mongooseService.loadModels();
2223
UserService = require(path.resolve('./modules/users/services/user.service'));
24+
TaskService = require(path.resolve('./modules/tasks/services/tasks.service'));
2325
})
2426
.catch((e) => {
2527
console.log(e);
@@ -29,6 +31,7 @@ describe('Configuration Tests:', () => {
2931
let admin1;
3032
let userFromSeedConfig;
3133
let adminFromSeedConfig;
34+
let tasksFromSeedConfig;
3235

3336
let originalLogConfig;
3437

@@ -56,10 +59,11 @@ describe('Configuration Tests:', () => {
5659

5760
userFromSeedConfig = config.seedDB.options.seedUser;
5861
adminFromSeedConfig = config.seedDB.options.seedAdmin;
62+
tasksFromSeedConfig = config.seedDB.options.seedTasks;
5963
done();
6064
});
6165

62-
it('should have seedDB configuration set for "regular" user', (done) => {
66+
it('should have seedDB configuration set for user', (done) => {
6367
expect(userFromSeedConfig).toBeInstanceOf(Object);
6468
expect(typeof userFromSeedConfig.username).toBe('string');
6569
expect(typeof userFromSeedConfig.email).toBe('string');
@@ -73,22 +77,29 @@ describe('Configuration Tests:', () => {
7377
done();
7478
});
7579

80+
it('should have seedDB configuration set for tasks', (done) => {
81+
expect(tasksFromSeedConfig).toBeInstanceOf(Array);
82+
expect(typeof tasksFromSeedConfig[0].title).toBe('string');
83+
expect(typeof tasksFromSeedConfig[1].title).toBe('string');
84+
done();
85+
});
86+
7687
it('should seed ONLY the admin user account when NODE_ENV is set to "production"', async () => {
7788
const nodeEnv = process.env.NODE_ENV;
7889
process.env.NODE_ENV = 'production';
79-
let seedusers;
90+
let result;
8091

8192
try {
82-
seedusers = await seed.start({ logResults: false }, UserService);
83-
expect(seedusers).toBeInstanceOf(Array);
84-
expect(seedusers).toHaveLength(1);
93+
result = await seed.start({ logResults: false }, UserService, TaskService);
94+
expect(result).toBeInstanceOf(Array);
95+
expect(result).toHaveLength(1);
8596
} catch (err) {
8697
console.log(err);
8798
expect(err).toBeFalsy();
8899
}
89100

90101
try {
91-
await UserService.delete({ id: seedusers[0]._id });
102+
await UserService.delete({ id: result[0]._id });
92103
} catch (err) {
93104
console.log(err);
94105
expect(err).toBeFalsy();
@@ -97,23 +108,50 @@ describe('Configuration Tests:', () => {
97108
process.env.NODE_ENV = nodeEnv;
98109
});
99110

100-
it('should seed admin, and regular user accounts when NODE_ENV is set to "test"', async () => {
111+
it('should seed admin, user accounts when NODE_ENV is set to "test"', async () => {
101112
const nodeEnv = process.env.NODE_ENV;
102113
process.env.NODE_ENV = 'test';
103-
let seedusers;
114+
let result;
104115

105116
try {
106-
seedusers = await seed.start({ logResults: false }, UserService);
107-
expect(seedusers).toBeInstanceOf(Array);
108-
expect(seedusers).toHaveLength(2);
117+
result = await seed.start({ logResults: false }, UserService, TaskService);
118+
expect(result).toBeInstanceOf(Array);
119+
expect(result).toHaveLength(2);
109120
} catch (err) {
110121
console.log(err);
111122
expect(err).toBeFalsy();
112123
}
113124

114125
try {
115-
await UserService.delete({ id: seedusers[0]._id });
116-
await UserService.delete({ id: seedusers[1]._id });
126+
await UserService.delete({ id: result[0]._id });
127+
await UserService.delete({ id: result[1]._id });
128+
} catch (err) {
129+
console.log(err);
130+
expect(err).toBeFalsy();
131+
}
132+
133+
process.env.NODE_ENV = nodeEnv;
134+
});
135+
136+
it('should seed admin, user accounts and tasks when NODE_ENV is set to "development"', async () => {
137+
const nodeEnv = process.env.NODE_ENV;
138+
process.env.NODE_ENV = 'development';
139+
let result;
140+
141+
try {
142+
result = await seed.start({ logResults: false }, UserService, TaskService);
143+
expect(result).toBeInstanceOf(Array);
144+
expect(result).toHaveLength(4);
145+
} catch (err) {
146+
console.log(err);
147+
expect(err).toBeFalsy();
148+
}
149+
150+
try {
151+
await UserService.delete({ id: result[0]._id });
152+
await UserService.delete({ id: result[1]._id });
153+
await TaskService.delete({ id: result[2]._id });
154+
await TaskService.delete({ id: result[3]._id });
117155
} catch (err) {
118156
console.log(err);
119157
expect(err).toBeFalsy();
@@ -128,7 +166,7 @@ describe('Configuration Tests:', () => {
128166
process.env.NODE_ENV = 'test';
129167
let _user;
130168
let _admin;
131-
let seedusers;
169+
let result;
132170

133171
try {
134172
_user = await UserService.create(userFromSeedConfig);
@@ -150,17 +188,17 @@ describe('Configuration Tests:', () => {
150188
}
151189

152190
try {
153-
seedusers = await seed.start({ logResults: false }, UserService);
154-
expect(seedusers).toBeInstanceOf(Array);
155-
expect(seedusers).toHaveLength(2);
191+
result = await seed.start({ logResults: false }, UserService, TaskService);
192+
expect(result).toBeInstanceOf(Array);
193+
expect(result).toHaveLength(2);
156194
} catch (err) {
157195
console.log(err);
158196
expect(err).toBeFalsy();
159197
}
160198

161199
try {
162-
await UserService.delete({ id: seedusers[0]._id });
163-
await UserService.delete({ id: seedusers[1]._id });
200+
await UserService.delete({ id: result[0]._id });
201+
await UserService.delete({ id: result[1]._id });
164202
} catch (err) {
165203
console.log(err);
166204
expect(err).toBeFalsy();
@@ -172,20 +210,20 @@ describe('Configuration Tests:', () => {
172210
it('should ONLY seed admin user account when NODE_ENV is set to "production" with custom admin', async () => {
173211
const nodeEnv = process.env.NODE_ENV;
174212
process.env.NODE_ENV = 'production';
175-
let seedusers;
213+
let result;
176214

177215
try {
178-
seedusers = await seed.start({ logResults: false, seedAdmin: admin1 }, UserService);
179-
expect(seedusers).toBeInstanceOf(Array);
180-
expect(seedusers).toHaveLength(1);
181-
expect(seedusers[0].username).toBe(admin1.username);
216+
result = await seed.start({ logResults: false, seedAdmin: admin1 }, UserService, TaskService);
217+
expect(result).toBeInstanceOf(Array);
218+
expect(result).toHaveLength(1);
219+
expect(result[0].username).toBe(admin1.username);
182220
} catch (err) {
183221
console.log(err);
184222
expect(err).toBeFalsy();
185223
}
186224

187225
try {
188-
await UserService.delete({ id: seedusers[0]._id });
226+
await UserService.delete({ id: result[0]._id });
189227
} catch (err) {
190228
console.log(err);
191229
expect(err).toBeFalsy();
@@ -197,22 +235,22 @@ describe('Configuration Tests:', () => {
197235
it('should seed admin, and "regular" user accounts when NODE_ENV is set to "test" with custom options', async () => {
198236
const nodeEnv = process.env.NODE_ENV;
199237
process.env.NODE_ENV = 'test';
200-
let seedusers;
238+
let result;
201239

202240
try {
203-
seedusers = await seed.start({ logResults: false, seedAdmin: admin1, seedUser: user1 }, UserService);
204-
expect(seedusers).toBeInstanceOf(Array);
205-
expect(seedusers).toHaveLength(2);
206-
expect(seedusers[0].username).toBe(user1.username);
207-
expect(seedusers[1].username).toBe(admin1.username);
241+
result = await seed.start({ logResults: false, seedAdmin: admin1, seedUser: user1 }, UserService, TaskService);
242+
expect(result).toBeInstanceOf(Array);
243+
expect(result).toHaveLength(2);
244+
expect(result[0].username).toBe(user1.username);
245+
expect(result[1].username).toBe(admin1.username);
208246
} catch (err) {
209247
console.log(err);
210248
expect(err).toBeFalsy();
211249
}
212250

213251
try {
214-
await UserService.delete({ id: seedusers[0]._id });
215-
await UserService.delete({ id: seedusers[1]._id });
252+
await UserService.delete({ id: result[0]._id });
253+
await UserService.delete({ id: result[1]._id });
216254
} catch (err) {
217255
console.log(err);
218256
expect(err).toBeFalsy();
@@ -225,7 +263,7 @@ describe('Configuration Tests:', () => {
225263
const nodeEnv = process.env.NODE_ENV;
226264
process.env.NODE_ENV = 'production';
227265
let _admin;
228-
let seedusers;
266+
let result;
229267

230268
try {
231269
_admin = await UserService.create(adminFromSeedConfig);
@@ -236,8 +274,8 @@ describe('Configuration Tests:', () => {
236274
}
237275

238276
try {
239-
seedusers = await seed.start({ logResults: false }, UserService);
240-
expect(seedusers[0].details[0].message).toBe('Failed due to local account already exists: seedadmin');
277+
result = await seed.start({ logResults: false }, UserService, TaskService);
278+
expect(result[0].details[0].message).toBe('Failed due to local account already exists: seedadmin');
241279
} catch (err) {
242280
console.log(err);
243281
expect(err).toBeFalsy();

0 commit comments

Comments
 (0)