UNPKG

odatafy-parser

Version:

generate odatafy ast from odata query parameters

101 lines (100 loc) 4.44 kB
"use strict"; 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;