diff --git a/swagger/index.js b/swagger/index.js index 2f2a0e4..d07a9a6 100755 --- a/swagger/index.js +++ b/swagger/index.js @@ -1,28 +1,31 @@ -'use strict'; +"use strict"; -var fs = require('fs'), - path = require('path'), - http = require('http'); +var fs = require("fs"), + path = require("path"), + http = require("http"); -var app = require('connect')(); -var swaggerTools = require('swagger-tools'); -var jsyaml = require('js-yaml'); +var app = require("connect")(); +var swaggerTools = require("swagger-tools"); +var jsyaml = require("js-yaml"); +const cors = require("cors"); var serverPort = 3030; +// CORS +app.use(cors()); + // swaggerRouter configuration var options = { - swaggerUi: path.join(__dirname, '/swagger.json'), - controllers: path.join(__dirname, './controllers'), - useStubs: process.env.NODE_ENV === 'development' // Conditionally turn on stubs (mock mode) + swaggerUi: path.join(__dirname, "/swagger.json"), + controllers: path.join(__dirname, "./controllers"), + useStubs: process.env.NODE_ENV === "development" // Conditionally turn on stubs (mock mode) }; // The Swagger document (require it, build it programmatically, fetch it from a URL, ...) -var spec = fs.readFileSync(path.join(__dirname,'api/swagger.yaml'), 'utf8'); +var spec = fs.readFileSync(path.join(__dirname, "api/swagger.yaml"), "utf8"); var swaggerDoc = jsyaml.safeLoad(spec); // Initialize the Swagger middleware -swaggerTools.initializeMiddleware(swaggerDoc, function (middleware) { - +swaggerTools.initializeMiddleware(swaggerDoc, function(middleware) { // Interpret Swagger resources and attach metadata to request - must be first in swagger-tools middleware chain app.use(middleware.swaggerMetadata()); @@ -36,9 +39,15 @@ swaggerTools.initializeMiddleware(swaggerDoc, function (middleware) { app.use(middleware.swaggerUi()); // Start the server - http.createServer(app).listen(serverPort, function () { - console.log('Your server is listening on port %d (http://localhost:%d)', serverPort, serverPort); - console.log('Swagger-ui is available on http://localhost:%d/docs', serverPort); + http.createServer(app).listen(serverPort, function() { + console.log( + "Your server is listening on port %d (http://localhost:%d)", + serverPort, + serverPort + ); + console.log( + "Swagger-ui is available on http://localhost:%d/docs", + serverPort + ); }); - }); diff --git a/swagger/package.json b/swagger/package.json index ea91064..f38e9fd 100755 --- a/swagger/package.json +++ b/swagger/package.json @@ -5,7 +5,9 @@ "main": "index.js", "scripts": { "prestart": "npm install", - "start": "node index.js" + "start": "node index.js", + "dev": "nodemon index.js", + "test": "jest" }, "keywords": [ "swagger" @@ -14,7 +16,13 @@ "private": true, "dependencies": { "connect": "^3.6.6", + "cors": "^2.8.5", "js-yaml": "^3.12.1", "swagger-tools": "0.10.4" + }, + "devDependencies": { + "jest": "^24.9.0", + "nodemon": "^2.0.1", + "prettier": "^1.19.1" } } diff --git a/swagger/service/PlayerService.js b/swagger/service/PlayerService.js index 319fb15..477e788 100755 --- a/swagger/service/PlayerService.js +++ b/swagger/service/PlayerService.js @@ -1,33 +1,39 @@ -'use strict'; +"use strict"; +const db = require("../utils/mockDB.js"); /** * Create a new player - * + * * * body Player Player object * no response value expected for this operation **/ exports.addPlayer = function(body) { - return new Promise(function(resolve, reject) { + return new Promise(function(resolve) { + db.mockDB.push(body); resolve(); }); -} - +}; /** * Deletes a player - * + * * * playerId Long Player id to delete * no response value expected for this operation **/ exports.deletePlayer = function(playerId) { return new Promise(function(resolve, reject) { - resolve(); + const playerIndex = db.mockDB.findIndex(player => player.id === playerId); + if (playerIndex !== -1) { + db.mockDB.splice(playerIndex, 1); + resolve(); + } else { + reject(); + } }); -} - +}; /** * Find player by ID @@ -38,31 +44,30 @@ exports.deletePlayer = function(playerId) { **/ exports.getPlayerById = function(playerId) { return new Promise(function(resolve, reject) { - var examples = {}; - examples['application/json'] = { - "name" : "LeBron", - "id" : 0, - "position" : "C" -}; - if (Object.keys(examples).length > 0) { - resolve(examples[Object.keys(examples)[0]]); + const player = db.mockDB.find(player => player.id === playerId); + if (player) { + resolve(player); } else { - resolve(); + reject({ message: "No match user" }); } }); -} - +}; /** * Update an existing player - * + * * * body Player Player object that needs to be added to the team * no response value expected for this operation **/ exports.updatePlayer = function(body) { return new Promise(function(resolve, reject) { - resolve(); + const playerIndex = db.mockDB.findIndex(player => player.id === body.id); + if (playerIndex !== -1) { + db.mockDB[playerIndex] = body; + resolve(); + } else { + reject(); + } }); -} - +}; diff --git a/swagger/tests/service/PlayerService.test.js b/swagger/tests/service/PlayerService.test.js new file mode 100644 index 0000000..3d4a9eb --- /dev/null +++ b/swagger/tests/service/PlayerService.test.js @@ -0,0 +1,53 @@ +const db = require("../../utils/mockDB.js"); +const Player = require("../../service/PlayerService"); + +describe("PlayerService test", () => { + it("should addPlayer correctly", () => { + expect(db.mockDB.length).toBe(1); + Player.addPlayer({ + name: "Kobe", + id: 1, + position: "SG" + }); + expect(db.mockDB.length).toBe(2); + }); + + it("should deletePlayer correctly", () => { + expect(db.mockDB.length).toBe(2); + Player.deletePlayer(2).catch(console.error); + expect(db.mockDB.length).toBe(2); + Player.deletePlayer(1); + expect(db.mockDB.length).toBe(1); + }); + + it("should getPlayerById correctly", () => { + Player.getPlayerById(0).then(player => { + expect(player.id).toBe(0); + expect(player.name).toBe("LeBron"); + expect(player.position).toBe("C"); + }); + Player.getPlayerById(1).catch(error => + expect(error.message).toBe("No match user") + ); + }); + + it("should updatePlayer correctly", () => { + Player.updatePlayer({ + name: "LeBron", + id: 0, + position: "SF" + }).then(() => { + Player.getPlayerById(0).then(player => { + expect(player.id).toBe(0); + expect(player.name).toBe("LeBron"); + expect(player.position).toBe("SF"); + }); + }); + + Player.updatePlayer({ + name: "LeBron", + id: 1, + position: "SF" + }).catch(console.error); + }); +}); diff --git a/swagger/utils/mockDB.js b/swagger/utils/mockDB.js new file mode 100644 index 0000000..0211d1e --- /dev/null +++ b/swagger/utils/mockDB.js @@ -0,0 +1,7 @@ +exports.mockDB = [ + { + name: "LeBron", + id: 0, + position: "C" + } +];