odatafy-parser
Version:
generate odatafy ast from odata query parameters
101 lines (100 loc) • 4.44 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = __importDefault(require("assert"));
const parser_1 = require("../src/parser");
const nodes_1 = require("../src/types/nodes");
describe('public API tests', () => {
describe('parseODataUrl()', () => {
it('should parse ODataUrl correctly', () => {
let url = "https://api.dualis-bot.robin-reyer.de/Users?compute=FirstName as Name&expand=Products&$filter=Name eq 'Sebastian'&orderby=Name asc&$search=Spengler&select=Name&$skip=1&top=1&count=true";
let ast = (0, parser_1.parseODataUrl)(url);
let expectedAST = {
compute: {
nodeType: nodes_1.NodeTypes.ComputeNode,
value: [{
nodeType: nodes_1.NodeTypes.ComputeItemNode,
commonExpr: {
nodeType: nodes_1.NodeTypes.SymbolNode,
type: nodes_1.SymbolNodeTypes.Identifier,
value: "FirstName"
},
computeIdentifier: "Name"
}]
},
expand: {
nodeType: nodes_1.NodeTypes.ExpandNode,
value: [{
nodeType: nodes_1.NodeTypes.ExpandPathNode,
value: [{
nodeType: nodes_1.NodeTypes.ExpandIdentifierNode,
value: "Products"
}]
}]
},
filter: {
nodeType: nodes_1.NodeTypes.OperatorNode,
op: nodes_1.OperatorNodeOperators.Eq,
left: {
nodeType: nodes_1.NodeTypes.SymbolNode,
type: nodes_1.SymbolNodeTypes.Identifier,
value: "Name"
},
right: {
nodeType: nodes_1.NodeTypes.ConstantNode,
type: nodes_1.ConstantNodeTypes.String,
value: "Sebastian"
}
},
orderby: {
nodeType: nodes_1.NodeTypes.OrderbyNode,
value: [{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: nodes_1.OrderDirection.Asc,
value: "Name"
}]
},
search: {
nodeType: nodes_1.NodeTypes.SearchItemNode,
type: nodes_1.SearchItemTypes.Word,
value: "Spengler"
},
select: {
nodeType: nodes_1.NodeTypes.SelectNode,
value: [{
nodeType: nodes_1.NodeTypes.SelectPathNode,
value: [{
nodeType: nodes_1.NodeTypes.SelectIdentifierNode,
value: "Name"
}]
}]
},
skip: 1,
top: 1,
count: true
};
assert_1.default.deepStrictEqual(ast, expectedAST);
});
it('should not parse url with duplicate queryoption', () => {
let url = "https://api.dualis-bot.robin-reyer.de/Users?$skip=1&skip=1";
assert_1.default.throws(() => { (0, parser_1.parseODataUrl)(url); });
});
it('should only parse existing queryoptions', () => {
let url = 'https://api.dualis-bot.robin-reyer.de/Users?$skip=1';
let ast = (0, parser_1.parseODataUrl)(url);
let expectedAST = {
skip: 1
};
assert_1.default.deepStrictEqual(ast, expectedAST);
url = 'https://api.dualis-bot.robin-reyer.de/Users?$top=1';
ast = (0, parser_1.parseODataUrl)(url);
expectedAST = {
top: 1
};
assert_1.default.deepStrictEqual(ast, expectedAST);
});
});
});
parser_1.expandParser.parse;