This commit is contained in:
Ashen One
2022-12-22 07:22:29 +04:00
commit a417031af4
889 changed files with 108839 additions and 0 deletions

View File

@ -0,0 +1,54 @@
var server =require("../server/mock-server"),
Client=require("../../lib/node-rest-client").Client;
describe('Error Handlers', function () {
this.timeout(150000);
before(function () {
server.listen(4444);
console.log("server started on port 4444");
});
describe("Client Error Hanlers",function(){
it("handle error with client handler", function(done){
var client = new Client();
client.on('error', function(err){
done();
});
client.get(server.baseURL + "/json/error", function(data, response){
client.emit('error', response.status);
});
});
});
describe("#Request Error Handlers",function(){
it("handle error with request handler", function(done){
var client = new Client();
var req =client.get(server.baseURL + "/json/error", function(data, response){
req.emit('error', response.status);
});
req.on('error',function(err){
done();
})
});
});
after(function () {
server.close();
console.log("server stopped");
});
});

View File

@ -0,0 +1,70 @@
var server =require("../server/mock-server"),
Client=require("../../lib/node-rest-client").Client;
describe('Follows Redirects', function () {
this.timeout(150000);
before(function () {
server.listen(4444);
console.log("server started on port 4444");
});
describe("#Follows Redirects",function(){
it("follows Redirect", function(done){
var client = new Client();
client.post(server.baseURL + "/followRedirects", function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.redirected.should.equal(1);
done();
});
});
it("disable follows Redirect", function(done){
var client = new Client();
var args ={
requestConfig:{followRedirects:false}
};
client.post(server.baseURL + "/followRedirects",args, function(data, response){
response.statusCode.should.be.equal(301);
done();
});
});
it("set max redirects", function(done){
var client = new Client();
var args ={
requestConfig:{maxRedirects:3}
};
var req = client.post(server.baseURL + "/followRedirects?5",args, function(data, response){
response.statusCode.should.be.equal(301);
});
req.on('error', function(err){
err.message.should.be.equal("Max redirects exceeded.")
done();
});
});
});
after(function () {
server.close();
console.log("server stopped");
});
});

View File

@ -0,0 +1,232 @@
var server =require("../server/mock-server"),
Client=require("../../lib/node-rest-client").Client;
describe('GET Method', function () {
this.timeout(150000);
before(function () {
server.listen(4444);
console.log("server started on port 4444");
});
describe("#JSON",function(){
it("GET request with no args", function(done){
var client = new Client();
client.get(server.baseURL + "/json", function(data, response){
data.should.not.equal(null);
data.should.type("object");
done();
});
});
it("GET request with path variable substitution", function(done){
var client = new Client();
var args ={
path:{testNumber:123, testString:"test"}
};
client.get(server.baseURL + "/json/path/${testNumber}/${testString}",args, function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.url.should.equal("/json/path/123/test");
done();
});
});
it("GET request with parameters", function(done){
var client = new Client();
var args ={
parameters:{testNumber:123, testString:"test"}
};
client.get(server.baseURL + "/json/path/query",args, function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.url.should.equal("/json/path/query?testNumber=123&testString=test");
done();
});
});
it("GET request with registered method and no args", function(done){
var client = new Client();
client.registerMethod("testMethod",server.baseURL + "/json","GET");
client.methods.testMethod( function(data, response){
data.should.not.equal(null);
data.should.type("object");
done();
});
});
it("GET request with registered method and path variable substitution", function(done){
var client = new Client();
var args ={
path:{testNumber:123, testString:"test"}
};
client.registerMethod("testMethod",server.baseURL + "/json/path/${testNumber}/${testString}","GET");
client.methods.testMethod(args, function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.url.should.equal("/json/path/123/test");
done();
});
});
it("GET request with registered method and parameters", function(done){
var client = new Client();
var args ={
parameters:{testNumber:123, testString:"test"}
};
client.registerMethod("testMethod",server.baseURL + "/json/path/query","GET");
client.methods.testMethod(args, function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.url.should.equal("/json/path/query?testNumber=123&testString=test");
done();
});
});
it("GET request with incompatible parameters URL", function(done){
var client = new Client();
var args ={
parameters:{testNumber:123, testString:"test"}
};
client.on('error', function(err){
err.should.startWith("parameters argument cannot be used if parameters are already defined in URL");
done();
});
client.get(server.baseURL + "/json/path/query?testNumber=123&testString=test", args, function(data, response){
//noop
}).should.throw();
});
it("GET request with invalid args type", function(done){
var client = new Client();
var args = "123";
client.on('error', function(err){
err.should.startWith("args should be and object");
done();
});
client.get(server.baseURL + "/json/path/query",args, function(data, response){
//noop
}).should.throw();
});
it("GET request with invalid parameters type", function(done){
var client = new Client();
var args ={
parameters:"{test='123'}"
};
client.on('error', function(err){
err.should.startWith("cannot serialize");
done();
});
client.get(server.baseURL + "/json/path/query",args, function(data, response){
//noop
}).should.throw();
});
it("GET request with registered method and incompatible parameters URL", function(done){
var client = new Client();
var args ={
parameters:{testNumber:123, testString:"test"}
};
client.on('error', function(err){
err.should.startWith("parameters argument cannot be used if parameters are already defined in URL");
done();
});
client.registerMethod("testMethod",server.baseURL + "/json/path/query?testNumber=123&testString=test","GET");
client.methods.testMethod(args, function(data, response){
//noop
}).should.throw();
});
it("GET request with registered method and invalid args type", function(done){
var client = new Client();
var args ="123";
client.on('error', function(err){
err.should.startWith("args should be and object");
done();
});
client.registerMethod("testMethod",server.baseURL + "/json/path/query","GET");
client.methods.testMethod(args, function(data, response){
//noop
}).should.throw();
});
it("GET request with registered method and invalid parameters type", function(done){
var client = new Client();
var args ={
parameters:"{test='123'}"
};
client.on('error', function(err){
err.should.startWith("cannot serialize");
done();
});
client.registerMethod("testMethod",server.baseURL + "/json/path/query","GET");
client.methods.testMethod(args, function(data, response){
//noop
}).should.throw();
});
});
describe("#XML",function(){
it("GET request with no args", function(done){
var client = new Client();
client.get(server.baseURL + "/xml", function(data, response){
console.log("data es ", data);
data.should.not.equal(null);
data.should.type("object");
done();
});
});
});
after(function () {
server.close();
console.log("server stopped");
});
});

