utils.js 1.5 KB

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