legacy/routes/model-flatten.js (270 lines of code) (raw):

var express = require("express"); var router = express.Router(); var util = require("util"); var _ = require("underscore"); var utils = require("../util/utils"); var modelFlatten = function (coverage) { router.get("/:type", function (req, res, next) { if (req.params.type === "array") { coverage["getModelFlattenArray"]++; var result = [ { id: "1", location: "Building 44", name: "Resource1", properties: { "provisioningState": "Succeeded", "provisioningStateValues": "OK", "p.name": "Product1", "type": "Flat", }, tags: { tag1: "value1", tag2: "value3" }, type: "Microsoft.Web/sites", }, { id: "2", name: "Resource2", location: "Building 44", }, { id: "3", name: "Resource3", }, ]; res.status(200).json(result); } else if (req.params.type === "dictionary") { coverage["getModelFlattenDictionary"]++; var result = { Product1: { id: "1", location: "Building 44", name: "Resource1", properties: { "provisioningState": "Succeeded", "provisioningStateValues": "OK", "p.name": "Product1", "type": "Flat", }, tags: { tag1: "value1", tag2: "value3" }, type: "Microsoft.Web/sites", }, Product2: { id: "2", name: "Resource2", location: "Building 44", }, Product3: { id: "3", name: "Resource3", }, }; res.status(200).json(result); } else if (req.params.type === "resourcecollection") { coverage["getModelFlattenResourceCollection"]++; var result = { dictionaryofresources: { Product1: { id: "1", location: "Building 44", name: "Resource1", properties: { "provisioningState": "Succeeded", "provisioningStateValues": "OK", "p.name": "Product1", "type": "Flat", }, tags: { tag1: "value1", tag2: "value3" }, type: "Microsoft.Web/sites", }, Product2: { id: "2", name: "Resource2", location: "Building 44", }, Product3: { id: "3", name: "Resource3", }, }, arrayofresources: [ { id: "4", location: "Building 44", name: "Resource4", properties: { "provisioningState": "Succeeded", "provisioningStateValues": "OK", "p.name": "Product4", "type": "Flat", }, tags: { tag1: "value1", tag2: "value3" }, type: "Microsoft.Web/sites", }, { id: "5", name: "Resource5", location: "Building 44", }, { id: "6", name: "Resource6", }, ], productresource: { id: "7", name: "Resource7", location: "Building 44", }, }; res.status(200).json(result); } else { utils.send400(res, next, "Request path must contain 'array', 'dictionary' or 'resourcecollection'"); } }); var arrayBody = '[{"location":"West US","tags":{"tag1":"value1","tag2":"value3"}},{"location":"Building 44"}]'; var dictionaryBody = '{"Resource1":{"location":"West US", "tags":{"tag1":"value1", "tag2":"value3"},"properties":{"p.name":"Product1","type":"Flat"}},' + '"Resource2":{"location":"Building 44", "properties":{"p.name":"Product2","type":"Flat"}}}'; var resourceCollectionBody = '{"arrayofresources":[' + '{"location":"West US", "tags":{"tag1":"value1", "tag2":"value3"}, "properties":{"p.name":"Product1","type":"Flat"}},' + '{"location":"East US", "properties":{"p.name":"Product2","type":"Flat"}}],' + '"dictionaryofresources":' + dictionaryBody + "," + '"productresource":{"location":"India", "properties":{"p.name":"Azure","type":"Flat"}}}'; var customFlattenBody = { base_product_id: "123", base_product_description: "product description", details: { max_product_display_name: "max name", max_product_capacity: "Large", max_product_image: { "@odata.value": "http://foo", }, }, }; var customFlattenBodyWithInheritedProperty = { base_product_id: "123", base_product_description: "product description", details: { max_product_display_name: "max name", max_product_capacity: "Large", max_product_image: { "@odata.value": "http://foo", "generic_value": "https://generic", }, }, }; router.put("/:type", function (req, res, next) { if (req.body) { if (req.params.type === "array") { if (_.isEqual(req.body, JSON.parse(arrayBody))) { coverage["putModelFlattenArray"]++; res.status(200).end(); } else { utils.send400( res, next, "The received body '" + JSON.stringify(req.body) + "' did not match the expected body '" + JSON.stringify(arrayBody) + "'.", ); } } else if (req.params.type === "dictionary") { if (_.isEqual(req.body, JSON.parse(dictionaryBody))) { coverage["putModelFlattenDictionary"]++; res.status(200).end(); } else { utils.send400( res, next, "The received body '" + JSON.stringify(req.body) + "' did not match the expected body '" + JSON.stringify(dictionaryBody) + "'.", ); } } else if (req.params.type === "resourcecollection") { if (_.isEqual(req.body, JSON.parse(resourceCollectionBody))) { coverage["putModelFlattenResourceCollection"]++; res.status(200).end(); } else { utils.send400( res, next, "The received body '" + JSON.stringify(req.body) + "' did not match the expected body '" + JSON.stringify(resourceCollectionBody) + "'.", ); } } else if (req.params.type === "customFlattening") { if (_.isEqual(req.body, customFlattenBodyWithInheritedProperty)) { coverage["putModelFlattenCustomBase"]++; res.status(200).json(customFlattenBodyWithInheritedProperty); } else { utils.send400( res, next, "The received body '" + JSON.stringify(req.body) + "' did not match the expected body '" + JSON.stringify(customFlattenBody) + "'.", ); } } } else { utils.send400(res, next, "Was expecting a body in the put request."); } }); router.post("/:type", function (req, res, next) { if (req.body) { if (req.params.type === "customFlattening") { if (_.isEqual(req.body, customFlattenBody)) { coverage["postModelFlattenCustomParameter"]++; res.status(200).json(customFlattenBody); } else { utils.send400( res, next, "The received body '" + JSON.stringify(req.body) + "' did not match the expected body '" + JSON.stringify(customFlattenBody) + "'.", ); } } } else { utils.send400(res, next, "Was expecting a body in the put request."); } }); router.put("/customFlattening/parametergrouping/:name", function (req, res, next) { if (req.body) { if (_.isEqual(req.body, customFlattenBody) && req.params.name === "groupproduct") { coverage["putModelFlattenCustomGroupedParameter"]++; res.status(200).json(customFlattenBody); } else { utils.send400( res, next, "The received body '" + JSON.stringify(req.body) + "' did not match the expected body '" + JSON.stringify(customFlattenBody) + "'. Or the path parameter name does not have the value 'groupproduct'", ); } } else { utils.send400(res, next, "Was expecting a body in the put request."); } }); }; modelFlatten.prototype.router = router; module.exports = modelFlatten;