From 6bd9d474fcf69b654de02a7845c17085bf7ee3d0 Mon Sep 17 00:00:00 2001 From: "mike.rode" Date: Sun, 24 Feb 2019 00:04:43 -0600 Subject: [PATCH] Fixed db table names. --- coverage/index.html | 38 +++--- coverage/recommend/config/index.html | 2 +- coverage/recommend/config/index.js.html | 2 +- coverage/recommend/config/plex.js.html | 2 +- coverage/recommend/config/test.js.html | 2 +- coverage/recommend/index.html | 19 +-- coverage/recommend/index.js.html | 2 +- .../recommend/server/controllers/index.html | 2 +- .../controllers/plex.controller.js.html | 2 +- coverage/recommend/server/index.html | 2 +- coverage/recommend/server/index.js.html | 2 +- coverage/recommend/server/models/index.html | 52 +++---- .../recommend/server/models/index.js.html | 129 ++++++++++-------- .../server/models/plexLibrary.js.html | 49 +++---- .../server/models/plexSection.js.html | 51 ++++--- coverage/recommend/server/models/user.js.html | 40 ++++-- coverage/recommend/server/routes/index.html | 2 +- .../server/routes/plex.route.js.html | 2 +- .../server/services/plex/auth.js.html | 2 +- .../server/services/plex/helpers.js.html | 2 +- .../server/services/plex/importData.js.html | 2 +- .../recommend/server/services/plex/index.html | 2 +- .../server/services/plex/index.js.html | 2 +- .../server/services/plex/plexApi.js.html | 2 +- migrations/20190224043920-create-user.js | 4 +- .../20190224045315-create-plex-library.js | 7 +- .../20190224045418-create-plex-section.js | 6 +- package-lock.json | 6 + package.json | 1 + server/models/plexLibrary.js | 3 +- server/models/plexSection.js | 5 +- server/models/user.js | 4 +- server/services/plex/importData.js | 6 +- test/factories/index.js | 8 ++ test/factories/user.js | 32 +++++ test/server/models/plexSection.test.js | 34 +++-- test/truncate.js | 19 +++ 37 files changed, 329 insertions(+), 218 deletions(-) create mode 100644 test/factories/index.js create mode 100644 test/factories/user.js create mode 100644 test/truncate.js diff --git a/coverage/index.html b/coverage/index.html index 1067d9d..3c2a754 100644 --- a/coverage/index.html +++ b/coverage/index.html @@ -20,24 +20,24 @@
- 77.55% + 78.54% Statements - 152/196 + 161/205
- 72% + 68.97% Branches - 18/25 + 20/29
- 66% + 67.92% Functions - 33/50 + 36/53
- 77.44% + 78.43% Lines - 151/195 + 160/204

@@ -65,13 +65,13 @@ recommend

100% - 5/5 + 3/3 100% 0/0 100% 0/0 100% - 5/5 + 3/3 @@ -115,15 +115,15 @@ recommend/server/models -
- 95.83% - 23/24 - 80% - 4/5 +
+ 97.14% + 34/35 + 66.67% + 6/9 100% - 6/6 - 95.83% - 23/24 + 9/9 + 97.14% + 34/35 @@ -158,7 +158,7 @@ diff --git a/coverage/recommend/config/index.html b/coverage/recommend/config/index.html index 33fe1a2..290c97f 100644 --- a/coverage/recommend/config/index.html +++ b/coverage/recommend/config/index.html @@ -106,7 +106,7 @@ diff --git a/coverage/recommend/config/index.js.html b/coverage/recommend/config/index.js.html index 445b3e4..375680c 100644 --- a/coverage/recommend/config/index.js.html +++ b/coverage/recommend/config/index.js.html @@ -94,7 +94,7 @@ export default {server: _.merge(defaultConfig, envConfig), plex: plexConfig}; diff --git a/coverage/recommend/config/plex.js.html b/coverage/recommend/config/plex.js.html index d700f10..bf0429f 100644 --- a/coverage/recommend/config/plex.js.html +++ b/coverage/recommend/config/plex.js.html @@ -73,7 +73,7 @@ export default plexConfig; diff --git a/coverage/recommend/config/test.js.html b/coverage/recommend/config/test.js.html index c11d770..3bd4119 100644 --- a/coverage/recommend/config/test.js.html +++ b/coverage/recommend/config/test.js.html @@ -70,7 +70,7 @@ export default testConfig; diff --git a/coverage/recommend/index.html b/coverage/recommend/index.html index 40515af..3ba6c5c 100644 --- a/coverage/recommend/index.html +++ b/coverage/recommend/index.html @@ -22,7 +22,7 @@
100% Statements - 5/5 + 3/3
100% @@ -37,7 +37,7 @@
100% Lines - 5/5 + 3/3

