From 0aed2c522a8c584e7cc52984a80f7e61ea53e693 Mon Sep 17 00:00:00 2001 From: RishiRaj Date: Wed, 26 Dec 2018 15:10:23 +0530 Subject: [PATCH 1/2] Added new field subCategory to productTemplates to support Addons --- .../20181226_productTemplates_subCategory.sql | 14 ++++++++++++++ src/models/productTemplate.js | 1 + src/routes/metadata/list.spec.js | 1 + src/routes/milestoneTemplates/clone.spec.js | 2 ++ src/routes/milestoneTemplates/create.spec.js | 2 ++ src/routes/milestoneTemplates/delete.spec.js | 2 ++ src/routes/milestoneTemplates/get.spec.js | 2 ++ src/routes/milestoneTemplates/list.spec.js | 2 ++ src/routes/milestoneTemplates/update.spec.js | 2 ++ src/routes/phases/create.spec.js | 1 + src/routes/productTemplates/create.js | 1 + src/routes/productTemplates/create.spec.js | 1 + src/routes/productTemplates/delete.spec.js | 1 + src/routes/productTemplates/get.spec.js | 1 + src/routes/productTemplates/list.spec.js | 7 +++++-- src/routes/productTemplates/update.spec.js | 1 + src/routes/projectUpgrade/create.spec.js | 1 + src/routes/projects/create.spec.js | 3 +++ src/routes/timelines/create.spec.js | 1 + src/tests/seed.js | 1 + 20 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 migrations/20181226_productTemplates_subCategory.sql diff --git a/migrations/20181226_productTemplates_subCategory.sql b/migrations/20181226_productTemplates_subCategory.sql new file mode 100644 index 00000000..f55056c9 --- /dev/null +++ b/migrations/20181226_productTemplates_subCategory.sql @@ -0,0 +1,14 @@ +-- +-- UPDATE EXISTING TABLES: +-- product_templates: +-- added column `subCategory` + +-- +-- product_templates + +-- Add new column +ALTER TABLE product_templates ADD COLUMN "subCategory" character varying(45); +-- Update new column +UPDATE projects SET "subCategory"="category" WHERE "subCategory" is NULL; +-- Set not null +ALTER TABLE projects ALTER COLUMN "subCategory" SET NOT NULL; diff --git a/src/models/productTemplate.js b/src/models/productTemplate.js index 4e4dc184..f8fd7f17 100644 --- a/src/models/productTemplate.js +++ b/src/models/productTemplate.js @@ -9,6 +9,7 @@ module.exports = (sequelize, DataTypes) => { name: { type: DataTypes.STRING(255), allowNull: false }, productKey: { type: DataTypes.STRING(45), allowNull: false }, category: { type: DataTypes.STRING(45), allowNull: false }, + subCategory: { type: DataTypes.STRING(45), allowNull: false }, icon: { type: DataTypes.STRING(255), allowNull: false }, brief: { type: DataTypes.STRING(45), allowNull: false }, details: { type: DataTypes.STRING(255), allowNull: false }, diff --git a/src/routes/metadata/list.spec.js b/src/routes/metadata/list.spec.js index 7e7c9b4f..86798d21 100644 --- a/src/routes/metadata/list.spec.js +++ b/src/routes/metadata/list.spec.js @@ -30,6 +30,7 @@ const productTemplates = [ name: 'name 1', productKey: 'productKey 1', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', diff --git a/src/routes/milestoneTemplates/clone.spec.js b/src/routes/milestoneTemplates/clone.spec.js index 03ad322a..a0f9bbbd 100644 --- a/src/routes/milestoneTemplates/clone.spec.js +++ b/src/routes/milestoneTemplates/clone.spec.js @@ -14,6 +14,7 @@ const productTemplates = [ name: 'name 1', productKey: 'productKey 1', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', @@ -47,6 +48,7 @@ const productTemplates = [ name: 'name 2', productKey: 'productKey 2', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon1.ico', brief: 'brief 2', details: 'details 2', diff --git a/src/routes/milestoneTemplates/create.spec.js b/src/routes/milestoneTemplates/create.spec.js index 00dad710..beacf71f 100644 --- a/src/routes/milestoneTemplates/create.spec.js +++ b/src/routes/milestoneTemplates/create.spec.js @@ -15,6 +15,7 @@ const productTemplates = [ name: 'name 1', productKey: 'productKey 1', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', @@ -48,6 +49,7 @@ const productTemplates = [ name: 'template 2', productKey: 'productKey 2', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon2.ico', brief: 'brief 2', details: 'details 2', diff --git a/src/routes/milestoneTemplates/delete.spec.js b/src/routes/milestoneTemplates/delete.spec.js index 0d0d5527..92a6dcb6 100644 --- a/src/routes/milestoneTemplates/delete.spec.js +++ b/src/routes/milestoneTemplates/delete.spec.js @@ -40,6 +40,7 @@ const productTemplates = [ name: 'name 1', productKey: 'productKey 1', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', @@ -73,6 +74,7 @@ const productTemplates = [ name: 'template 2', productKey: 'productKey 2', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon2.ico', brief: 'brief 2', details: 'details 2', diff --git a/src/routes/milestoneTemplates/get.spec.js b/src/routes/milestoneTemplates/get.spec.js index 58ce6a5a..50f31370 100644 --- a/src/routes/milestoneTemplates/get.spec.js +++ b/src/routes/milestoneTemplates/get.spec.js @@ -15,6 +15,7 @@ const productTemplates = [ name: 'name 1', productKey: 'productKey 1', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', @@ -48,6 +49,7 @@ const productTemplates = [ name: 'template 2', productKey: 'productKey 2', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon2.ico', brief: 'brief 2', details: 'details 2', diff --git a/src/routes/milestoneTemplates/list.spec.js b/src/routes/milestoneTemplates/list.spec.js index 2ee2f25f..465a388f 100644 --- a/src/routes/milestoneTemplates/list.spec.js +++ b/src/routes/milestoneTemplates/list.spec.js @@ -15,6 +15,7 @@ const productTemplates = [ name: 'name 1', productKey: 'productKey 1', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', @@ -48,6 +49,7 @@ const productTemplates = [ name: 'template 2', productKey: 'productKey 2', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon2.ico', brief: 'brief 2', details: 'details 2', diff --git a/src/routes/milestoneTemplates/update.spec.js b/src/routes/milestoneTemplates/update.spec.js index 68be6f31..3de8c430 100644 --- a/src/routes/milestoneTemplates/update.spec.js +++ b/src/routes/milestoneTemplates/update.spec.js @@ -15,6 +15,7 @@ const productTemplates = [ name: 'name 1', productKey: 'productKey 1', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', @@ -48,6 +49,7 @@ const productTemplates = [ name: 'template 2', productKey: 'productKey 2', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon2.ico', brief: 'brief 2', details: 'details 2', diff --git a/src/routes/phases/create.spec.js b/src/routes/phases/create.spec.js index 8bdcb5d8..69f45a4d 100644 --- a/src/routes/phases/create.spec.js +++ b/src/routes/phases/create.spec.js @@ -97,6 +97,7 @@ describe('Project Phases', () => { name: 'name 1', productKey: 'productKey 1', category: 'generic', + subCategory: 'generic', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', diff --git a/src/routes/productTemplates/create.js b/src/routes/productTemplates/create.js index 8f47ec4f..9907d085 100644 --- a/src/routes/productTemplates/create.js +++ b/src/routes/productTemplates/create.js @@ -16,6 +16,7 @@ const schema = { param: Joi.object().keys({ id: Joi.any().strip(), category: Joi.string().max(45).required(), + subCategory: Joi.string().max(45).required(), name: Joi.string().max(255).required(), productKey: Joi.string().max(45).required(), icon: Joi.string().max(255).required(), diff --git a/src/routes/productTemplates/create.spec.js b/src/routes/productTemplates/create.spec.js index b4da9239..0c283caf 100644 --- a/src/routes/productTemplates/create.spec.js +++ b/src/routes/productTemplates/create.spec.js @@ -35,6 +35,7 @@ describe('CREATE product template', () => { name: 'name 1', productKey: 'productKey 1', category: 'generic', + subCategory: 'generic', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', diff --git a/src/routes/productTemplates/delete.spec.js b/src/routes/productTemplates/delete.spec.js index edb53d74..5c4d177c 100644 --- a/src/routes/productTemplates/delete.spec.js +++ b/src/routes/productTemplates/delete.spec.js @@ -43,6 +43,7 @@ describe('DELETE product template', () => { name: 'name 1', productKey: 'productKey 1', category: 'generic', + subCategory: 'generic', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', diff --git a/src/routes/productTemplates/get.spec.js b/src/routes/productTemplates/get.spec.js index 42b34e30..fd7cd7da 100644 --- a/src/routes/productTemplates/get.spec.js +++ b/src/routes/productTemplates/get.spec.js @@ -15,6 +15,7 @@ describe('GET product template', () => { name: 'name 1', productKey: 'productKey 1', category: 'generic', + subCategory: 'generic', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', diff --git a/src/routes/productTemplates/list.spec.js b/src/routes/productTemplates/list.spec.js index 9282e409..a9386f66 100644 --- a/src/routes/productTemplates/list.spec.js +++ b/src/routes/productTemplates/list.spec.js @@ -14,12 +14,13 @@ import testUtil from '../../tests/util'; const validateProductTemplates = (count, resJson, expectedTemplates) => { resJson.should.have.length(count); resJson.forEach((pt, idx) => { - pt.should.have.all.keys('id', 'name', 'productKey', 'category', 'icon', 'brief', 'details', 'aliases', - 'template', 'disabled', 'hidden', 'createdBy', 'createdAt', 'updatedBy', 'updatedAt'); + pt.should.have.all.keys('id', 'name', 'productKey', 'category', 'subCategory', 'icon', 'brief', 'details', + 'aliases', 'template', 'disabled', 'hidden', 'createdBy', 'createdAt', 'updatedBy', 'updatedAt'); pt.should.not.have.all.keys('deletedAt', 'deletedBy'); pt.name.should.be.eql(expectedTemplates[idx].name); pt.productKey.should.be.eql(expectedTemplates[idx].productKey); pt.category.should.be.eql(expectedTemplates[idx].category); + pt.subCategory.should.be.eql(expectedTemplates[idx].subCategory); pt.icon.should.be.eql(expectedTemplates[idx].icon); pt.brief.should.be.eql(expectedTemplates[idx].brief); pt.details.should.be.eql(expectedTemplates[idx].details); @@ -38,6 +39,7 @@ describe('LIST product templates', () => { name: 'name 1', productKey: 'productKey-1', category: 'generic', + subCategory: 'generic', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', @@ -73,6 +75,7 @@ describe('LIST product templates', () => { name: 'template 2', productKey: 'productKey-2', category: 'concrete', + subCategory: 'concrete', icon: 'http://example.com/icon2.ico', brief: 'brief 2', details: 'details 2', diff --git a/src/routes/productTemplates/update.spec.js b/src/routes/productTemplates/update.spec.js index 6e65461d..0aeedaf6 100644 --- a/src/routes/productTemplates/update.spec.js +++ b/src/routes/productTemplates/update.spec.js @@ -15,6 +15,7 @@ describe('UPDATE product template', () => { name: 'name 1', productKey: 'productKey 1', category: 'generic', + subCategory: 'generic', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', diff --git a/src/routes/projectUpgrade/create.spec.js b/src/routes/projectUpgrade/create.spec.js index 41ee7e0b..9ab136e0 100644 --- a/src/routes/projectUpgrade/create.spec.js +++ b/src/routes/projectUpgrade/create.spec.js @@ -95,6 +95,7 @@ describe('Project upgrade', () => { name: 'name 1', productKey: 'a product key', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', diff --git a/src/routes/projects/create.spec.js b/src/routes/projects/create.spec.js index 5810401e..e8807e38 100644 --- a/src/routes/projects/create.spec.js +++ b/src/routes/projects/create.spec.js @@ -38,6 +38,7 @@ describe('Project create', () => { name: 'template 1', productKey: 'productKey-1', category: 'generic', + subCategory: 'generic', icon: 'http://example.com/icon2.ico', brief: 'brief 1', details: 'details 1', @@ -51,6 +52,7 @@ describe('Project create', () => { name: 'template 2', productKey: 'productKey-2', category: 'generic', + subCategory: 'generic', icon: 'http://example.com/icon2.ico', brief: 'brief 2', details: 'details 2', @@ -64,6 +66,7 @@ describe('Project create', () => { name: 'template 3', productKey: 'productKey-3', category: 'generic', + subCategory: 'generic', icon: 'http://example.com/icon3.ico', brief: 'brief 3', details: 'details 3', diff --git a/src/routes/timelines/create.spec.js b/src/routes/timelines/create.spec.js index 41590c37..20c88ed8 100644 --- a/src/routes/timelines/create.spec.js +++ b/src/routes/timelines/create.spec.js @@ -45,6 +45,7 @@ const productTemplates = [ name: 'name 1', productKey: 'productKey 1', category: 'generic', + subCategory: 'generic', icon: 'http://example.com/icon1.ico', brief: 'brief 1', details: 'details 1', diff --git a/src/tests/seed.js b/src/tests/seed.js index 5c4f553d..8790ad96 100644 --- a/src/tests/seed.js +++ b/src/tests/seed.js @@ -326,6 +326,7 @@ models.sequelize.sync({ force: true }) name: 'name 1', productKey: 'productKey 1', category: 'category', + subCategory: 'category', icon: 'http://example.com/icon1.ico', question: 'question 1', info: 'info 1', From b3de8d0d44dd261c217d576b1d180e611f89398b Mon Sep 17 00:00:00 2001 From: RishiRaj Date: Wed, 26 Dec 2018 15:46:36 +0530 Subject: [PATCH 2/2] Corrected table name in migration script. --- migrations/20181226_productTemplates_subCategory.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/migrations/20181226_productTemplates_subCategory.sql b/migrations/20181226_productTemplates_subCategory.sql index f55056c9..8626b0e2 100644 --- a/migrations/20181226_productTemplates_subCategory.sql +++ b/migrations/20181226_productTemplates_subCategory.sql @@ -9,6 +9,6 @@ -- Add new column ALTER TABLE product_templates ADD COLUMN "subCategory" character varying(45); -- Update new column -UPDATE projects SET "subCategory"="category" WHERE "subCategory" is NULL; +UPDATE product_templates SET "subCategory"="category" WHERE "subCategory" is NULL; -- Set not null -ALTER TABLE projects ALTER COLUMN "subCategory" SET NOT NULL; +ALTER TABLE product_templates ALTER COLUMN "subCategory" SET NOT NULL;