View File

@ -0,0 +1,241 @@
var server =require("../server/mock-server"),
Client=require("../../lib/node-rest-client").Client;
describe('POST Method', function () {
this.timeout(150000);
before(function () {
server.listen(4444);
console.log("server started on port 4444");
});
describe("#JSON",function(){
it("POST request with path variable substitution", function(done){
var client = new Client();
var args ={
path:{testNumber:123, testString:"test"},
data:'{"dataNumber":123, "dataString":"test"}'
};
client.post(server.baseURL + "/json/path/post/${testNumber}/${testString}",args, function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.url.should.equal("/json/path/post/123/test");
data.postData.should.equal('{"dataNumber":123, "dataString":"test"}');
done();
});
});
it("POST request with parameters", function(done){
var client = new Client();
var args ={
parameters:{testNumber:123, testString:"test"},
data:'{"dataNumber":123,"dataString":"test"}'
};
client.post(server.baseURL + "/json/path/post/query",args, function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.url.should.equal("/json/path/post/query?testNumber=123&testString=test");
data.postData.should.equal('{"dataNumber":123,"dataString":"test"}');
done();
});
});
it("POST request with registered method and no args", function(done){
var client = new Client();
client.registerMethod("testMethod",server.baseURL + "/json","POST");
client.methods.testMethod( function(data, response){
data.should.not.equal(null);
data.should.type("object");
done();
});
});
it("POST request with registered method and path variable substitution", function(done){
var client = new Client();
var args ={
path:{testNumber:123, testString:"test"},
data:'{"dataNumber":123,"dataString":"test"}'
};
client.registerMethod("testMethod",server.baseURL + "/json/path/post/${testNumber}/${testString}","POST");
client.methods.testMethod(args, function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.url.should.equal("/json/path/post/123/test");
data.postData.should.equal('{"dataNumber":123,"dataString":"test"}');
done();
});
});
it("POST request with registered method and parameters", function(done){
var client = new Client();
var args ={
parameters:{testNumber:123, testString:"test"},
data:'{"dataNumber":123,"dataString":"test"}'
};
client.registerMethod("testMethod",server.baseURL + "/json/path/post/query","POST");
client.methods.testMethod(args, function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.url.should.equal("/json/path/post/query?testNumber=123&testString=test");
data.postData.should.equal('{"dataNumber":123,"dataString":"test"}');
done();
});
});
it("POST request with incompatible parameters URL", function(done){
var client = new Client();
var args ={
parameters:{testNumber:123, testString:"test"},
data:{dataNumber:123, dataString:"test"}
};
client.on('error', function(err){
err.should.startWith("parameters argument cannot be used if parameters are already defined in URL");
done();
});
client.post(server.baseURL + "/json/path/post/query?testNumber=123&testString=test", args, function(data, response){
// noop
}).should.throw();
});
it("POST request with invalid args type", function(done){
var client = new Client();
var args = "123";
client.on('error', function(err){
err.should.startWith("args should be and object");
done();
});
client.post(server.baseURL + "/json/path/post/query",args, function(data, response){
// noop
}).should.throw();
});
it("POST request with invalid parameters type", function(done){
var client = new Client();
var args ={
parameters:"{test='123'}"
};
client.on('error', function(err){
err.should.startWith("cannot serialize");
done();
});
client.post(server.baseURL + "/json/path/post/query",args, function(data, response){
// noop
}).should.throw();
});
it("POST request with registered method and incompatible parameters URL", function(done){
var client = new Client();
var args ={
parameters:{testNumber:123, testString:"test"},
data:{dataNumber:123, dataString:"test"}
};
client.on('error', function(err){
err.should.startWith("parameters argument cannot be used if parameters are already defined in URL");
done();
});
client.registerMethod("testMethod",server.baseURL + "/json/path/post/query?testNumber=123&testString=test","POST");
client.methods.testMethod(args, function(data, response){
// noop
}).should.throw();
});
it("POST request with registered method and invalid args type", function(done){
var client = new Client();
var args ="123";
client.on('error', function(err){
err.should.startWith("args should be and object");
done();
});
client.registerMethod("testMethod",server.baseURL + "/json/path/post/query","POST");
client.methods.testMethod(args, function(data, response){
// noop
}).should.throw();
});
it("POST request with registered method and invalid parameters type", function(done){
var client = new Client();
var args ={
parameters:"{test='123'}"
};
client.on('error', function(err){
err.should.startWith("cannot serialize");
done();
});
client.registerMethod("testMethod",server.baseURL + "/json/path/post/query","POST");
client.methods.testMethod(args, function(data, response){
// noop
}).should.throw();
});
});
describe("#XML",function(){
it("POST request with parameters", function(done){
var client = new Client();
var args ={
data:"<?xml version='1.0'?><testData><testNumber>123</testNumber><testString>123</testString></testData>"
};
client.post(server.baseURL + "/xml/path/post/query",args, function(data, response){
data.should.type("object");
data.testData.should.be.ok;
data.testData.testNumber.should.be.ok;
data.testData.testString.should.be.ok;
data.testData.testNumber.should.be.a.Number;
data.testData.testString.should.be.a.String;
data.testData.testNumber.should.be.equal("123");
data.testData.testString.should.be.equal("123");
done();
});
});
});
after(function () {
server.close();
console.log("server stopped");
});
});

