Skip to content

Commit

Permalink
fixed bugs implemented other tests, bodyDataReader refactored
Browse files Browse the repository at this point in the history
  • Loading branch information
euprogramador committed Jan 21, 2011
1 parent 98e7bac commit cb5d581
Show file tree
Hide file tree
Showing 12 changed files with 158 additions and 67 deletions.
7 changes: 7 additions & 0 deletions server/lib/converterManager.js
Expand Up @@ -13,8 +13,15 @@ function ConverterManager(){
} }


this.getConverter = function(format){ this.getConverter = function(format){

if (!format || format == "")
return null;

format = format.split(";")[0];
for (c in converters) for (c in converters)
if (converters[c].format == format) if (converters[c].format == format)
return converters[c]; return converters[c];

return null;
} }
} }
20 changes: 0 additions & 20 deletions server/lib/filters/bodyDataReader.js

This file was deleted.

14 changes: 14 additions & 0 deletions server/lib/filters/contentNegotiation.js
Expand Up @@ -8,10 +8,24 @@ function ContentNegotiation(converterManager){
if (request.data == null) if (request.data == null)
request.data = {}; request.data = {};


if (request.headers['content-type'] == null){
response.statusCode = 500;
response.body = "content-type is not informed";
return;
}

converter = converterManager.getConverter(request.headers['content-type']); converter = converterManager.getConverter(request.headers['content-type']);

if (converter == null) {
response.statusCode = 500;
response.body = "content-type is not supported";
return;
}

object = converter.toObject(request.body); object = converter.toObject(request.body);


enrichContent(request.data,object); enrichContent(request.data,object);

chain.doChain(request,response); chain.doChain(request,response);


if (response.headers == null) if (response.headers == null)
Expand Down
3 changes: 3 additions & 0 deletions server/lib/filters/processResponse.js
Expand Up @@ -6,6 +6,9 @@ function ProcessResponse(){
this.execute = function(request,response,chain){ this.execute = function(request,response,chain){
chain.doChain(request,response); chain.doChain(request,response);


if (response.headers == null)
response.headers = {};

if (response.logicalName == "create" && request.method == "PUT") { if (response.logicalName == "create" && request.method == "PUT") {
response.statusCode = 201; response.statusCode = 201;
response.headers['location'] = "end"; response.headers['location'] = "end";
Expand Down
7 changes: 5 additions & 2 deletions server/lib/filters/routeExecutor.js
Expand Up @@ -7,6 +7,7 @@ function RouteExecutor(routeManager){
this.execute = function(request,response,chain){ this.execute = function(request,response,chain){
route = routeManager.find(request.method,request.url); route = routeManager.find(request.method,request.url);



if (route == null) { if (route == null) {
response.data = ""; response.data = "";
response.statusCode = 404; response.statusCode = 404;
Expand All @@ -19,9 +20,11 @@ function RouteExecutor(routeManager){
try { try {
eval(executer); eval(executer);
response.data = retorno; response.data = retorno;
response.statusCode = 200; response.statusCode = 200;
response.statusCode = retorno == null && request.method == "GET" ? 404 : 200;
} catch (e){ } catch (e){
console.log(e); console.log(e.message);
console.log(e.stack);
response.data = ""; response.data = "";
response.statusCode = 500; response.statusCode = 500;
} }
Expand Down
19 changes: 15 additions & 4 deletions server/lib/restfulie.js
Expand Up @@ -2,7 +2,6 @@ var routeManager = require("./routeManager")
var http = require("http") var http = require("http")
var filterManager = require("./filterManager") var filterManager = require("./filterManager")
var converterManager = require("./converterManager") var converterManager = require("./converterManager")
var bodyDataReader = require("./filters/bodyDataReader")
var contentNegotiation = require("./filters/contentNegotiation") var contentNegotiation = require("./filters/contentNegotiation")
var pathDataReader = require("./filters/pathDataReader") var pathDataReader = require("./filters/pathDataReader")
var queryStringDataReader= require("./filters/queryStringDataReader") var queryStringDataReader= require("./filters/queryStringDataReader")
Expand All @@ -22,8 +21,8 @@ function Restfulie(){
var server=null; var server=null;


convertersManager.register("application/json",JSONConverter.create()); convertersManager.register("application/json",JSONConverter.create());

filtersManager.register(processResponse.create()); filtersManager.register(processResponse.create());
filtersManager.register(bodyDataReader.create());
filtersManager.register(contentNegotiation.create(convertersManager)); filtersManager.register(contentNegotiation.create(convertersManager));
filtersManager.register(queryStringDataReader.create()); filtersManager.register(queryStringDataReader.create());
filtersManager.register(pathDataReader.create(routesManager)); filtersManager.register(pathDataReader.create(routesManager));
Expand Down Expand Up @@ -58,7 +57,7 @@ function Restfulie(){
this.registerRoute("POST","/"+baseuri,object_resource.create); this.registerRoute("POST","/"+baseuri,object_resource.create);


if (object_resource.update != null) if (object_resource.update != null)
this.registerRoute("PUT","/"+baseuri,object_resource.update); this.registerRoute("PUT","/"+baseuri+"/{id}",object_resource.update);


} }


Expand All @@ -77,7 +76,19 @@ function Restfulie(){


this.listen = function(port,ip){ this.listen = function(port,ip){
server = http.createServer(function(request,response){ server = http.createServer(function(request,response){
filtersManager.execute(request,response);
if ("POST,PUT".indexOf(request.method) != -1){
request.setEncoding('utf8');
request.on('data',function(data){
request.body = data;
filtersManager.execute(request,response);
});
} else {
request.body = "";
filtersManager.execute(request,response);
}


}); });
server.listen(port,ip); server.listen(port,ip);
} }
Expand Down
43 changes: 43 additions & 0 deletions server/test/integration/AllIntegrationTest.js
@@ -0,0 +1,43 @@
var restfulie = require("../../lib/restfulie")

var clientes = [];
function ClientesResource(){

this.index = function(){
console.log("clientes");
console.log(clientes);
return clientes;
}

this.show = function(id){
console.log("show"+id);
return clientes[id];
}

this.destroy = function(id){
console.log("destroy"+ id);
delete clientes[id];
}

this.create = function(cliente){
console.log("criar");
console.log(cliente);
clientes.push(cliente);
}

this.update = function(cliente,id){
console.log("update");
console.log(id);
console.log(cliente);
clientes[id] = cliente;
}

}

server = restfulie.createServer();

server.registerResource(ClientesResource);
server.listen(3000,"127.0.0.1");

console.log("initialized.");

3 changes: 2 additions & 1 deletion server/test/unit/converterManagerTest.js
Expand Up @@ -32,5 +32,6 @@ module.exports = testCase({
converter = cm.getConverter('application/json'); converter = cm.getConverter('application/json');
assert.equal(converter,JSONConverter); assert.equal(converter,JSONConverter);
assert.done(); assert.done();
} },

}); });
2 changes: 0 additions & 2 deletions server/test/unit/filters/allFiltersTest.js
@@ -1,14 +1,12 @@
var routeExecutorTest = require("./routeExecutorTest") var routeExecutorTest = require("./routeExecutorTest")
var pathDataReaderTest = require("./pathDataReaderTest") var pathDataReaderTest = require("./pathDataReaderTest")
var queryStringDataReaderTest = require("./queryStringDataReaderTest") var queryStringDataReaderTest = require("./queryStringDataReaderTest")
var bodyDataReaderTest = require("./bodyDataReaderTest")
var contentNegotiationTest = require("./contentNegotiationTest") var contentNegotiationTest = require("./contentNegotiationTest")
var processResponseTest = require("./processResponseTest") var processResponseTest = require("./processResponseTest")


exports['routeExecutorTest'] = routeExecutorTest; exports['routeExecutorTest'] = routeExecutorTest;
exports['pathDataReaderTest'] = pathDataReaderTest; exports['pathDataReaderTest'] = pathDataReaderTest;
exports['queryStringDataReaderTest'] = queryStringDataReaderTest; exports['queryStringDataReaderTest'] = queryStringDataReaderTest;
exports['bodyDataReaderTest'] = bodyDataReaderTest;
exports['contentNegotiationTest'] = contentNegotiationTest; exports['contentNegotiationTest'] = contentNegotiationTest;
exports['processResponse'] = processResponseTest; exports['processResponse'] = processResponseTest;


Expand Down
38 changes: 0 additions & 38 deletions server/test/unit/filters/bodyDataReaderTest.js

This file was deleted.

19 changes: 19 additions & 0 deletions server/test/unit/filters/contentNegotiationTest.js
Expand Up @@ -55,4 +55,23 @@ module.exports = testCase({
assert.done(); assert.done();
}, },



'should return response is content-type not defined or not supported' : function(assert){
chain = {
doChain : function(request,response){
}
};
request = {
headers : {}
};
response ={};

converterManager.getConverter = function(format){
}

cn.execute(request,response,chain);
assert.equal(response.statusCode,500);
assert.equal(response.body,"content-type is not informed");
assert.done();
}
}); });
50 changes: 50 additions & 0 deletions server/test/unit/filters/routeExecutorTest.js
Expand Up @@ -70,7 +70,57 @@ module.exports = testCase({


assert.ok(chainInvoked) assert.ok(chainInvoked)


assert.done();
},

'should return 404 statusCode for logic returning is null of request method get' : function(assert){
request = {method:"GET"};
response = {};

rm.find = function(){
return {
uri:"/services/{client.id}",
method:"GET",
logic: function(){
}
};
}
chainInvoked = false;
chain = {doChain : function(){
}};

re.execute(request,response,chain);
assert.equal(response.statusCode,404);
assert.done();
},

'should return 500 at logic of error' : function(assert){
request = {method:"GET"};
response = {};

rm.find = function(){
return {
uri:"/services/{client.id}",
method:"GET",
logic: function(){
throw new Error("error");
}
};
}
chainInvoked = false;
chain = {doChain : function(){
}};
_console = console;
console = {log : function(){}};

re.execute(request,response,chain);

console = _console;

assert.equal(response.statusCode,500);
assert.done(); assert.done();
} }




}); });

0 comments on commit cb5d581

Please sign in to comment.