UNPKG

soajs.multitenant

Version:
2,373 lines (2,185 loc) 407 kB
/** * @license * Copyright SOAJS All Rights Reserved. * * Use of this source code is governed by an Apache license that can be * found in the LICENSE file at the root of this repository */ "use strict"; const helper = require("../../helper.js"); const BL = helper.requireModule('bl/product.js'); const assert = require('assert'); const nock = require('nock'); describe("Unit test for: BL - product", () => { let soajs = { config: { "errors": { 400: "Business logic required data are missing", 450: "Unable to find tenant", 451: "Tenant already exists", 452: "Main Tenant id is required!", 453: "Main Tenant is not found!", 454: "Unable to add tenant application", 455: "Unable to add a new key to the tenant application", 456: "Unable to add the tenant application ext Key", 460: "Unable to find product", 461: "Unable to find package", 462: "You are not allowed to remove the tenant you are currently logged in with", 466: "You are not allowed to remove the product you are currently logged in with", 467: "Package already exists", 468: "Product already exists", 470: "Unable to update product", 471: "Unable to update tenant", 500: "You cannot modify or delete a locked record", 501: "Environment record not found!", 601: "Model not found", 602: "Model error: ", }, "console": { "product": "DSBRD" }, }, tenant: { application: { product: "TPROD", package: "TPROD_TEST", } }, log: { error: () => { console.log(); }, debug: () => { console.log(); } }, awareness: { connect: (service, version, cb) => { return cb({ headers: {}, host: "www.example.com" }); } } }; describe("Testing list Products", () => { afterEach((done) => { BL.modelObj = null; done(); }); it("Success - List products - null data", (done) => { BL.modelObj = { listProducts: (nullObject, cb) => { return cb(null, []); } }; BL.list(soajs, null, (err, records) => { assert.ok(records); assert(Array.isArray(records)); done(); }); }); it("Fails - List products - null data", (done) => { BL.modelObj = { listProducts: (nullObject, cb) => { return cb(true, null); } }; BL.list(soajs, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 602); done(); }); }); it("Success - List products - null data - client tenant", (done) => { let soajsClient = { config: { "errors": { 460: "Unable to find product", 601: "Model not found" }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; function Product() { console.log("Product"); } Product.prototype.listProducts = (nullObject, cb) => { return cb(null, []); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.list(soajsClient, null, (err, records) => { assert.ok(records); assert(Array.isArray(records)); done(); }); }); it("Fails - List products - error - client tenant", (done) => { let soajsClient = { config: { "errors": { 460: "Unable to find product", 601: "Model not found", 602: "Model error: ", }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; function Product() { console.log("Product"); } Product.prototype.listProducts = (data, cb) => { return cb(true, null); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.list(soajsClient, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 602); done(); }); }); }); describe("Testing list console Products", () => { afterEach((done) => { BL.modelObj = null; done(); }); it("Success - List console products - null data", (done) => { BL.modelObj = { listConsoleProducts: (nullObject, cb) => { return cb(null, []); } }; BL.listConsole(soajs, null, (err, records) => { assert.ok(records); assert(Array.isArray(records)); done(); }); }); it("Fails - List console products - null data", (done) => { BL.modelObj = { listConsoleProducts: (nullObject, cb) => { return cb(true, null); } }; BL.listConsole(soajs, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 602); done(); }); }); it("Success - List console products - null data - client tenant", (done) => { let soajsClient = { config: { "errors": { 460: "Unable to find product", 601: "Model not found", 602: "Model error: " }, }, tenant: { type: "client", dbConfig: {}, "application":{ } }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; function Product() { console.log("Product"); } Product.prototype.listConsoleProducts = (data, cb) => { return cb(null, []); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.listConsole(soajsClient, null, (err, records) => { assert.ok(records); assert(Array.isArray(records)); done(); }); }); it("Fails - List console products - error - client tenant", (done) => { let soajsClient = { config: { "errors": { 460: "Unable to find product", 601: "Model not found", 602: "Model error: " }, }, tenant: { type: "client", dbConfig: {}, "application":{ } }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; function Product() { console.log("Product"); } Product.prototype.listConsoleProducts = (data, cb) => { return cb(true, null); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.listConsole(soajsClient, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 602); done(); }); }); }); describe("Testing Get product", () => { afterEach((done) => { BL.modelObj = null; done(); }); it("Success - Get product - code", (done) => { let inputMask = { code: "DSBRT" }; BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { "code": "DSBRT", "name": "not Console UI Product", "description": "This is the main Console UI Product.", }); } }; BL.get(soajs, inputMask, (err, record) => { assert.ok(record); assert.deepEqual(record.name, "not Console UI Product"); done(); }); }); it("Success - Get product - id", (done) => { let inputMask = { id: "testid" }; BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { "_id": "testid", "name": "not Console UI Product", "description": "This is the main Console UI Product.", }); } }; BL.get(soajs, inputMask, (err, record) => { assert.ok(record); assert.deepEqual(record.name, "not Console UI Product"); done(); }); }); it("Fails - Get product - null data", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(null, null); } }; BL.get(soajs, null, (err) => { assert.ok(err); assert.equal(err.code, 400); done(); }); }); it("Success - Get product - code - client tenant", (done) => { let soajsClient = { config: { "errors": { 460: "Unable to find product", 601: "Model not found", 602: "Model error: ", }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; function Product() { console.log("Product"); } Product.prototype.getProduct = (data, cb) => { return cb(null, { "code": "DSBRT", "name": "not Console UI Product", "description": "This is the main Console UI Product.", }); }; Product.prototype.closeConnection = () => { }; BL.model = Product; let inputMask = { code: "DSBRT" }; BL.get(soajsClient, inputMask, (err, record) => { assert.ok(record); assert.deepEqual(record.name, "not Console UI Product"); done(); }); }); it("Success - Get product - id - client tenant", (done) => { let soajsClient = { config: { "errors": { 400: "Business logic required data are missing" }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; function Product() { console.log("Product"); } Product.prototype.getProduct = (inputMask, cb) => { return cb(null, { "_id": "testid", "name": "Console UI Product", "description": "This is the main Console UI Product.", }); }; Product.prototype.closeConnection = () => { }; BL.model = Product; let inputMask = { id: "testid" }; BL.get(soajsClient, inputMask, (err, record) => { assert.ok(record); assert.deepEqual(record.name, "Console UI Product"); done(); }); }); it("Fail - Get product - null data - client tenant", (done) => { let soajsClient = { config: { "errors": { 400: "Business logic required data are missing" }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; function Product() { console.log("Product"); } Product.prototype.getProduct = (data, cb) => { return cb(true, null); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.get(soajsClient, null, (err) => { assert.ok(err); assert.deepEqual(err.code, 400); done(); }); }); it("Fail - Get product - null record - client tenant", (done) => { let soajsClient = { config: { "errors": { 460: "Unable to find product", 601: "Model not found", 602: "Model error: " }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; function Product() { console.log("Product"); } Product.prototype.getProduct = (data, cb) => { return cb(null, null); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.get(soajsClient, {id: "notfound"}, (err) => { assert.ok(err); assert.deepEqual(err.code, 460); done(); }); }); it("Fail - Get product - mongo error when getting product", (done) => { let soajsClient = { config: { "errors": { 460: "Unable to find product", 601: "Model not found", 602: "Model error: " }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; function Product() { console.log("Product"); } Product.prototype.getProduct = (data, cb) => { return cb(true, null); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.get(soajsClient, {id: "found"}, (err) => { assert.deepEqual(err.code, 602); assert.ok(err); done(); }); }); }); describe("Testing Add Product", () => { afterEach((done) => { BL.modelObj = null; done(); }); it("Success - Add product - data with no scope", (done) => { let inputMask = { code: "TESTP", name: "Test Product", description: 'Some Test Description' }; BL.modelObj = { addProduct: (inputMask, cb) => { return cb(null, true); }, checkIfExist: (inputMask, cb) => { return cb(null, 0); } }; BL.add(soajs, inputMask, (err, record) => { assert.ok(record); done(); }); }); it("Success - Add product - data with scope", (done) => { let inputMask = { code: "TESTP2", name: "Test 2 Product", description: 'Some Test Description', scope: { acl: { dashboard: { multitenant: { 1: { access: false, get: [ { "/product": { access: false }, group: 'Product' } ] } } } } } }; BL.modelObj = { addProduct: (inputMask, cb) => { return cb(null, true); }, checkIfExist: (inputMask, cb) => { return cb(null, 0); } }; BL.add(soajs, inputMask, (err, record) => { assert.ok(record); assert.deepEqual(record, true); done(); }); }); it("Fails - Add product - Product Already Exist", (done) => { let inputMask = { code: 'DSBRT', name: 'not Main Product', description: 'Some Test Description' }; BL.modelObj = { addProduct: (inputMask, cb) => { return cb(null, true); }, checkIfExist: (inputMask, cb) => { return cb(null, 1); } }; BL.add(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err.code, 468); done(); }); }); it("Fails - Add product - Product Already Exist - client tenant", (done) => { let inputMask = { code: 'DSBRT', name: 'not Main Product', }; let soajsClient = { config: { "errors": { 468: "Product already exists", 460: "Unable to find product", 601: "Model not found" }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; function Product() { console.log("Product"); } Product.prototype.addProduct = (data, cb) => { return cb(null, true); }; Product.prototype.checkIfExist = (data, cb) => { return cb(null, 1); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.add(soajsClient, inputMask, (err) => { assert.ok(err); assert.deepEqual(err.code, 468); done(); }); }); it("Fails - Add product - mongo error check if exists - client tenant", (done) => { let soajsClient = { config: { "errors": { 602: "Model error: " }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); } } }; let inputMask = { code: 'DSBRT', name: 'not Main Product', }; function Product() { console.log("Product"); } Product.prototype.addProduct = (data, cb) => { return cb(null, true); }; Product.prototype.checkIfExist = (data, cb) => { return cb(true); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.add(soajsClient, inputMask, (err) => { assert.ok(err); assert.deepEqual(err.code, 602); done(); }); }); it("Fails - Add product - mongo error when adding product - client tenant", (done) => { let soajsClient = { config: { "errors": { 602: "Model error: " }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); }, } }; let inputMask = { code: 'DSBRT', name: 'not Main Product', }; function Product() { console.log("Product"); } Product.prototype.addProduct = (data, cb) => { return cb(true); }; Product.prototype.checkIfExist = (data, cb) => { return cb(null, 0); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.add(soajsClient, inputMask, (err) => { assert.ok(err); assert.deepEqual(err.code, 602); done(); }); }); it("Fails - Add product - null Data", (done) => { BL.modelObj = { addProduct: (inputMask, cb) => { return cb(true, null); }, checkIfExist: (inputMask, cb) => { return cb(true, null); } }; BL.add(soajs, null, (err) => { assert.ok(err); assert.deepEqual(err.code, 400); done(); }); }); it("Success - Add product - code - client tenant", (done) => { let soajsClient = { config: { "errors": { 474: "Missing required field: either id or code", 601: "Model not found" }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); }, } }; function Product() { console.log("Product"); } Product.prototype.addProduct = (data, cb) => { return cb(null, true); }; Product.prototype.checkIfExist = (data, cb) => { return cb(null, 0); }; Product.prototype.closeConnection = () => { }; BL.model = Product; let inputMask = { code: "TESTR", name: "Test 2 Product" }; BL.add(soajsClient, inputMask, (err, record) => { assert.ok(record); done(); }); }); }); describe("Testing Update Product", () => { afterEach((done) => { BL.modelObj = null; done(); }); it("Success - update product - id", (done) => { let inputMask = { _id: "SOMEID", name: "Some Name", description: "A desc to update product", scope: {} }; BL.modelObj = { updateProduct: (inputMask, cb) => { return cb(null, true); }, getProduct: (inputMask, cb) => { return cb(null, { "_id": "SOMEID", "name": "Some Product", "description": "This is Some Product.", }); } }; BL.update(soajs, inputMask, (err, record) => { assert.ok(record); assert.deepEqual(record, true); done(); }); }); it("Fails - Update product - get product error", (done) => { let inputMask = {}; BL.modelObj = { updateProduct: (inputMask, cb) => { return cb(null, null); }, getProduct: (inputMask, cb) => { return cb(true, null); } }; BL.update(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err.code, 602); done(); }); }); it("Fails - Update product - null Data", (done) => { BL.modelObj = { updateProduct: (inputMask, cb) => { return cb(true, null); }, checkIfExist: (inputMask, cb) => { return cb(true, null); } }; BL.update(soajs, null, (err) => { assert.ok(err); assert.deepEqual(err.code, 400); done(); }); }); it("Fails - Update product - update error", (done) => { BL.modelObj = { getProduct: (inputmask, cb) => { return cb(null, {}); }, updateProduct: (inputMask, cb) => { return cb(true, null); }, checkIfExist: (inputMask, cb) => { return cb(null, 0); } }; BL.update(soajs, null, (err) => { assert.ok(err); assert.deepEqual(err.code, 400); done(); }); }); it("Fails - Update product - no record", (done) => { BL.modelObj = { getProduct: (inputmask, cb) => { return cb(null, null); }, updateProduct: (inputMask, cb) => { return cb(null, null); } }; BL.update(soajs, {}, (err) => { assert.ok(err); assert.deepEqual(err, { code: 460, msg: soajs.config.errors[460] }); done(); }); }); it("Fails - Update product - locked", (done) => { BL.modelObj = { getProduct: (inputmask, cb) => { return cb(null, { locked: true, console: true }); }, updateProduct: (inputMask, cb) => { return cb(null, null); } }; BL.update(soajs, {}, (err) => { assert.ok(err); assert.deepEqual(err, { code: 500, msg: soajs.config.errors[500] }); done(); }); }); it("Fails - Update product - update error", (done) => { BL.modelObj = { getProduct: (inputmask, cb) => { return cb(null, { locked: false, console: false }); }, updateProduct: (inputMask, cb) => { return cb(true, null); } }; BL.update(soajs, {}, (err) => { assert.ok(err); assert.deepEqual(err, { code: 470, msg: soajs.config.errors[470] }); done(); }); }); }); describe("Testing purge Product", () => { afterEach((done) => { BL.modelObj = null; done(); }); let inputMask = { id: "SomeProductID", description: "Pack Description after update", }; it("Success - purge product - data", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours } ] }); }, saveProduct: (data, cb) => { return cb(null, true); } }; BL.purge(soajs, inputMask, (err, result) => { assert.ok(result); done(); }); }); it("Success - purge product - client tenant", (done) => { let soajsClient = { config: { "errors": { 460: "Unable to find product", 601: "Model not found" }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); }, } }; function Product() { console.log("Product"); } Product.prototype.getProduct = (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours } ] }); }; Product.prototype.saveProduct = (data, cb) => { return cb(null, true); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.purge(soajsClient, inputMask, (err, record) => { assert.ok(record); done(); }); }); it("Fails - purge product - null data", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(true, null); }, saveProduct: (data, cb) => { return cb(true, null); } }; BL.purge(soajs, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err, { code: 400, msg: soajs.config.errors[400] }); done(); }); }); it("Fails - purge product - save product err", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(null, { packages: [ { name: "totestonly" } ] }); }, saveProduct: (data, cb) => { return cb(true, null); } }; BL.purge(soajs, {}, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 602 ); done(); }); }); it("Fails - purge product - save product err", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(true, null); } }; BL.purge(soajs, {}, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 602 ); done(); }); }); it("Fails - purge product - no record err", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(null, null); }, saveProduct: (data, cb) => { return cb(true, null); } }; BL.purge(soajs, {}, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 460 ); done(); }); }); it("Fails - purge product - locked record err", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(null, { locked: true }); }, saveProduct: (data, cb) => { return cb(true, null); } }; BL.purge(soajs, {}, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err, { code: 500, msg: soajs.config.errors[500] }); done(); }); }); it("Fails - purge product - error - client tenant", (done) => { let soajsClient = { config: { "errors": { 400: "Business logic required data are missing" }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); }, } }; function Product() { console.log("Product"); } Product.prototype.getProduct = (data, cb) => { return cb(true, null); }; Product.prototype.saveProduct = (data, cb) => { return cb(true, null); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.purge(soajsClient, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err, { code: 400, msg: soajsClient.config.errors[400] }); done(); }); }); }); describe("Testing Update Scope Product", () => { afterEach((done) => { BL.modelObj = null; done(); }); let inputMask = { id: "DummyID", scope: { acl: { dashboard: { multitenant: { 1: { access: false, get: [ { "/product": { access: false }, group: 'Product' } ] } } } } } }; it("Fails - update product scope - null data", (done) => { BL.modelObj = {}; BL.updateScope(soajs, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err, { code: 400, msg: soajs.config.errors[400] }); done(); }); }); it("Success - update product scope - data", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours } ] }); }, updateProduct: (data, cb) => { return cb(null, true); } }; BL.updateScope(soajs, inputMask, (err, result) => { assert.ok(result); assert.deepEqual(result, true); done(); }); }); it("Fails - update product scope - getProduct error", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(true, null); } }; BL.updateScope(soajs, {}, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 602); done(); }); }); it("Fails - update product scope - no record error", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, null); } }; BL.updateScope(soajs, {}, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err, { code: 460, msg: soajs.config.errors[460] }); done(); }); }); it("Fails - update product scope - locked record error", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { locked: true, console: true }); } }; BL.updateScope(soajs, {}, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err, { code: 500, msg: soajs.config.errors[500] }); done(); }); }); it("Fails - update product scope - updateProduct error", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours } ] }); }, updateProduct: (data, cb) => { return cb(true, null); } }; BL.updateScope(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err, { code: 470, msg: soajs.config.errors[470] }); done(); }); }); }); describe("Testing Update Scope Product by env", () => { afterEach((done) => { BL.modelObj = null; done(); }); let inputMask = { id: "DummyID", env: "dashboard", acl: { multitenant: { 1: { access: false, get: [ { "/product": { access: false }, group: 'Product' } ] } } } }; it("Fails - update product scope - null data", (done) => { BL.modelObj = {}; BL.updateScopeByEnv(soajs, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err, { code: 400, msg: soajs.config.errors[400] }); done(); }); }); it("Success - update product scope - data", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours } ] }); }, initScope: (data, cb) => { return cb(null, true); }, updateScope: (data, cb) => { return cb(null, true); } }; BL.updateScopeByEnv(soajs, inputMask, (err, result) => { assert.ok(result); assert.deepEqual(result, true); done(); }); }); it("Fails - update product scope - getProduct error", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(true, null); } }; BL.updateScopeByEnv(soajs, {}, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 602); done(); }); }); it("Fails - update product scope - no record error", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, null); } }; BL.updateScopeByEnv(soajs, {}, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err, { code: 460, msg: soajs.config.errors[460] }); done(); }); }); it("Fails - update product scope - locked record error", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { locked: true, console: true }); } }; BL.updateScopeByEnv(soajs, {}, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err, { code: 500, msg: soajs.config.errors[500] }); done(); }); }); it("Fails - update product scope - updateProduct error", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours } ] }); }, initScope: (data, cb) => { return cb(null, true); }, updateScope: (data, cb) => { return cb(true, null); } }; BL.updateScopeByEnv(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err, { code: 470, msg: soajs.config.errors[470] }); done(); }); }); }); describe("Testing Delete Product", () => { afterEach((done) => { BL.modelObj = null; done(); }); it("Success - Delete product - code", (done) => { let inputMask = { code: "TESTP", }; BL.modelObj = { deleteProduct: (inputMask, cb) => { return cb(null, true); }, getProduct: (inputMask, cb) => { return cb(null, { "name": "Some Product", "description": "This is Some Product.", }); } }; BL.delete(soajs, inputMask, (err, record) => { assert.ok(record); assert.deepEqual(record, true); done(); }); }); it("Fails - Delete product - valid id", (done) => { let inputMask = { id: "someID", }; BL.modelObj = { deleteProduct: (inputMask, cb) => { return cb(true, null); }, getProduct: (inputMask, cb) => { return cb(true, null); } }; BL.delete(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err.code, 602); done(); }); }); it("Fails - Delete product - valid id no record", (done) => { let inputMask = { id: "someID", }; BL.modelObj = { deleteProduct: (inputMask, cb) => { return cb(true, null); }, getProduct: (inputMask, cb) => { return cb(null, null); } }; BL.delete(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err, { code: 460, msg: soajs.config.errors[460] }); done(); }); }); it("Fails - Delete product - null Data", (done) => { BL.modelObj = { addProduct: (inputMask, cb) => { return cb(true, null); }, checkIfExist: (inputMask, cb) => { return cb(true, null); } }; BL.delete(soajs, null, (err) => { assert.ok(err); assert.deepEqual(err, { code: 400, msg: soajs.config.errors[400] }); done(); }); }); it("Fails - Delete product - code no record", (done) => { let inputMask = { code: "someCode", }; BL.modelObj = { deleteProduct: (inputMask, cb) => { return cb(true, null); }, getProduct: (inputMask, cb) => { return cb(null, null); } }; BL.delete(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err, { code: 460, msg: soajs.config.errors[460] }); done(); }); }); let soajs2 = { config: { "errors": { 400: "Business logic required data are missing", 450: "Unable to find tenant", 451: "Tenant already exists", 452: "Main Tenant id is required!", 453: "Main Tenant is not found!", 454: "Unable to add tenant application", 455: "Unable to add a new key to the tenant application", 456: "Unable to add the tenant application ext Key", 460: "Unable to find product", 461: "Unable to find package", 462: "You are not allowed to remove the tenant you are currently logged in with", 466: "You are not allowed to remove the product you are currently logged in with", 467: "Package already exists", 468: "Product already exists", 470: "Unable to update product", 471: "Unable to update tenant", 500: "You cannot modify or delete a locked record", 501: "Environment record not found!", 601: "Model not found", 602: "Model error: ", }, "console": { "product": "DSBRD" }, }, tenant: { application: { product: "DSBRD", package: "DSBRD_TEST", } }, log: { error: () => { console.log(); }, debug: () => { console.log(); }, } }; it("Fails - Delete product - Tenant product", (done) => { let inputMask = { code: "DSBRD", }; BL.modelObj = { deleteProduct: (inputMask, cb) => { return cb(true, null); }, getProduct: (inputMask, cb) => { return cb(null, { code: "DSBRD" }); } }; BL.delete(soajs2, inputMask, (err) => { assert.ok(err); assert.deepEqual(err, { code: 466, msg: soajs.config.errors[466] }); done(); }); }); it("Fails - Delete product - locked record", (done) => { let inputMask = { code: "someCode", }; BL.modelObj = { deleteProduct: (inputMask, cb) => { return cb(true, null); }, getProduct: (inputMask, cb) => { return cb(null, { locked: true, console: true }); } }; BL.delete(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err, { code: 500, msg: soajs.config.errors[500] }); done(); }); }); it("Fails - Delete product - not valid id", (done) => { let inputMask = { id: "NOTVALID", }; BL.modelObj = { deleteProduct: (inputMask, cb) => { return cb(true, null); }, getProduct: (inputMask, cb) => { return cb(null, null); } }; BL.delete(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err, { code: 460, msg: soajs.config.errors[460] }); done(); }); }); it("Fails - Delete product - no code and id", (done) => { let inputMask = {}; BL.modelObj = { deleteProduct: (inputMask, cb) => { return cb(true, null); }, getProduct: (inputMask, cb) => { return cb(true, null); } }; BL.delete(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err.code, 602); done(); }); }); it("Fails - Delete product - delete product error", (done) => { let inputMask = { code: 'some' }; BL.modelObj = { deleteProduct: (inputMask, cb) => { return cb(true, null); }, getProduct: (inputMask, cb) => { return cb(null, {}); } }; BL.delete(soajs, inputMask, (err) => { assert.ok(err); assert.deepEqual(err.code, 602); done(); }); }); }); describe("Testing list all packages inside Product", () => { afterEach((done) => { BL.modelObj = null; done(); }); let inputMask = { id: "ID" }; let inputMaskTwo = { code: "SOME" }; it("Success - List packages - id", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours }, { "code": "TPROD_EXAMPLE03", "name": "example03 package", "description": "this is a description for test product example03 package", "acl": { "urac": {}, "example03": {} }, "_TTL": 86400000 // 24 hours } ] }); } }; BL.getPackages(soajs, inputMask, (err, records) => { assert.ok(records); assert(Array.isArray(records)); done(); }); }); it("Success - List packages - code", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours }, { "code": "TPROD_EXAMPLE03", "name": "example03 package", "description": "this is a description for test product example03 package", "acl": { "urac": {}, "example03": {} }, "_TTL": 86400000 // 24 hours } ] }); } }; BL.getPackages(soajs, inputMaskTwo, (err, records) => { assert.ok(records); assert(Array.isArray(records)); done(); }); }); it("Success - List packages - client tenant", (done) => { let soajsClient = { config: { "errors": { 423: "An id must be provided", 460: "Unable to find product", 601: "Model not found" }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); }, } }; let inputMask = { id: "ID" }; function Product() { console.log("Product"); } Product.prototype.getProduct = (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours }, { "code": "TPROD_EXAMPLE03", "name": "example03 package", "description": "this is a description for test product example03 package", "acl": { "urac": {}, "example03": {} }, "_TTL": 86400000 // 24 hours } ] }); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.getPackages(soajsClient, inputMask, (err, records) => { assert.ok(records); assert(Array.isArray(records)); done(); }); }); it("Fails - List packages - null data", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(true, null); } }; BL.getPackages(soajs, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 400); done(); }); }); it("Fails - List packages - error - client tenant", (done) => { let soajsClient = { config: { "errors": { 423: "An id must be provided", 460: "Unable to find product", 473: "Missing required fields", 601: "Model not found" }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); }, } }; function Product() { console.log("Product"); } Product.prototype.getProduct = (data, cb) => { return cb(true, null); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.getPackages(soajsClient, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 400); done(); }); }); it("Fails - List packages - getProduct err", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(true, null); } }; BL.getPackages(soajs, inputMask, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 602); done(); }); }); it("Fails - List packages - no record", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(null, null); } }; BL.getPackages(soajs, inputMask, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 461); done(); }); }); }); describe("Testing get package inside Product", () => { afterEach((done) => { BL.modelObj = null; done(); }); let inputMask = { packageCode: "TPROD_BASIC", code: "TPROD", }; it("Success - get package - null data", (done) => { BL.modelObj = { getProduct: (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours }, { "code": "TPROD_EXAMPLE03", "name": "example03 package", "description": "this is a description for test product example03 package", "acl": { "urac": {}, "example03": {} }, "_TTL": 86400000 // 24 hours } ] }); } }; BL.getPackage(soajs, inputMask, (err, record) => { assert.ok(record); done(); }); }); it("Success - get package - client tenant", (done) => { let soajsClient = { config: { "errors": { 460: "Unable to find product", 601: "Model not found" }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); }, } }; function Product() { console.log("Product"); } Product.prototype.getProduct = (inputMask, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours }, { "code": "TPROD_EXAMPLE03", "name": "example03 package", "description": "this is a description for test product example03 package", "acl": { "urac": {}, "example03": {} }, "_TTL": 86400000 // 24 hours } ] }); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.getPackage(soajsClient, inputMask, (err, record) => { assert.ok(record); done(); }); }); it("Fails - get package - null data", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(true, null); } }; BL.getPackage(soajs, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 400); done(); }); }); it("Fails - get package - error - client tenant", (done) => { let soajsClient = { config: { "errors": { 400: "Business logic required data are missing", }, }, tenant: { type: "client", dbConfig: {} }, log: { error: () => { console.log(); }, debug: () => { console.log(); }, } }; function Product() { console.log("Product"); } Product.prototype.getProduct = (data, cb) => { return cb(true, null); }; Product.prototype.closeConnection = () => { }; BL.model = Product; BL.getPackage(soajsClient, null, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 400); done(); }); }); it("Fails - get package - getProduct err", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(true, null); } }; BL.getPackage(soajs, inputMask, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 602); done(); }); }); it("Fails - get package - no record", (done) => { BL.modelObj = { getProduct: (nullObject, cb) => { return cb(null, null); } }; BL.getPackage(soajs, inputMask, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 461); done(); }); }); it("Fails - get package - package not found", (done) => { let inputMask = { packageCode: "TPROD_NOT_FOUND", code: "TPROD", }; BL.modelObj = { getProduct: (nullObject, cb) => { return cb(null, { "code": "TPROD", "name": "Test Product", "description": "this is a description for test product", "packages": [ { "code": "TPROD_BASIC", "name": "basic package", "description": "this is a description for test product basic package", "acl": { "urac": {}, "multitenant": {} }, "_TTL": 86400000 // 24 hours }, { "code": "TPROD_EXAMPLE03", "name": "example03 package", "description": "this is a description for test product example03 package", "acl": { "urac": {}, "example03": {} }, "_TTL": 86400000 // 24 hours } ] }); } }; BL.getPackage(soajs, inputMask, (err, records) => { assert.ok(err); assert.equal(records, null); assert.deepEqual(err.code, 461); done(); }); });