trader-server
Version:
OData server for testing strategies, simulating and real trading.
119 lines (106 loc) • 4.39 kB
text/typescript
/// <reference types="mocha" />
import { ODataController, ODataServer, ODataQuery, odata, HttpRequestError } from "../lib/index";
class ValidationError extends HttpRequestError{
constructor(){
super(400, "ODataValidationError");
}
}
class MyCustomValidation{
static validate(query:string | ODataQuery){
// throw error when using any query
if ((typeof query == "object" && query && query.type != "ODataUri") || typeof query == "string") throw new ValidationError();
}
}
class BaseController extends ODataController{
.GET
query(.query ast:ODataQuery){
return [];
}
.GET
filter(.key id:number, .filter ast:ODataQuery){
return {};
}
}
.validation(MyCustomValidation, {})
class ValidationController extends BaseController{}
class NoValidationController extends BaseController{}
.validation(MyCustomValidation, {})
.controller(ValidationController, true)
.controller(NoValidationController, true)
class ValidationServer extends ODataServer{}
describe("ODataValidation", () => {
it("should throw validation error (@odata.query)", () => {
return new Promise((resolve, reject) => {
try{
ValidationServer.execute("/Validation?$filter=Id eq 1").then(() => {
reject(new Error("should throw validation error"));
}, (err) => {
if (err instanceof ValidationError) return resolve();
reject(new Error("should throw validation error"));
}).catch(err => {
resolve();
});
}catch(err){
if (err instanceof ValidationError) return resolve();
reject(new Error("should throw validation error"));
}
});
});
it("should throw validation error (@odata.filter)", () => {
return new Promise((resolve, reject) => {
try{
ValidationServer.execute("/Validation(1)?$filter=Id eq 1").then(() => {
reject(new Error("should throw validation error"));
}, (err) => {
if (err instanceof ValidationError) return resolve();
reject(new Error("should throw validation error"));
}).catch(err => {
resolve();
});
}catch(err){
if (err instanceof ValidationError) return resolve();
reject(new Error("should throw validation error"));
}
});
});
it("should pass without validation error (@odata.query)", () => {
return new Promise((resolve, reject) => {
ValidationServer.execute("/Validation").then(() => {
resolve();
}, (err) => {
if (err instanceof ValidationError) return reject(new Error("should pass without validation error"));
resolve();
});
});
});
it("should pass without validation error (@odata.filter)", () => {
return new Promise((resolve, reject) => {
ValidationServer.execute("/Validation(1)").then(() => {
resolve();
}, (err) => {
if (err instanceof ValidationError) return reject(new Error("should pass without validation error"));
resolve();
});
});
});
it("should pass without validation error (@odata.query without @odata.validation)", () => {
return new Promise((resolve, reject) => {
ValidationServer.execute("/NoValidation?$filter=Id eq 1").then(() => {
resolve();
}, (err) => {
if (err instanceof ValidationError) return reject(new Error("should pass without validation error"));
resolve();
});
});
});
it("should pass without validation error (@odata.filter without @odata.validation)", () => {
return new Promise((resolve, reject) => {
ValidationServer.execute("/NoValidation(1)?$filter=Id eq 1").then(() => {
resolve();
}, (err) => {
if (err instanceof ValidationError) return reject(new Error("should pass without validation error"));
resolve();
});
});
});
});