Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 26 additions & 17 deletions swagger/index.js
Original file line number Diff line number Diff line change
@@ -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());

Expand All @@ -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
);
});

});
10 changes: 9 additions & 1 deletion swagger/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
}
}
53 changes: 29 additions & 24 deletions swagger/service/PlayerService.js
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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();
}
});
}

};
53 changes: 53 additions & 0 deletions swagger/tests/service/PlayerService.test.js
Original file line number Diff line number Diff line change
@@ -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);
});
});
7 changes: 7 additions & 0 deletions swagger/utils/mockDB.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
exports.mockDB = [
{
name: "LeBron",
id: 0,
position: "C"
}
];