@@ -62,19 +62,6 @@ - .sequelizerc -

- 100% - 2/2 - 100% - 0/0 - 100% - 0/0 - 100% - 2/2 - - - index.js
100% @@ -93,7 +80,7 @@ diff --git a/coverage/recommend/index.js.html b/coverage/recommend/index.js.html index 00b4d6b..158fd23 100644 --- a/coverage/recommend/index.js.html +++ b/coverage/recommend/index.js.html @@ -76,7 +76,7 @@ export default server.create(config); diff --git a/coverage/recommend/server/controllers/index.html b/coverage/recommend/server/controllers/index.html index 32d6103..198a5b8 100644 --- a/coverage/recommend/server/controllers/index.html +++ b/coverage/recommend/server/controllers/index.html @@ -80,7 +80,7 @@ diff --git a/coverage/recommend/server/controllers/plex.controller.js.html b/coverage/recommend/server/controllers/plex.controller.js.html index 05e797a..217beb1 100644 --- a/coverage/recommend/server/controllers/plex.controller.js.html +++ b/coverage/recommend/server/controllers/plex.controller.js.html @@ -109,7 +109,7 @@ export default router; diff --git a/coverage/recommend/server/index.html b/coverage/recommend/server/index.html index 3781fdf..a42c679 100644 --- a/coverage/recommend/server/index.html +++ b/coverage/recommend/server/index.html @@ -80,7 +80,7 @@ diff --git a/coverage/recommend/server/index.js.html b/coverage/recommend/server/index.js.html index 0a9b8ed..20a7aa6 100644 --- a/coverage/recommend/server/index.js.html +++ b/coverage/recommend/server/index.js.html @@ -178,7 +178,7 @@ export default () => { diff --git a/coverage/recommend/server/models/index.html b/coverage/recommend/server/models/index.html index 95e781f..1c17b6a 100644 --- a/coverage/recommend/server/models/index.html +++ b/coverage/recommend/server/models/index.html @@ -20,24 +20,24 @@
- 95.83% + 97.14% Statements - 23/24 + 34/35
- 80% + 66.67% Branches - 4/5 + 6/9
100% Functions - 6/6 + 9/9
- 95.83% + 97.14% Lines - 23/24 + 34/35

@@ -63,54 +63,54 @@ index.js -

- 93.33% - 14/15 - 80% - 4/5 +
+ 95% + 19/20 + 66.67% + 6/9 100% 3/3 - 93.33% - 14/15 + 95% + 19/20 - plexLibrary.js + plexlibrary.js
100% - 3/3 + 4/4 100% 0/0 100% - 1/1 + 2/2 100% - 3/3 + 4/4 - plexSection.js + plexsection.js
100% - 3/3 + 6/6 100% 0/0 100% - 1/1 + 2/2 100% - 3/3 + 6/6 user.js
100% - 3/3 + 5/5 100% 0/0 100% - 1/1 + 2/2 100% - 3/3 + 5/5 @@ -119,7 +119,7 @@ diff --git a/coverage/recommend/server/models/index.js.html b/coverage/recommend/server/models/index.js.html index 5bbe1df..1c6a6f3 100644 --- a/coverage/recommend/server/models/index.js.html +++ b/coverage/recommend/server/models/index.js.html @@ -20,14 +20,14 @@
- 93.33% + 95% Statements - 14/15 + 19/20
- 80% + 66.67% Branches - 4/5 + 6/9
100% @@ -35,9 +35,9 @@ 3/3
- 93.33% + 95% Lines - 14/15 + 19/20

@@ -81,74 +81,95 @@ 33 34 35 -36  -  -  -  +36 +37 +38 +39 +40 +41 +42 +431x +1x 1x -  -  -  -  -  -  -  -  -    1x 1x 1x -4x 1x -3x -3x -3x +    1x -5x     1x       +  +  +  +  +1x +  +4x +  +  +  +  +3x +3x +  +  +1x +3x +3x +  +  +  +1x 1x   1x - 

import Sequelize from 'sequelize';
-import fs from 'fs';
-import path from 'path';
+ 
const fs = require('fs');
+const path = require('path');
+const Sequelize = require('sequelize');
  
-const sequelize = new Sequelize(
-  process.env.DATABASE,
-  process.env.DATABASE_USER,
-  process.env.DATABASE_PASSWORD,
-  {
-    dialect: 'postgres',
-    host: 'localhost',
-    logging: false,
-  },
-);
+const basename = path.basename(__filename);
+const env = process.env.NODE_ENV || 'development';
+const config = require(`${__dirname}/../../config/config.json`)[env];
+const db = {};
+ 
+let sequelize;
+Iif (config.use_env_variable) {
+  sequelize = new Sequelize(process.env[config.use_env_variable], config);
+} else {
+  sequelize = new Sequelize(
+    config.database,
+    config.username,
+    config.password,
+    config,
+  );
+}
  
-const basename = path.basename(module.filename);
-const db = {Sequelize, sequelize};
-const onlyModels = file =>
-  file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js';
-const importModel = file => {
-  const modelPath = path.join(__dirname, file);
-  const model = sequelize.import(modelPath);
-  db[model.name] = model;
-};
-const associate = modelName => {
-  Iif (typeof db[modelName].associate === 'function')
-    db[modelName].associate(db);
-};
 fs.readdirSync(__dirname)
-  .filter(onlyModels)
-  .forEach(importModel);
+  .filter(file => {
+    return (
+      file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js'
+    );
+  })
+  .forEach(file => {
+    const model = sequelize.import(path.join(__dirname, file));
+    db[model.name] = model;
+  });
  
-Object.keys(db).forEach(associate);
+Object.keys(db).forEach(modelName => {
+  Eif (db[modelName].associate) {
+    db[modelName].associate(db);
+  }
+});
+ 
+db.sequelize = sequelize;
+db.Sequelize = Sequelize;
  
 module.exports = db;
  
@@ -157,7 +178,7 @@ module.exports = db; diff --git a/coverage/recommend/server/models/plexLibrary.js.html b/coverage/recommend/server/models/plexLibrary.js.html index ed21461..f9c5dcc 100644 --- a/coverage/recommend/server/models/plexLibrary.js.html +++ b/coverage/recommend/server/models/plexLibrary.js.html @@ -1,7 +1,7 @@ - Code coverage report for recommend/server/models/plexLibrary.js + Code coverage report for recommend/server/models/plexlibrary.js @@ -16,13 +16,13 @@

- All files / recommend/server/models plexLibrary.js + All files / recommend/server/models plexlibrary.js

100% Statements - 3/3 + 4/4
100% @@ -32,12 +32,12 @@
100% Functions - 1/1 + 2/2
100% Lines - 3/3 + 4/4

@@ -66,7 +66,8 @@ 18 19 20 -211x +21 +221x 1x     @@ -85,34 +86,36 @@ 1x     +1x   - 

const model = (sequelize, DataTypes) => {
-  const PlexLibrary = sequelize.define('plex_library', {
-    title: {
+ 
module.exports = (sequelize, DataTypes) => {
+  const PlexLibrary = sequelize.define(
+    'plexlibrary',
+    {
       type: DataTypes.STRING,
-      unique: true,
+      views: DataTypes.INTEGER,
+      rating_key: DataTypes.INTEGER,
+      metadata_path: DataTypes.STRING,
+      summary: DataTypes.STRING,
+      rating: DataTypes.FLOAT,
+      year: DataTypes.INTEGER,
+      genre: DataTypes.STRING,
     },
-    type: DataTypes.STRING,
-    views: DataTypes.INTEGER,
-    rating_key: DataTypes.INTEGER,
-    metadata_path: DataTypes.STRING,
-    summary: DataTypes.TEXT,
-    rating: DataTypes.FLOAT,
-    year: DataTypes.INTEGER,
-    genre: DataTypes.STRING,
-  });
- 
+    {},
+  );
+  // eslint-disable-next-line no-unused-vars
+  PlexLibrary.associate = function(models) {
+    // associations can be defined here
+  };
   return PlexLibrary;
 };
- 
-export default model;
  
diff --git a/coverage/recommend/server/models/plexSection.js.html b/coverage/recommend/server/models/plexSection.js.html index fb31c1b..ca9d4d9 100644 --- a/coverage/recommend/server/models/plexSection.js.html +++ b/coverage/recommend/server/models/plexSection.js.html @@ -1,7 +1,7 @@ - Code coverage report for recommend/server/models/plexSection.js + Code coverage report for recommend/server/models/plexsection.js @@ -16,13 +16,13 @@

- All files / recommend/server/models plexSection.js + All files / recommend/server/models plexsection.js

100% Statements - 3/3 + 6/6
100% @@ -32,12 +32,12 @@
100% Functions - 1/1 + 2/2
100% Lines - 3/3 + 6/6

@@ -57,35 +57,50 @@ 9 10 11 -121x -2x +12 +13 +14 +15 +16 +171x +1x           -2x       - 

const model = (sequelize, DataTypes) => {
-  const PlexSection = sequelize.define('plex_section', {
-    title: DataTypes.STRING,
-    type: DataTypes.STRING,
-    key: DataTypes.INTEGER,
-  });
- 
+1x
+1x
+1x
+ 
+1x
+ 
+ 
module.exports = (sequelize, DataTypes) => {
+  const PlexSection = sequelize.define(
+    'plexsection',
+    {
+      title: DataTypes.STRING,
+      type: DataTypes.STRING,
+      key: DataTypes.INTEGER,
+    },
+    {},
+  );
+  PlexSection.associate = function(models) {
+    console.log(models);
+    PlexSection.belongsTo(models.user);
+  };
   return PlexSection;
 };
- 
-export default model;
  
diff --git a/coverage/recommend/server/models/user.js.html b/coverage/recommend/server/models/user.js.html index 7bfc5a9..9d40b87 100644 --- a/coverage/recommend/server/models/user.js.html +++ b/coverage/recommend/server/models/user.js.html @@ -22,7 +22,7 @@
100% Statements - 3/3 + 5/5
100% @@ -32,12 +32,12 @@
100% Functions - 1/1 + 2/2
100% Lines - 3/3 + 5/5

@@ -57,35 +57,47 @@ 9 10 11 -121x +12 +13 +14 +15 +161x 1x           +  +  +  +1x 1x   +1x   -  - 

const model = (sequelize, DataTypes) => {
-  const User = sequelize.define('user', {
-    username: {
-      type: DataTypes.STRING,
+ 
module.exports = (sequelize, DataTypes) => {
+  const User = sequelize.define(
+    'user',
+    {
+      firstName: DataTypes.STRING,
+      lastName: DataTypes.STRING,
+      email: DataTypes.STRING,
     },
-  });
- 
+    {},
+  );
+  User.associate = function(models) {
+    User.hasMany(models.plexsection);
+  };
   return User;
 };
- 
-export default model;
  
diff --git a/coverage/recommend/server/routes/index.html b/coverage/recommend/server/routes/index.html index 028a09c..713ac5e 100644 --- a/coverage/recommend/server/routes/index.html +++ b/coverage/recommend/server/routes/index.html @@ -80,7 +80,7 @@ diff --git a/coverage/recommend/server/routes/plex.route.js.html b/coverage/recommend/server/routes/plex.route.js.html index bbb4e63..52ffab6 100644 --- a/coverage/recommend/server/routes/plex.route.js.html +++ b/coverage/recommend/server/routes/plex.route.js.html @@ -79,7 +79,7 @@ export default router; diff --git a/coverage/recommend/server/services/plex/auth.js.html b/coverage/recommend/server/services/plex/auth.js.html index 5777ae3..f3c2acd 100644 --- a/coverage/recommend/server/services/plex/auth.js.html +++ b/coverage/recommend/server/services/plex/auth.js.html @@ -130,7 +130,7 @@ export default fetchToken; diff --git a/coverage/recommend/server/services/plex/helpers.js.html b/coverage/recommend/server/services/plex/helpers.js.html index 6be6037..4373446 100644 --- a/coverage/recommend/server/services/plex/helpers.js.html +++ b/coverage/recommend/server/services/plex/helpers.js.html @@ -208,7 +208,7 @@ export default {formatResponse, buildUrl, request}; diff --git a/coverage/recommend/server/services/plex/importData.js.html b/coverage/recommend/server/services/plex/importData.js.html index 058c98a..93f8941 100644 --- a/coverage/recommend/server/services/plex/importData.js.html +++ b/coverage/recommend/server/services/plex/importData.js.html @@ -337,7 +337,7 @@ export default {importSections, importLibraries, importMostWatched}; diff --git a/coverage/recommend/server/services/plex/index.html b/coverage/recommend/server/services/plex/index.html index 0851789..5259e92 100644 --- a/coverage/recommend/server/services/plex/index.html +++ b/coverage/recommend/server/services/plex/index.html @@ -132,7 +132,7 @@ diff --git a/coverage/recommend/server/services/plex/index.js.html b/coverage/recommend/server/services/plex/index.js.html index 8589662..98efe99 100644 --- a/coverage/recommend/server/services/plex/index.js.html +++ b/coverage/recommend/server/services/plex/index.js.html @@ -244,7 +244,7 @@ export default { diff --git a/coverage/recommend/server/services/plex/plexApi.js.html b/coverage/recommend/server/services/plex/plexApi.js.html index 73d4cc5..552090f 100644 --- a/coverage/recommend/server/services/plex/plexApi.js.html +++ b/coverage/recommend/server/services/plex/plexApi.js.html @@ -322,7 +322,7 @@ export default { diff --git a/migrations/20190224043920-create-user.js b/migrations/20190224043920-create-user.js index e84af70..80c67d3 100644 --- a/migrations/20190224043920-create-user.js +++ b/migrations/20190224043920-create-user.js @@ -1,6 +1,6 @@ module.exports = { up(queryInterface, Sequelize) { - return queryInterface.createTable('users', { + return queryInterface.createTable('Users', { id: { allowNull: false, autoIncrement: true, @@ -28,6 +28,6 @@ module.exports = { }, // eslint-disable-next-line no-unused-vars down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('users'); + return queryInterface.dropTable('Users'); }, }; diff --git a/migrations/20190224045315-create-plex-library.js b/migrations/20190224045315-create-plex-library.js index 4d8393e..656dd25 100644 --- a/migrations/20190224045315-create-plex-library.js +++ b/migrations/20190224045315-create-plex-library.js @@ -1,12 +1,15 @@ module.exports = { up: (queryInterface, Sequelize) => { - return queryInterface.createTable('plexlibraries', { + return queryInterface.createTable('PlexLibraries', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER, }, + title: { + type: Sequelize.STRING, + }, type: { type: Sequelize.STRING, }, @@ -43,6 +46,6 @@ module.exports = { }, // eslint-disable-next-line no-unused-vars down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('plexlibraries'); + return queryInterface.dropTable('PlexLibraries'); }, }; diff --git a/migrations/20190224045418-create-plex-section.js b/migrations/20190224045418-create-plex-section.js index 15272cd..e5d7961 100644 --- a/migrations/20190224045418-create-plex-section.js +++ b/migrations/20190224045418-create-plex-section.js @@ -1,6 +1,6 @@ module.exports = { up: (queryInterface, Sequelize) => { - return queryInterface.createTable('plexsections', { + return queryInterface.createTable('PlexSections', { id: { allowNull: false, autoIncrement: true, @@ -27,7 +27,7 @@ module.exports = { userId: { type: Sequelize.INTEGER, references: { - model: 'users', + model: 'Users', key: 'id', }, }, @@ -35,6 +35,6 @@ module.exports = { }, // eslint-disable-next-line no-unused-vars down: (queryInterface, Sequelize) => { - return queryInterface.dropTable('plexsections'); + return queryInterface.dropTable('PlexSections'); }, }; diff --git a/package-lock.json b/package-lock.json index a538d6e..5dd698e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2782,6 +2782,12 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "faker": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz", + "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=", + "dev": true + }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", diff --git a/package.json b/package.json index e86ae19..82964de 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "eslint-plugin-import": "^2.16.0", "eslint-plugin-prefer-arrow": "^1.1.4", "eslint-plugin-prettier": "3.0.1", + "faker": "^4.1.0", "husky": "1.3.1", "i": "^0.3.6", "lint-staged": "8.1.3", diff --git a/server/models/plexLibrary.js b/server/models/plexLibrary.js index 6122428..fd02644 100644 --- a/server/models/plexLibrary.js +++ b/server/models/plexLibrary.js @@ -1,7 +1,8 @@ module.exports = (sequelize, DataTypes) => { const PlexLibrary = sequelize.define( - 'plexlibrary', + 'PlexLibrary', { + title: DataTypes.STRING, type: DataTypes.STRING, views: DataTypes.INTEGER, rating_key: DataTypes.INTEGER, diff --git a/server/models/plexSection.js b/server/models/plexSection.js index 50a1b6f..a5bf0f5 100644 --- a/server/models/plexSection.js +++ b/server/models/plexSection.js @@ -1,6 +1,6 @@ module.exports = (sequelize, DataTypes) => { const PlexSection = sequelize.define( - 'plexsection', + 'PlexSection', { title: DataTypes.STRING, type: DataTypes.STRING, @@ -9,8 +9,7 @@ module.exports = (sequelize, DataTypes) => { {}, ); PlexSection.associate = function(models) { - console.log(models); - PlexSection.belongsTo(models.user); + PlexSection.belongsTo(models.User); }; return PlexSection; }; diff --git a/server/models/user.js b/server/models/user.js index e290193..b7efa17 100644 --- a/server/models/user.js +++ b/server/models/user.js @@ -1,6 +1,6 @@ module.exports = (sequelize, DataTypes) => { const User = sequelize.define( - 'user', + 'User', { firstName: DataTypes.STRING, lastName: DataTypes.STRING, @@ -9,7 +9,7 @@ module.exports = (sequelize, DataTypes) => { {}, ); User.associate = function(models) { - User.hasMany(models.plexsection); + User.hasMany(models.PlexSection); }; return User; }; diff --git a/server/services/plex/importData.js b/server/services/plex/importData.js index da760a1..d0076db 100644 --- a/server/services/plex/importData.js +++ b/server/services/plex/importData.js @@ -1,8 +1,7 @@ -import plexApiClient from './plexApi'; +import plexApi from './plexApi'; import models from '../../models'; const importSections = async () => { - const plexApi = plexApiClient(); const sections = await plexApi.getSections(); createSections(sections); return sections; @@ -20,7 +19,6 @@ const createSections = sections => { }; const importLibraries = async () => { - const plexApi = plexApiClient(); const sections = await plexApi.getSections(); sections.forEach(async section => { await importLibrary(section.key); @@ -28,7 +26,6 @@ const importLibraries = async () => { }; const importMostWatched = async req => { - const plexApi = plexApiClient(); const mostWatched = await plexApi.getMostWatched(req); mostWatched.forEach(async libraryData => { await updateLibrary([libraryData]); @@ -36,7 +33,6 @@ const importMostWatched = async req => { }; const importLibrary = async sectionId => { - const plexApi = plexApiClient(); const libraryData = await plexApi.getLibraryDataBySection({ sectionId, }); diff --git a/test/factories/index.js b/test/factories/index.js new file mode 100644 index 0000000..5010a60 --- /dev/null +++ b/test/factories/index.js @@ -0,0 +1,8 @@ +import { forEach } from 'lodash'; +import requireDirectory from 'require-directory'; + +const factories = requireDirectory(module, './'); + +forEach(factories, (value, key) => { + factories[key] = value.default; +}); diff --git a/test/factories/user.js b/test/factories/user.js new file mode 100644 index 0000000..95e312d --- /dev/null +++ b/test/factories/user.js @@ -0,0 +1,32 @@ +import faker from 'faker'; + +import models from '../../server/models'; + +/** + * Generate an object which contains attributes needed + * to successfully create a user instance. + * + * @param {Object} props Properties to use for the user. + * + * @return {Object} An object to build the user from. + */ +const data = async (props = {}) => { + const defaultProps = { + email: faker.internet.email(), + first_name: faker.name.firstName(), + last_name: faker.name.lastName(), + createdAt: faker.date.soon(1), + updatedAt: faker.date.soon(1), + }; + + return Object.assign({}, defaultProps, props); +}; + +/** + * Generates a user instance from the properties provided. + * + * @param {Object} props Properties to use for the user. + * + * @return {Object} A user instance + */ +export default async (props = {}) => models.User.create(await data(props)); diff --git a/test/server/models/plexSection.test.js b/test/server/models/plexSection.test.js index 3624f52..7d8ceeb 100644 --- a/test/server/models/plexSection.test.js +++ b/test/server/models/plexSection.test.js @@ -1,18 +1,26 @@ -import plexSection from '../../../server/models/plexSection'; +import { assert } from 'chai'; +import factories from '../../factories'; +import truncate from '../../truncate'; -const { - sequelize, - dataTypes, - checkModelName, - checkPropertyExists, -} = require('sequelize-test-helpers'); +import models from '../../../server/models'; -describe('server/models/plexSection', () => { - const Model = plexSection(sequelize, dataTypes); - const instance = new Model(); +describe('User model', () => { + let user; - checkModelName(Model)('plex_section'); - context('properties', () => { - ['title', 'type', 'key', 'userId'].forEach(checkPropertyExists(instance)); + beforeEach(async () => { + await truncate(); + + console.log('mike=========', factories); + user = await factories.user(); + }); + + it('should generate a user from the factory', async () => { + assert.isOk(user.id); + }); + + it('should truncate the user table with each test', async () => { + const count = await models.User.count(); + + assert.equal(count, 1); }); }); diff --git a/test/truncate.js b/test/truncate.js new file mode 100644 index 0000000..3386734 --- /dev/null +++ b/test/truncate.js @@ -0,0 +1,19 @@ +import models from '../server/models'; + +const truncateTable = modelName => models[modelName].destroy({ + where: {}, + force: true, +}); + +export default async function truncate(model) { + if (model) { + return truncateTable(model); + } + + return Promise.all( + Object.keys(models).map((key) => { + if (['sequelize', 'Sequelize'].includes(key)) return null; + return truncateTable(key); + }), + ); +}