UNPKG

relution-sdk

Version:

Relution Software Development Kit for TypeScript and JavaScript

98 lines 12.8 kB
/* * @file query/SortOrderComparator.spec.ts * Relution SDK * * Created by Thomas Beckmann on 23.06.2015 * Copyright 2016 M-Way Solutions GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @module query */ /** */ "use strict"; var chai_1 = require('chai'); var _ = require('lodash'); var SortOrder_1 = require('./SortOrder'); var SortOrderComparator_1 = require('./SortOrderComparator'); var movies_data_1 = require('./movies.data'); describe(module.filename || __filename, function () { return [ it('sort movies by id', function () { var testdata = movies_data_1.makeMovies(); var original = new Array(testdata.length); for (var i = 0; i < testdata.length; ++i) { original[i] = testdata[i].id; } testdata.sort(SortOrderComparator_1.jsonCompare(new SortOrder_1.SortOrder().fromJSON([ 'id' ]))); original.sort(); for (var j = 0; j < testdata.length; ++j) { chai_1.assert.equal(testdata[j].id, original[j], 'order at #' + j); } }), it('sort movies by year ascending', function () { var testdata = movies_data_1.makeMovies(); var original = new Array(testdata.length); for (var i = 0; i < testdata.length; ++i) { original[i] = testdata[i].year; } testdata.sort(SortOrderComparator_1.jsonCompare('+year')); original.sort(); for (var j = 0; j < testdata.length; ++j) { chai_1.assert.equal(testdata[j].year, original[j], 'order at #' + j); } }), it('sort movies by runtime descending', function () { var testdata = movies_data_1.makeMovies(); var original = new Array(testdata.length); for (var i = 0; i < testdata.length; ++i) { original[i] = testdata[i].runtime; } testdata.sort(SortOrderComparator_1.jsonCompare(new SortOrder_1.SortOrder().fromJSON([ '-runtime' ]))); original.sort(function (a, b) { return (b | 0) - (a | 0); }); for (var j = 0; j < testdata.length; ++j) { chai_1.assert.equal(testdata[j].runtime, original[j], 'order at #' + j); } }), it('sort movies by year descending, runtime ascending, id', function () { var testdata = movies_data_1.makeMovies(); var original = _.clone(testdata); testdata.sort(SortOrderComparator_1.jsonCompare([ '-year', '+runtime', 'id' ])); original.sort(function (a, b) { var result = (b.year | 0) - (a.year | 0); if (result === 0) { result = (a.runtime | 0) - (b.runtime | 0); if (result === 0) { result = a.id.localeCompare(b.id); } } return result; }); for (var j = 0; j < testdata.length; ++j) { chai_1.assert.equal(testdata[j], original[j], 'order at #' + j); } }) ]; }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29ydE9yZGVyQ29tcGFyYXRvci5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L1NvcnRPcmRlckNvbXBhcmF0b3Iuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0g7O0dBRUc7QUFDSCxNQUFNOztBQUVOLHFCQUFxQixNQUFNLENBQUMsQ0FBQTtBQUU1QixJQUFZLENBQUMsV0FBTSxRQUFRLENBQUMsQ0FBQTtBQUU1QiwwQkFBd0IsYUFBYSxDQUFDLENBQUE7QUFDdEMsb0NBQTBCLHVCQUF1QixDQUFDLENBQUE7QUFDbEQsNEJBQXlCLGVBQWUsQ0FBQyxDQUFBO0FBRXpDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLFVBQVUsRUFBRTtJQUN0QyxNQUFNLENBQUM7UUFFTCxFQUFFLENBQUMsbUJBQW1CLEVBQUU7WUFDdEIsSUFBSSxRQUFRLEdBQUcsd0JBQVUsRUFBRSxDQUFDO1lBRTVCLElBQUksUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDekMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0IsQ0FBQztZQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsaUNBQVcsQ0FBQyxJQUFJLHFCQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pELElBQUk7YUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRWhCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFB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SUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDM0MsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pCLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBRUgsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLGFBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUMsQ0FBQztLQUVILENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBAZmlsZSBxdWVyeS9Tb3J0T3JkZXJDb21wYXJhdG9yLnNwZWMudHNcbiAqIFJlbHV0aW9uIFNES1xuICpcbiAqIENyZWF0ZWQgYnkgVGhvbWFzIEJlY2ttYW5uIG9uIDIzLjA2LjIwMTVcbiAqIENvcHlyaWdodCAyMDE2IE0tV2F5IFNvbHV0aW9ucyBHbWJIXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogQG1vZHVsZSBxdWVyeVxuICovXG4vKiogKi9cblxuaW1wb3J0IHthc3NlcnR9IGZyb20gJ2NoYWknO1xuXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7U29ydE9yZGVyfSBmcm9tICcuL1NvcnRPcmRlcic7XG5pbXBvcnQge2pzb25Db21wYXJlfSBmcm9tICcuL1NvcnRPcmRlckNvbXBhcmF0b3InO1xuaW1wb3J0IHttYWtlTW92aWVzfSBmcm9tICcuL21vdmllcy5kYXRhJztcblxuZGVzY3JpYmUobW9kdWxlLmZpbGVuYW1lIHx8IF9fZmlsZW5hbWUsIGZ1bmN0aW9uKCkge1xuICByZXR1cm4gW1xuXG4gICAgaXQoJ3NvcnQgbW92aWVzIGJ5IGlkJywgKCkgPT4ge1xuICAgICAgdmFyIHRlc3RkYXRhID0gbWFrZU1vdmllcygpO1xuXG4gICAgICB2YXIgb3JpZ2luYWwgPSBuZXcgQXJyYXkodGVzdGRhdGEubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgb3JpZ2luYWxbaV0gPSB0ZXN0ZGF0YVtpXS5pZDtcbiAgICAgIH1cblxuICAgICAgdGVzdGRhdGEuc29ydChqc29uQ29tcGFyZShuZXcgU29ydE9yZGVyKCkuZnJvbUpTT04oW1xuICAgICAgICAnaWQnXG4gICAgICBdKSkpO1xuICAgICAgb3JpZ2luYWwuc29ydCgpO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRlc3RkYXRhLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGFzc2VydC5lcXVhbCh0ZXN0ZGF0YVtqXS5pZCwgb3JpZ2luYWxbal0sICdvcmRlciBhdCAjJyArIGopO1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgaXQoJ3NvcnQgbW92aWVzIGJ5IHllYXIgYXNjZW5kaW5nJywgKCkgPT4ge1xuICAgICAgdmFyIHRlc3RkYXRhID0gbWFrZU1vdmllcygpO1xuXG4gICAgICB2YXIgb3JpZ2luYWwgPSBuZXcgQXJyYXkodGVzdGRhdGEubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdGRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgb3JpZ2luYWxbaV0gPSB0ZXN0ZGF0YVtpXS55ZWFyO1xuICAgICAgfVxuXG4gICAgICB0ZXN0ZGF0YS5zb3J0KGpzb25Db21wYXJlKFxuICAgICAgICAnK3llYXInXG4gICAgICApKTtcbiAgICAgIG9yaWdpbmFsLnNvcnQoKTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0ZXN0ZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICBhc3NlcnQuZXF1YWwodGVzdGRhdGFbal0ueWVhciwgb3JpZ2luYWxbal0sICdvcmRlciBhdCAjJyArIGopO1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgaXQoJ3NvcnQgbW92aWVzIGJ5IHJ1bnRpbWUgZGVzY2VuZGluZycsICgpID0+IHtcbiAgICAgIHZhciB0ZXN0ZGF0YSA9IG1ha2VNb3ZpZXMoKTtcblxuICAgICAgdmFyIG9yaWdpbmFsID0gbmV3IEFycmF5KHRlc3RkYXRhLmxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RkYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIG9yaWdpbmFsW2ldID0gdGVzdGRhdGFbaV0ucnVudGltZTtcbiAgICAgIH1cblxuICAgICAgdGVzdGRhdGEuc29ydChqc29uQ29tcGFyZShuZXcgU29ydE9yZGVyKCkuZnJvbUpTT04oW1xuICAgICAgICAnLXJ1bnRpbWUnXG4gICAgICBdKSkpO1xuICAgICAgb3JpZ2luYWwuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gKGIgfCAwKSAtIChhIHwgMCk7XG4gICAgICB9KTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0ZXN0ZGF0YS5sZW5ndGg7ICsraikge1xuICAgICAgICBhc3NlcnQuZXF1YWwodGVzdGRhdGFbal0ucnVudGltZSwgb3JpZ2luYWxbal0sICdvcmRlciBhdCAjJyArIGopO1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgaXQoJ3NvcnQgbW92aWVzIGJ5IHllYXIgZGVzY2VuZGluZywgcnVudGltZSBhc2NlbmRpbmcsIGlkJywgKCkgPT4ge1xuICAgICAgdmFyIHRlc3RkYXRhID0gbWFrZU1vdmllcygpO1xuICAgICAgdmFyIG9yaWdpbmFsID0gXy5jbG9uZSh0ZXN0ZGF0YSk7XG5cbiAgICAgIHRlc3RkYXRhLnNvcnQoanNvbkNvbXBhcmUoW1xuICAgICAgICAnLXllYXInLFxuICAgICAgICAnK3J1bnRpbWUnLFxuICAgICAgICAnaWQnXG4gICAgICBdKSk7XG4gICAgICBvcmlnaW5hbC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSAoYi55ZWFyIHwgMCkgLSAoYS55ZWFyIHwgMCk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IDApIHtcbiAgICAgICAgICByZXN1bHQgPSAoYS5ydW50aW1lIHwgMCkgLSAoYi5ydW50aW1lIHwgMCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gYS5pZC5sb2NhbGVDb21wYXJlKGIuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGVzdGRhdGEubGVuZ3RoOyArK2opIHtcbiAgICAgICAgYXNzZXJ0LmVxdWFsKHRlc3RkYXRhW2pdLCBvcmlnaW5hbFtqXSwgJ29yZGVyIGF0ICMnICsgaik7XG4gICAgICB9XG4gICAgfSlcblxuICBdO1xufSk7XG4iXX0=