relution-sdk
Version:
Relution Software Development Kit for TypeScript and JavaScript
98 lines • 12.8 kB
JavaScript
/*
* @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
*/
/** */
;
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=