View File

@ -0,0 +1,317 @@
var server =require("../server/mock-server"),
Client=require("../../lib/node-rest-client").Client;
describe('IO Facade', function () {
this.timeout(150000);
before(function () {
server.listen(4444);
console.log("server started on port 4444");
});
describe("#Parsers",function(){
var testParser = {"name":"test-parser",
"isDefault":false,
"match":function(response){
return response.headers["test-header"] === "test";
},
"parse":function(byteBuffer,nrcEventEmitter,parsedCallback){
var message = JSON.parse(byteBuffer.toString());
message.parsed = true;
parsedCallback(message);
}
},
defaultTestParser = {"name":"default-test-parser",
"isDefault":true,
"parse":function(byteBuffer,nrcEventEmitter,parsedCallback){
var message = JSON.parse(byteBuffer.toString());
message.defaultParsed = true;
parsedCallback(message);
}
};
it("add invalid parser to client", function(done){
var client = new Client();
client.on('error', function(err){
err.should.startWith("parser cannot be added: invalid parser definition");
done();
});
client.parsers.add({"invalid":123, "parser":456}).should.throw();
});
it("add parser to client", function(done){
var client = new Client();
client.parsers.add(testParser);
var parser = client.parsers.find("test-parser");
parser.should.not.equal(null);
parser.should.type("object");
done();
});
it("remove parser from client", function(done){
var client = new Client();
client.on('error', function(err){
err.should.startWith("cannot find parser: test-parser doesn't exists");
done();
});
client.parsers.add(testParser);
var parser = client.parsers.find("test-parser");
parser.should.not.equal(null);
parser.should.type("object");
client.parsers.remove("test-parser");
client.parsers.find("test-parser");
});
it("response match parser", function(done){
var client = new Client();
client.parsers.clean();
client.parsers.add(testParser);
client.get(server.baseURL + "/json", function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.should.have.property("parsed");
data.parsed.should.be.a.Boolean;
data.parsed.should.be.true;
done();
});
});
it("add and use default parser", function(done){
var client = new Client();
client.parsers.clean();
client.parsers.add(testParser);
client.parsers.add(defaultTestParser);
// no parsers defined, default must be used
client.get(server.baseURL + "/json/path?default-test", function(data, response){
data.should.not.equal(null);
data.should.type("object");
data.should.have.property("defaultParsed");
data.defaultParsed.should.be.a.Boolean;
data.defaultParsed.should.be.true;
done();
});
});
it("add custom types to args in JSON parser", function(done){
var options={
// customize mime types for json or xml connections
mimetypes: {
json: ["test/json"]
}
};
var client = new Client(options);
client.get(server.baseURL + "/json/test/content/type", function(data, response){
data.should.not.equal(null);
data.should.type("object");
done();
});
});
it("add custom types to args in XML parser", function(done){
var options={
// customize mime types for json or xml connections
mimetypes: {
xml: ["test/xml"]
}
};
var client = new Client(options);
client.get(server.baseURL + "/xml/test/content/type", function(data, response){
data.should.not.equal(null);
data.should.type("object");
done();
});
});
it("get all regular parsers", function(done){
var client = new Client();
var parsers = client.parsers.getAll();
parsers.should.have.length(2);
done();
});
it("emit custom event from parser to client", function(done){
var client = new Client();
client.on('customEvent',function(event){
event.should.be.equal("my custom event");
done();
});
client.parsers.clean();
client.parsers.add({
"name":"example-parser",
"isDefault":false,
"match":function(request){return true; },
"parse":function(byteBuffer,nrcEventEmitter,parsedCallback){
nrcEventEmitter('customEvent','my custom event');
// pass serialized data to client to be sent to remote API
parsedCallback(byteBuffer.toString());
}
});
var args ={data:"test data"}
client.post(server.baseURL + "/json/path/post/query",args, function(data, response){});
});
});
describe("#Serializers",function(){
var testSerializer = {"name":"test-serializer",
"isDefault":false,
"match":function(request){
return request.headers["test-header"] === "test";
},
"serialize":function(data,nrcEventEmitter,serializedCallback){
if (typeof data === 'object')
data.serialized = true;
serializedCallback(JSON.stringify(data));
}
},
defaultTestSerializer = {"name":"default-test-serializer",
"isDefault":true,
"serialize":function(data,nrcEventEmitter,serializedCallback){
if (typeof data === 'object')
data.defaultParsed = true;
serializedCallback(data);
}
};
it("add invalid serializer to client", function(done){
var client = new Client();
client.on('error', function(err){
err.should.startWith("serializer cannot be added: invalid serializer definition");
done();
});
client.serializers.add({"invalid":123, "serializer":456}).should.throw();
});
it("add serializer to client", function(done){
var client = new Client();
client.serializers.add(testSerializer);
var serializer = client.serializers.find("test-serializer");
serializer.should.not.equal(null);
serializer.should.type("object");
done();
});
it("remove serializer from client", function(done){
var client = new Client();
client.on('error', function(err){
err.should.startWith("cannot find serializer: test-serializer doesn't exists");
done();
});
client.serializers.add(testSerializer);
var serializer = client.serializers.find("test-serializer");
serializer.should.not.equal(null);
serializer.should.type("object");
client.serializers.remove("test-serializer");
client.serializers.find("test-serializer");
});
it("request match serializer", function(done){
var client = new Client(),
args={
headers:{"test-header":"test"},
data:{"testNumber":123, "testString":"abc"}
};
client.serializers.clean();
client.serializers.add(testSerializer);
var request = client.post(server.baseURL + "/json/path/post",args, function(data, response){
data.postData.should.not.equal(null);
data.postData.should.type("object");
data.postData.should.have.property("serialized");
data.postData.serialized.should.be.a.Boolean;
data.postData.serialized.should.be.true;
});
done();
});
it("get all regular serializers", function(done){
var client = new Client();
var serializers = client.serializers.getAll();
serializers.should.have.length(3);
done();
});
it("emit custom event from serializer to client", function(done){
var client = new Client();
client.on('customEvent',function(event){
event.should.be.equal("my custom event");
done();
});
client.serializers.clean();
client.serializers.add({
"name":"example-serializer",
"isDefault":false,
"match":function(request){return true; },
"serialize":function(data,nrcEventEmitter,serializedCallback){
nrcEventEmitter('customEvent','my custom event');
// pass serialized data to client to be sent to remote API
serializedCallback(data.toString());
}
});
var args ={data:"test data"}
client.post(server.baseURL + "/json/path/post/query",args, function(data, response){});
});
});
after(function () {
server.close();
});
});