utils.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. const mongoUri = process.env.MONGOLAB_URI || process.env.MONGOHQ_URL || process.env.MONGO_URI || 'mongodb://localhost/growi_test';
  2. const mongoose = require('mongoose');
  3. const fs = require('fs');
  4. const helpers = require('@commons/util/helpers');
  5. const Crowi = require('@server/crowi');
  6. const crowi = new Crowi(helpers.root(), process.env);
  7. const models = {};
  8. mongoose.Promise = global.Promise;
  9. before('Create database connection and clean up', (done) => {
  10. if (!mongoUri) {
  11. return done();
  12. }
  13. mongoose.connect(mongoUri, { useNewUrlParser: true });
  14. function clearDB() {
  15. Object.values(mongoose.connection.collections).forEach((collection) => {
  16. collection.remove(() => {});
  17. });
  18. return done();
  19. }
  20. if (mongoose.connection.readyState === 0) {
  21. mongoose.connect(mongoUri, { useNewUrlParser: true }, (err) => {
  22. if (err) {
  23. throw err;
  24. }
  25. return clearDB();
  26. });
  27. }
  28. return clearDB();
  29. });
  30. after('Close database connection', (done) => {
  31. if (!mongoUri) {
  32. return done();
  33. }
  34. mongoose.disconnect();
  35. return done();
  36. });
  37. // Setup Models
  38. fs.readdirSync(helpers.root('src/server/models')).forEach((file) => {
  39. if (file.match(/^([\w-]+)\.js$/)) {
  40. const name = RegExp.$1;
  41. if (name === 'index') {
  42. return;
  43. }
  44. let modelName = '';
  45. name.split('-').forEach((splitted) => {
  46. modelName += (splitted.charAt(0).toUpperCase() + splitted.slice(1));
  47. });
  48. models[modelName] = require(`@server/models/${file}`)(crowi);
  49. }
  50. });
  51. crowi.models = models;
  52. module.exports = {
  53. models,
  54. mongoose,
  55. };