odatafy-parser
Version:
generate odatafy ast from odata query parameters
208 lines (207 loc) • 7.78 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 orderbyParser_1 = __importDefault(require("../../src/parsing/orderbyParser"));
const nodes_1 = require("../../src/types/nodes");
function testParsingAndAST(testcase) {
it(`should parse ${testcase.type}: ${testcase.input}`, () => {
let ast = orderbyParser_1.default.parse(testcase.input);
assert_1.default.deepStrictEqual(ast, testcase.expectedAST);
});
}
function testError(testcase) {
it(`should throw Error because of ${testcase.type}`, () => {
assert_1.default.throws(() => {
orderbyParser_1.default.parse(testcase.input);
});
});
}
describe('Orderby Parser tests', () => {
describe('positive Tests', () => {
[{
type: "single default asc",
input: "Country/Name",
expectedAST: {
nodeType: nodes_1.NodeTypes.OrderbyNode,
value: [
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "asc",
value: "Country/Name"
}
]
}
},
{
type: "multi default asc",
input: "Country/Name,City,Street",
expectedAST: {
nodeType: nodes_1.NodeTypes.OrderbyNode,
value: [
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "asc",
value: "Country/Name"
},
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
"type": "asc",
"value": "City"
},
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
"type": "asc",
"value": "Street"
}
]
}
},
{
type: "single specified asc",
input: "Country/Name asc",
expectedAST: {
nodeType: nodes_1.NodeTypes.OrderbyNode,
value: [
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "asc",
value: "Country/Name"
}
]
}
},
{
type: "multi specified asc",
input: "Country/Name asc,City asc,Street asc",
expectedAST: {
nodeType: nodes_1.NodeTypes.OrderbyNode,
value: [
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "asc",
value: "Country/Name"
},
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
"type": "asc",
"value": "City"
},
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
"type": "asc",
"value": "Street"
}
]
}
},
{
type: "single specified desc",
input: "Country/Name desc",
expectedAST: {
nodeType: nodes_1.NodeTypes.OrderbyNode,
value: [
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "desc",
value: "Country/Name"
}
]
}
},
{
type: "multi specified desc",
input: "Country/Name desc,City desc,Street desc",
expectedAST: {
nodeType: nodes_1.NodeTypes.OrderbyNode,
value: [
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "desc",
value: "Country/Name"
},
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
"type": "desc",
"value": "City"
},
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
"type": "desc",
"value": "Street"
}
]
}
},
{
type: "default asc and specified desc",
input: "Country/Name,Street desc",
expectedAST: {
nodeType: nodes_1.NodeTypes.OrderbyNode,
value: [
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "asc",
value: "Country/Name"
},
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "desc",
value: "Street"
}
]
}
},
{
type: "specified asc and desc",
input: "Country/Name asc,Street desc",
expectedAST: {
nodeType: nodes_1.NodeTypes.OrderbyNode,
value: [
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "asc",
value: "Country/Name"
},
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "desc",
value: "Street"
}
]
}
},
{
type: "default asc and specified asc",
input: "Country/Name,Street asc",
expectedAST: {
nodeType: nodes_1.NodeTypes.OrderbyNode,
value: [
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "asc",
value: "Country/Name"
},
{
nodeType: nodes_1.NodeTypes.OrderbyItemNode,
type: "asc",
value: "Street"
}
]
}
}
].forEach(testParsingAndAST);
}),
describe('error tests', () => {
[{
type: 'Wrong Expression I',
input: ','
},
{
type: 'Wrong Expression II',
input: '_test, asc/d'
}].forEach(testError);
});
});