mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2306 lines
61 KiB
2306 lines
61 KiB
"use strict"; |
|
|
|
var bodyParser = require("body-parser"); |
|
var express = require("express"); |
|
var mysql = require("mysql"); |
|
var Xapi = require("../lib/xapi.js"); |
|
var whereClause = require("../lib/util/whereClause.helper.js"); |
|
var should = require("should"); |
|
var request = require("supertest"); |
|
const cmdargs = require("../lib/util/cmd.helper.js"); |
|
const { version } = require("../package.json"); |
|
|
|
var args = {}; |
|
var app = {}; |
|
var agent = {}; |
|
var api = {}; |
|
var apiPrefix = "/apj/v1/"; |
|
var mysqlPool = {}; |
|
|
|
//desribe group of tests done |
|
describe("xmysql : tests", function() { |
|
before(function(done) { |
|
args["host"] = process.env.DATABASE_HOST || "localhost"; |
|
args["user"] = process.env.DATABASE_USER || "root"; |
|
args["password"] = process.env.DATABASE_PASSWORD || ""; |
|
args["database"] = process.env.DATABASE_NAME || "classicmodels"; |
|
args["apiPrefix"] = apiPrefix; |
|
|
|
cmdargs.handle(args); |
|
|
|
mysqlPool = mysql.createPool(args); |
|
|
|
app = express(); |
|
app.set("version", version); |
|
app.use(bodyParser.json()); |
|
app.use( |
|
bodyParser.urlencoded({ |
|
extended: true |
|
}) |
|
); |
|
|
|
agent = request.agent(app); |
|
|
|
api = new Xapi(args, mysqlPool, app); |
|
api.init(function(err, results) { |
|
if (err) { |
|
process.exit(1); |
|
} |
|
app.listen(3000); |
|
done(); |
|
}); |
|
}); |
|
|
|
after(function(done) { |
|
mysqlPool.end(function(err) { |
|
done(); |
|
}); |
|
}); |
|
|
|
beforeEach(function(done) { |
|
//init common variables for each test |
|
done(); |
|
}); |
|
|
|
afterEach(function(done) { |
|
//term common variables for each test |
|
done(); |
|
}); |
|
|
|
it("GET " + apiPrefix + "tables should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "tables") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/tables error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equal(8); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "payments/count should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "payments/count") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/tables error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["no_of_rows"].should.be.equal(273); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices/distinct?_fields=country should PASS", |
|
function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "offices/distinct?_fields=country") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/tables error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equal(5); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it("GET " + apiPrefix + "customers/describe should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "customers/describe") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/tables error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equal(13); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "payments/103___JM555205 should PASS", function( |
|
done |
|
) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "payments/103___JM555205") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/tables error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response - max value here is 14571.44 |
|
res.body.length.should.be.equal(1); |
|
res.body[0]["amount"].should.be.greaterThan(14570); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "customers should PASS", function(done) { |
|
//testcase |
|
|
|
//http get an url |
|
agent |
|
.get(apiPrefix + "customers") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/customers error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body.should.be.instanceOf(Array); |
|
res.body.length.should.be.greaterThan(0); |
|
|
|
//validate response |
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "customers/103 should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "customers/103") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/customers/103 error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.should.be.instanceOf(Object); |
|
res.body[0]["customerNumber"].should.be.equal(103); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "payments?_p=2 should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "payments?_p=2") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/offices/1/employees error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate resonse |
|
res.body.should.be.instanceOf(Array); |
|
res.body.length.should.be.equal(20); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "customers should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "customers") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/tables error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equal(20); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "customers?_size=100 should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "customers?_size=100") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/tables error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equal(100); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "customers?_size=1000 should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "customers?_size=1000") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/tables error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equal(100); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "customers?_size=-1 should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "customers?_size=-1") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/tables error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equal(20); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "payments?_p=2&_size=10 should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "payments?_p=2&_size=10") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/offices/1/employees error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate resonse |
|
res.body.should.be.instanceOf(Array); |
|
res.body.length.should.be.equal(10); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "offices?_sort=city should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "offices?_sort=city") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/offices/1/employees error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate resonse |
|
res.body.should.be.instanceOf(Array); |
|
res.body[0]["city"].should.be.equal("Boston"); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices?_fields=officeCode,city should PASS", |
|
function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "offices?_fields=officeCode,city") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/offices/1/employees error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate resonse |
|
res.body.should.be.instanceOf(Array); |
|
Object.keys(res.body[0]).length.should.be.equal(2); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices?_fields=officeCode,ity should PASS", |
|
function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "offices?_fields=officeCode,ity") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/offices/1/employees error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate resonse |
|
res.body.should.be.instanceOf(Array); |
|
|
|
// ity in _fields is an in valid column and it should be ignored |
|
Object.keys(res.body[0]).length.should.be.equal(1); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"offices?_fields=-territory,-addressLine2,-state should PASS", |
|
function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "offices?_fields=-territory,-addressLine2,-state") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/offices/1/employees error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate resonse |
|
res.body.should.be.instanceOf(Array); |
|
Object.keys(res.body[0]).length.should.be.equal(6); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"offices?_where=(((officeCode,in,1,2))~and(city,eq,boston)) should PASS", |
|
function(done) { |
|
//http get an url |
|
agent |
|
.get( |
|
apiPrefix + |
|
"offices?_where=(((officeCode,in,1,2))~and(city,eq,boston))" |
|
) // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/offices/1/employees error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
// tate is an invalid column but still it should query right number of columns |
|
res.body.length.should.be.equal(1); |
|
res.body[0]["city"].should.be.equal("Boston"); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"offices?_fields=-territory,-addressLine2,-state,-tate should PASS", |
|
function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "offices?_fields=-territory,-addressLine2,-state") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/offices/1/employees error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate resonse |
|
res.body.should.be.instanceOf(Array); |
|
|
|
// tate is an invalid column but still it should query right number of columns |
|
Object.keys(res.body[0]).length.should.be.equal(6); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it("GET " + apiPrefix + "offices?_sort=-city should PASS", function(done) { |
|
//http get an url |
|
agent |
|
.get(apiPrefix + "offices?_sort=-city") // api url |
|
.expect(200) // 2xx for success and 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/offices/1/employees error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate resonse |
|
res.body.should.be.instanceOf(Array); |
|
res.body[0]["city"].should.be.equal("Tokyo"); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
// it('GET ' + apiPrefix + 'offices?_sort=-city,ity,-ity should PASS', function (done) { |
|
// |
|
// //http get an url |
|
// agent.get(apiPrefix + 'offices?_sort=-city,ity,-ity') // api url |
|
// .expect(200) // 2xx for success and 4xx for failure |
|
// .end(function (err, res) { |
|
// // Handle /api/offices/1/employees error |
|
// if (err) { |
|
// return done(err); |
|
// } |
|
// |
|
// //validate resonse |
|
// res.body.should.be.instanceOf(Array) |
|
// |
|
// // ity is an invalid sort element and should be ignored |
|
// res.body[0]['city'].should.be.equal('Tokyo') |
|
// |
|
// return done(); |
|
// }); |
|
// |
|
// }); |
|
|
|
it("POST /api/productlines should PASS", function(done) { |
|
var obj = {}; |
|
|
|
obj["productLine"] = "Hyperloop"; |
|
obj["textDescription"] = |
|
'Hyperloop is essentially a train system that Musk calls "a cross between ' + |
|
'a Concorde, a railgun, and an air hockey table". ' + |
|
"It's based on the very high-speed transit (VHST) system proposed in 1972," + |
|
"which combines a magnetic levitation train and a low pressure transit tube." + |
|
"It evolves some of the original ideas of VHST, but it still uses tunnels" + |
|
"and pods or capsules to move from place to place."; |
|
|
|
//post to an url with data |
|
agent |
|
.post(apiPrefix + "productlines") //enter url |
|
.send(obj) //postdata |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
|
|
res.body["affectedRows"].should.be.equals(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("POST /api/productlines/bulk should PASS", function(done) { |
|
var objArray = []; |
|
|
|
var obj = {}; |
|
obj["productLine"] = "Bulletrain"; |
|
obj["textDescription"] = "Japan"; |
|
|
|
var obj1 = {}; |
|
obj1["productLine"] = "Bulletrain_1"; |
|
obj1["textDescription"] = "China"; |
|
|
|
objArray.push(obj); |
|
objArray.push(obj1); |
|
|
|
//post to an url with data |
|
agent |
|
.post(apiPrefix + "productlines/bulk") //enter url |
|
.send(objArray) //postdata |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
|
|
res.body["affectedRows"].should.be.equals(2); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("POST /api/productlines/bulk should PASS", function(done) { |
|
var objArray = []; |
|
|
|
var obj = {}; |
|
obj["productLine"] = "Bulletrain_2"; |
|
|
|
var obj1 = {}; |
|
obj1["productLine"] = "Bulletrain_3"; |
|
|
|
objArray.push(obj); |
|
objArray.push(obj1); |
|
|
|
//post to an url with data |
|
agent |
|
.post(apiPrefix + "productlines/bulk") //enter url |
|
.send(objArray) //postdata |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
|
|
res.body["affectedRows"].should.be.equals(2); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "productlines/bulk should PASS", function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"productlines/bulk?_ids=Bulletrain,Bulletrain_1,Bulletrain_2,Bulletrain_3" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
|
|
res.body.length.should.be.equals(4); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("DELETE /api/productlines/bulk should PASS", function(done) { |
|
//post to an url with data |
|
agent |
|
.del( |
|
apiPrefix + |
|
"productlines/bulk?_ids=Bulletrain,Bulletrain_1,Bulletrain_2,Bulletrain_3" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
|
|
res.body["affectedRows"].should.be.equals(4); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("PUT /api/productlines should PASS", function(done) { |
|
var obj = {}; |
|
|
|
obj["productLine"] = "Hyperloop"; |
|
obj["textDescription"] = |
|
'Hyperloop is essentially a train system that ElonMusk calls "a cross between ' + |
|
'a Concorde, a railgun, and an air hockey table". ' + |
|
"It's based on the very high-speed transit (VHST) system proposed in 1972," + |
|
"which combines a magnetic levitation train and a low pressure transit tube." + |
|
"It evolves some of the original ideas of VHST, but it still uses tunnels" + |
|
"and pods or capsules to move from place to place."; |
|
|
|
//post to an url with data |
|
agent |
|
.put(apiPrefix + "productlines") //enter url |
|
.send(obj) //postdata |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body["affectedRows"].should.be.equals(2); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
if (args["host"] === "localhost") { |
|
it("POST /dynamic should PASS", function(done) { |
|
var obj = {}; |
|
|
|
obj["query"] = "select * from ?? limit 0,5"; |
|
obj["params"] = ["customers"]; |
|
|
|
//post to an url with data |
|
agent |
|
.post("/dynamic") //enter url |
|
.send(obj) //postdata |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equals(5); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("POST /dynamic/abc should PASS", function(done) { |
|
var obj = {}; |
|
|
|
obj["query"] = "select * from ?? limit 0,5"; |
|
obj["params"] = ["customers"]; |
|
|
|
//post to an url with data |
|
agent |
|
.post("/dynamic") //enter url |
|
.send(obj) //postdata |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
|
|
res.body.length.should.be.equals(5); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("POST /dynamic should PASS", function(done) { |
|
var obj = {}; |
|
|
|
obj["query"] = "select * from customers limit 0,5"; |
|
obj["params"] = []; |
|
|
|
//post to an url with data |
|
agent |
|
.post("/dynamic") //enter url |
|
.send(obj) //postdata |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
|
|
res.body.length.should.be.equals(5); |
|
|
|
return done(); |
|
}); |
|
}); |
|
} |
|
|
|
it("PATCH /api/productlines/Hyperloop should PASS", function(done) { |
|
var obj = {}; |
|
|
|
obj["textDescription"] = |
|
'Hyperloop is essentially a train system that Elon Musk (https://twitter.com/elonmusk) calls "a cross between ' + |
|
'a Concorde, a railgun, and an air hockey table". ' + |
|
"It's based on the very high-speed transit (VHST) system proposed in 1972," + |
|
"which combines a magnetic levitation train and a low pressure transit tube." + |
|
"It evolves some of the original ideas of VHST, but it still uses tunnels" + |
|
"and pods or capsules to move from place to place."; |
|
|
|
//post to an url with data |
|
agent |
|
.patch(apiPrefix + "productlines/Hyperloop") //enter url |
|
.send(obj) //postdata |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body["affectedRows"].should.be.equals(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("DELETE /api/customers/:id should PASS", function(done) { |
|
var obj = {}; |
|
|
|
//post to an url with data |
|
agent |
|
.del(apiPrefix + "productlines/Hyperloop") //enter url |
|
.send(obj) //postdata |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body["affectedRows"].should.be.equals(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "offices/1/employees should PASS", function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices/1/employees") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.above(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"offices/1/employees?_where=(jobTitle,eq,Sales%20Rep) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices/1/employees?_where=(jobTitle,eq,Sales%20Rep)") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equals(2); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"payments?_where=(amount,gte,1000)~and(customerNumber,lte,120) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"payments?_where=(amount,gte,1000)~and(customerNumber,lte,120)" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equals(13); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
// SOMETHING WEIRD HERE |
|
// test in travis show 7 but on local machine result has 6 elements |
|
// it('GET ' + apiPrefix + 'productlines?_where=(htmlDescription,is,null) should PASS', function (done) { |
|
// |
|
// //post to an url with data |
|
// agent.get(apiPrefix + 'productlines?_where=(htmlDescription,is,null)') //enter url |
|
// .expect(200)//200 for success 4xx for failure |
|
// .end(function (err, res) { |
|
// // Handle /api/v error |
|
// if (err) { |
|
// return done(err); |
|
// } |
|
// |
|
// //validate response |
|
// res.body.length.should.be.equals(6) |
|
// |
|
// return done(); |
|
// |
|
// }); |
|
// }); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices?_where=(city,like,~on~) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices?_where=(city,like,~on~)") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equals(2); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices?_where=(city,like,san~) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices?_where=(city,like,san~)") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equals(1); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices?_where=(country,nlike,us~) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices?_where=(country,nlike,us~)") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equals(4); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"payments?_where=(amount,gte,1000)&_sort=-amount should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "payments?_where=(amount,gte,1000)&_sort=-amount") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0].amount.should.be.equals(120166.58); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"payments?_where=(checkNumber,eq,JM555205)~or(checkNumber,eq,OM314933) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"payments?_where=(checkNumber,eq,JM555205)~or(checkNumber,eq,OM314933)" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equals(2); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"payments?_where=((checkNumber,eq,JM555205)~or(checkNumber,eq,OM314933)) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"payments?_where=((checkNumber,eq,JM555205)~or(checkNumber,eq,OM314933))" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equals(2); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it("GET " + apiPrefix + "employees/1002/employees should PASS", function( |
|
done |
|
) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "employees/1002/employees") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.above(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "productlines/trains/products should PASS", function( |
|
done |
|
) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "productlines/trains/products") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.above(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "productlines/trains/products should PASS", function( |
|
done |
|
) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "productlines/trains/products") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.above(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "employees/1165/customers should PASS", function( |
|
done |
|
) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "employees/1165/customers") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.above(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "customers/103/orders should PASS", function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "customers/103/orders") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.above(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it( |
|
"GET " + apiPrefix + "products/S10_1678/orderdetails should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "products/S10_1678/orderdetails") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.above(1); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it("GET " + apiPrefix + "customers/103/payments should PASS", function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "customers/103/payments") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.above(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"customers/groupby?_fields=city&_sort=city should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "customers/groupby?_fields=city&_sort=city") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["city"].should.be.equals("Aachen"); |
|
res.body.length.should.be.equals(95); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices/ugroupby?_fields=country should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices/ugroupby?_fields=country") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
Object.keys(res.body).length.should.be.equals(1); |
|
res.body["country"].length.should.be.equals(5); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"offices/ugroupby?_fields=country,city,state should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices/ugroupby?_fields=country,city,state") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
//res.body.length.should.be.equals(3) |
|
Object.keys(res.body).length.should.be.equals(3); |
|
res.body["country"].length.should.be.equals(5); |
|
res.body["city"].length.should.be.equals(7); |
|
res.body["state"].length.should.be.equals(5); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices/ugroupby?_fields=country,city should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices/ugroupby?_fields=country,city") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
Object.keys(res.body).length.should.be.equals(2); |
|
res.body["country"].length.should.be.equals(5); |
|
res.body["city"].length.should.be.equals(7); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it("GET " + apiPrefix + "offices/ugroupby?_fields= should PASS", function( |
|
done |
|
) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices/ugroupby?_fields=") //enter url |
|
.expect(400) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
Object.keys(res.body).length.should.be.equals(1); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "payments/chart?_fields=amount should PASS", function( |
|
done |
|
) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "payments/chart?_fields=amount") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body.length.should.be.equals(7); |
|
res.body[0]["_count"].should.be.equals(45); |
|
res.body[2]["_count"].should.be.equals(109); |
|
res.body[6]["_count"].should.be.equals(2); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"payments/chart?_fields=amount&min=0&max=131000&step=25000 should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"payments/chart?_fields=amount&min=0&max=131000&step=25000" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body.length.should.be.equals(5); |
|
res.body[0]["_count"].should.be.equals(107); |
|
res.body[1]["_count"].should.be.equals(124); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it("GET " + apiPrefix + "payments/autochart should PASS", function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "payments/autochart") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body[0]["chart"].length.should.be.equals(7); |
|
res.body[0]["chart"][0]["_count"].should.be.equals(45); |
|
res.body[0]["chart"][6]["_count"].should.be.equals(2); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it( |
|
"GET " + apiPrefix + "payments?_where=(amount,bw,1000,5000) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "payments?_where=(amount,bw,1000,5000)") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body.length.should.be.equals(19); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"payments/chart?_fields=amount&min=0&max=131000&step=25000&range=1 should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"payments/chart?_fields=amount&min=0&max=131000&step=25000&range=1" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body.length.should.be.equals(5); |
|
res.body[4]["_count"].should.be.equals(273); |
|
res.body[1]["_count"].should.be.equals(231); |
|
res.body[0]["_count"].should.be.equals(107); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"payments/chart?_fields=amount&steparray=0,50000,100000,140000 should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"payments/chart?_fields=amount&steparray=0,50000,100000,140000" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body.length.should.be.equals(3); |
|
res.body[0]["_count"].should.be.equals(231); |
|
res.body[1]["_count"].should.be.equals(37); |
|
res.body[2]["_count"].should.be.equals(5); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"payments/chart?_fields=amount&steparray=0,50000,100000,140000&range=1 should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"payments/chart?_fields=amount&steparray=0,50000,100000,140000&range=1" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body.length.should.be.equals(3); |
|
res.body[0]["_count"].should.be.equals(231); |
|
res.body[1]["_count"].should.be.equals(268); |
|
res.body[2]["_count"].should.be.equals(273); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "payments/chart?_fields=amount&range=1 should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "payments/chart?_fields=amount&range=1") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body.length.should.be.equals(7); |
|
res.body[0]["_count"].should.be.equals(45); |
|
res.body[6]["_count"].should.be.equals(273); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"offices/1/employees?_groupby=jobTitle&_having=(_count,gt,1) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"offices/1/employees?_groupby=jobTitle&_having=(_count,gt,1)" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["_count"].should.be.equals(2); |
|
res.body.length.should.be.equals(1); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices/1/employees?_groupby=jobTitle should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices/1/employees?_groupby=jobTitle") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["jobTitle"].should.be.equals("President"); |
|
res.body.length.should.be.equals(5); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it("GET " + apiPrefix + "offices?_groupby=country should PASS", function( |
|
done |
|
) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices?_groupby=country") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["country"].should.be.equals("Australia"); |
|
res.body.length.should.be.equals(5); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices?_groupby=country&_sort=country should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices?_groupby=country&_sort=-country") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["country"].should.be.equals("USA"); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices?_groupby=country&_sort=_count should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices?_groupby=country&_sort=_count") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["_count"].should.be.equals(1); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices?_groupby=country&_sort=-_count should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices?_groupby=country&_sort=-_count") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["country"].should.be.equals("USA"); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"offices/groupby?_fields=country&_having=(_count,gt,1) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + "offices/groupby?_fields=country&_having=(_count,gt,1)" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["country"].should.be.equals("USA"); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"offices?_groupby=country&_having=(_count,gt,1) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices?_groupby=country&_having=(_count,gt,1)") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["_count"].should.be.equals(3); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "offices/groupby?_fields=country should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "offices/groupby?_fields=country") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["country"].should.be.equals("USA"); |
|
res.body.length.should.be.equals(5); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"offices/groupby?_fields=country,city&_sort=city,country should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + "offices/groupby?_fields=country,city&_sort=city,country" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["country"].should.be.equals("USA"); |
|
res.body[0]["city"].should.be.equals("Boston"); |
|
res.body.length.should.be.equals(7); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"orders/aggregate?_fields=orderNumber,customerNumber should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "orders/aggregate?_fields=orderNumber,customerNumber") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["min_of_orderNumber"].should.be.equals(10100); |
|
res.body[0]["max_of_orderNumber"].should.be.equals(10425); |
|
res.body[0]["sum_of_orderNumber"].should.be.equals(3345575); |
|
Object.keys(res.body[0]).length.should.be.equals(12); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it("GET " + apiPrefix + "orders/aggregate should FAIL", function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "orders/aggregate") //enter url |
|
.expect(400) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
|
|
done(err); |
|
}); |
|
}); |
|
|
|
it("GET " + apiPrefix + "orders/groupby should FAIL", function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "orders/groupby") //enter url |
|
.expect(400) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
done(err); |
|
}); |
|
}); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"xjoin?_join=pl.productlines,_j,pr.products&_on1=(pl.productline,eq,pr.productline) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"xjoin?_join=pl.productlines,_j,pr.products&_on1=(pl.productline,eq,pr.productline)" |
|
) //enter url |
|
.expect(400) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"xjoin?_join=pl.productlines,_j,pr.products&_on1=(pl.productline,eq,pr.productline)&_fields=pl.productline,pr.productName should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"xjoin?_join=pl.productlines,_j,pr.products&_on1=(pl.productline,eq,pr.productline)&_fields=pl.productline,pr.productName" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
Object.keys(res.body[0]).length.should.be.equals(2); |
|
res.body.length.should.be.equals(20); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"xjoin?_join=pl.productlines,_j,pr.products&_on1=(pl.productline,eq,pr.productline)&_fields=pl_productline,pr.productName should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"xjoin?_join=pl.productlines,_j,pr.products&_on1=(pl.productline,eq,pr.productline)&_fields=pl_productline,pr.productName" |
|
) //enter url |
|
.expect(400) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"xjoin?_join=pl.productlines,_j,pr.products&_on1=(pl.productline,eq,pr.productline)&_fields=pl.productline,pr.productName&_size=2 should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"xjoin?_join=pl.productlines,_j,pr.products&_on1=(pl.productline,eq,pr.productline)&_fields=pl.productline,pr.productName&_size=2" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
Object.keys(res.body[0]).length.should.be.equals(2); |
|
res.body.length.should.be.equals(2); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + apiPrefix + "payments/count?_where=(amount,gt,19000) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get(apiPrefix + "payments/count?_where=(amount,gt,19000)") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body[0]["no_of_rows"].should.be.equals(196); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"payments/chart?_fields=amount&steppair=0,50000,40000,100000 should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"payments/chart?_fields=amount&steppair=0,50000,40000,100000" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equals(2); |
|
res.body[0]["_count"].should.be.equals(231); |
|
res.body[1]["_count"].should.be.equals(80); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
// it('GET ' + apiPrefix + 'xjoin?_join=pl.productlines,_j,pr.products,_j,ord.orderDetails&_on1=(pl.productline,eq,pr.productline)&_on2=(pr.productcode,eq,ord.productcode) should PASS', function (done) { |
|
// |
|
// //post to an url with data |
|
// agent.get(apiPrefix + 'xjoin?_join=pl.productlines,_j,pr.products,_j,ord.orderDetails&_on1=(pl.productline,eq,pr.productline)&_on2=(pr.productcode,eq,ord.productcode)') //enter url |
|
// .expect(200)//200 for success 4xx for failure |
|
// .end(function (err, res) { |
|
// |
|
// // Handle /api/v error |
|
// if (err) { |
|
// return done(err); |
|
// } |
|
// |
|
// //validate response |
|
// Object.keys(res.body[0]).length.should.be.equals(16) |
|
// res.body.length.should.be.equals(20) |
|
// |
|
// return done(); |
|
// |
|
// }); |
|
// }); |
|
|
|
it( |
|
"GET " + |
|
apiPrefix + |
|
"xjoin?_join=pl.productlines,_j,pr.products&_on1=(pl.productline,eq,pr.productline)&_fields=pl.productline,pr.productName&_size=2&_where=(productName,like,1972~) should PASS", |
|
function(done) { |
|
//post to an url with data |
|
agent |
|
.get( |
|
apiPrefix + |
|
"xjoin?_join=pl.productlines,_j,pr.products&_on1=(pl.productline,eq,pr.productline)&_fields=pl.productline,pr.productName&_size=2&_where=(productName,like,1972~)" |
|
) //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
//validate response |
|
res.body.length.should.be.equals(1); |
|
|
|
return done(); |
|
}); |
|
} |
|
); |
|
|
|
it("/_health should PASS", function(done) { |
|
//post to an url with data |
|
agent |
|
.get("/_health") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body["process_uptime"].should.be.greaterThanOrEqual(0); |
|
res.body["mysql_uptime"].should.be.greaterThanOrEqual(0); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("/_health?details=1 should PASS", function(done) { |
|
//post to an url with data |
|
agent |
|
.get("/_health?details=1") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body["process_uptime"].should.be.greaterThanOrEqual(0); |
|
res.body["mysql_uptime"].should.be.greaterThanOrEqual(0); |
|
res.body["os_total_memory"].should.be.greaterThanOrEqual(0); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("/_version should PASS", function(done) { |
|
//post to an url with data |
|
agent |
|
.get("/_version") //enter url |
|
.expect(200) //200 for success 4xx for failure |
|
.end(function(err, res) { |
|
// Handle /api/v error |
|
if (err) { |
|
return done(err); |
|
} |
|
|
|
res.body["Xmysql"].should.equals(version); |
|
res.body["mysql"].should.not.equals(""); |
|
res.body["node"].should.not.equals(""); |
|
|
|
return done(); |
|
}); |
|
}); |
|
|
|
it("where clause unit ?_where=(abc,eq,1234) should PASS", function(done) { |
|
var err = whereClause.getConditionClause("(abc,eq,1234)"); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(??=?)"); |
|
err.params[0].should.be.equal("abc"); |
|
err.params[1].should.be.equal("1234"); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(abc,ne,1234) should PASS", function(done) { |
|
var err = whereClause.getConditionClause("(abc,ne,1234)"); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(??!=?)"); |
|
err.params[0].should.be.equal("abc"); |
|
err.params[1].should.be.equal("1234"); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(abc,lt,1234) should PASS", function(done) { |
|
var err = whereClause.getConditionClause("(abc,lt,1234)"); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(??<?)"); |
|
err.params[0].should.be.equal("abc"); |
|
err.params[1].should.be.equal("1234"); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(abc,lte,1234) should PASS", function(done) { |
|
var err = whereClause.getConditionClause("(abc,lte,1234)"); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(??<=?)"); |
|
err.params[0].should.be.equal("abc"); |
|
err.params[1].should.be.equal("1234"); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(abc,gt,1234) should PASS", function(done) { |
|
var err = whereClause.getConditionClause("(abc,gt,1234)"); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(??>?)"); |
|
err.params[0].should.be.equal("abc"); |
|
err.params[1].should.be.equal("1234"); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(abc,gte,1234) should PASS", function(done) { |
|
var err = whereClause.getConditionClause("(abc,gte,1234)"); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(??>=?)"); |
|
err.params[0].should.be.equal("abc"); |
|
err.params[1].should.be.equal("1234"); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
// it('where clause unit ?_where=(abc,like,1234) should PASS', function (done) { |
|
// |
|
// var query = '' |
|
// var params = [] |
|
// var err = whereClause.getConditionClause('(abc,like,1234)') |
|
// |
|
// err.err.should.be.equal(0) |
|
// err.query.should.be.equal('(?? like ?)') |
|
// err.params[0].should.be.equal('abc') |
|
// err.params[1].should.be.equal('1234') |
|
// |
|
// done() |
|
// |
|
// //console.log(query,params,err); |
|
// |
|
// }); |
|
// |
|
// |
|
// it('where clause unit ?_where=(abc,nlike,1234) should PASS', function (done) { |
|
// |
|
// var query = '' |
|
// var params = [] |
|
// var err = whereClause.getConditionClause('(abc,nlike,1234)') |
|
// |
|
// err.err.should.be.equal(0) |
|
// err.query.should.be.equal('(?? not like ?)') |
|
// err.params[0].should.be.equal('abc') |
|
// err.params[1].should.be.equal('1234') |
|
// |
|
// done() |
|
// |
|
// //console.log(query,params,err); |
|
// |
|
// }); |
|
|
|
it("where clause unit ?_where=abc,eq,1234) should FAIL", function(done) { |
|
var err = whereClause.getConditionClause("abc,eq,1234)"); |
|
|
|
err.err.should.be.equal(1); |
|
err.query.should.be.equal(""); |
|
err.params.length.should.be.equal(0); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(abc,eq,1234 should FAIL", function(done) { |
|
var err = whereClause.getConditionClause("(abc,eq,1234"); |
|
|
|
err.err.should.be.equal(1); |
|
err.query.should.be.equal(""); |
|
err.params.length.should.be.equal(0); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(abc,eq1234) should FAIL", function(done) { |
|
var err = whereClause.getConditionClause("(abc,eq1234)"); |
|
|
|
err.err.should.be.equal(1); |
|
err.query.should.be.equal(""); |
|
err.params.length.should.be.equal(0); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(abceq,1234) should FAIL", function(done) { |
|
var err = whereClause.getConditionClause("(abceq,1234)"); |
|
|
|
err.err.should.be.equal(1); |
|
err.query.should.be.equal(""); |
|
err.params.length.should.be.equal(0); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(1,eq,1)(1,eq,2)~or should FAIL", function(done) { |
|
var err = whereClause.getConditionClause("(1,eq,1)(1,eq,2)~or"); |
|
|
|
err.err.should.be.equal(1); |
|
err.query.should.be.equal(""); |
|
err.params.length.should.be.equal(0); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(1,eq,1)~or~or(1,eq,2)(1,eq,2) should FAIL", function(done) { |
|
var err = whereClause.getConditionClause("(1,eq,1)~or~or(1,eq,2)(1,eq,2)"); |
|
|
|
err.err.should.be.equal(1); |
|
err.query.should.be.equal(""); |
|
err.params.length.should.be.equal(0); |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=(abc,eq,1)~or(b,eq,2) should PASS", function(done) { |
|
var err = whereClause.getConditionClause("(abc,eq,1)~or(b,eq,2)"); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(??=?)or(??=?)"); |
|
err.params.length.should.be.equal(4); |
|
err.params[0].should.be.equal("abc"); |
|
err.params[1].should.be.equal("1"); |
|
err.params[2].should.be.equal("b"); |
|
err.params[3].should.be.equal("2"); |
|
|
|
// err.params[1].should.be.equal('1234') |
|
|
|
done(); |
|
|
|
//console.log(query,params,err); |
|
}); |
|
|
|
it("where clause unit ?_where=((a,eq,1)~and(b,eq,2))~or(c,eq,3) should PASS", function(done) { |
|
var err = whereClause.getConditionClause( |
|
"((abc,eq,1234)~and(b,eq,2))~or(cde,eq,3)" |
|
); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("((??=?)and(??=?))or(??=?)"); |
|
err.params.length.should.be.equal(6); |
|
|
|
err.params[0].should.be.equal("abc"); |
|
err.params[2].should.be.equal("b"); |
|
err.params[4].should.be.equal("cde"); |
|
|
|
err.params[1].should.be.equal("1234"); |
|
err.params[3].should.be.equal("2"); |
|
err.params[5].should.be.equal("3"); |
|
|
|
done(); |
|
}); |
|
|
|
it("where clause unit ?_where=((a,eq,1)~and(b,eq,2))~xor(c,eq,3) should PASS", function(done) { |
|
var err = whereClause.getConditionClause( |
|
"((abc,eq,1234)~and(b,eq,2))~xor(cde,eq,3)" |
|
); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("((??=?)and(??=?))xor(??=?)"); |
|
err.params.length.should.be.equal(6); |
|
|
|
err.params[0].should.be.equal("abc"); |
|
err.params[2].should.be.equal("b"); |
|
err.params[4].should.be.equal("cde"); |
|
|
|
err.params[1].should.be.equal("1234"); |
|
err.params[3].should.be.equal("2"); |
|
err.params[5].should.be.equal("3"); |
|
|
|
done(); |
|
}); |
|
|
|
it("where clause unit ?_where=(a,eq,1)~and((b,eq,2)~or(c,eq,3)) should PASS", function(done) { |
|
var err = whereClause.getConditionClause( |
|
"(a,eq,1)~and((b,eq,2)~or(c,eq,3))" |
|
); |
|
|
|
//console.log(query,params); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(??=?)and((??=?)or(??=?))"); |
|
err.params.length.should.be.equal(6); |
|
|
|
err.params[0].should.be.equal("a"); |
|
err.params[2].should.be.equal("b"); |
|
err.params[4].should.be.equal("c"); |
|
|
|
err.params[1].should.be.equal("1"); |
|
err.params[3].should.be.equal("2"); |
|
err.params[5].should.be.equal("3"); |
|
|
|
done(); |
|
}); |
|
|
|
it("where clause unit ?_where=(a,in,1,2,3) should PASS", function(done) { |
|
var err = whereClause.getConditionClause("(a,in,1,2,3)"); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(?? in (?,?,?))"); |
|
|
|
done(); |
|
}); |
|
|
|
it("where clause unit ?_where=(a,like,~1234) should PASS", function(done) { |
|
var err = whereClause.getConditionClause("(a,like,~1234)"); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(?? like ?)"); |
|
err.params[0].should.be.equal("a"); |
|
err.params[1].should.be.equal("%1234"); |
|
|
|
done(); |
|
}); |
|
|
|
it("where clause unit ?_where=(a,like,~1234~) should PASS", function(done) { |
|
var err = whereClause.getConditionClause("(a,like,~1234~)"); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(?? like ?)"); |
|
err.params[0].should.be.equal("a"); |
|
err.params[1].should.be.equal("%1234%"); |
|
|
|
done(); |
|
}); |
|
|
|
it("where clause unit ?_where=(a,is,null)~and(b,is,true)~and(c,is,false) should PASS", function(done) { |
|
var err = whereClause.getConditionClause( |
|
"(a,is,null)~and(b,is,true)~and(c,is,false)" |
|
); |
|
|
|
err.err.should.be.equal(0); |
|
err.query.should.be.equal("(?? is ?)and(?? is ?)and(?? is ?)"); |
|
//err.params[1].should.be.equal(null) |
|
err.params[3].should.be.equal(true); |
|
err.params[5].should.be.equal(false); |
|
|
|
done(); |
|
}); |
|
});
|
|
|