relution-sdk
Version:
Relution Software Development Kit for TypeScript and JavaScript
147 lines • 19 kB
JavaScript
/*
* @file livedata/Collection.spec.ts
* Relution SDK
*
* Created by Thomas Beckmann on 28.06.2016
* 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 livedata
*/
/** */
;
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var chai_1 = require('chai');
var Model_1 = require('./Model');
var Collection_1 = require('./Collection');
var Store_1 = require('./Store');
var TEST = {};
TEST.url = (global['serverUrl'] || '') + '/relution/livedata/developers';
TEST.data = [
{
sureName: 'Laubach',
firstName: 'Dominik',
age: 27
},
{
sureName: 'Hanowski',
firstName: 'Marco',
age: 27
},
{
sureName: 'Stierle',
firstName: 'Frank',
age: 43
},
{
sureName: 'Werler',
firstName: 'Sebastian',
age: 30
},
{
sureName: 'Buck',
firstName: 'Stefan',
age: 26
}
];
describe(module.filename || __filename, function () {
return [
it('isCollection', function () {
chai_1.assert.isFalse(Collection_1.isCollection(undefined));
chai_1.assert.isFalse(Collection_1.isCollection(null));
chai_1.assert.isFalse(Collection_1.isCollection(''));
chai_1.assert.isFalse(Collection_1.isCollection(0));
chai_1.assert.isFalse(Collection_1.isCollection(1));
chai_1.assert.isFalse(Collection_1.isCollection({}));
chai_1.assert.isFalse(Collection_1.isCollection([]));
chai_1.assert.isFalse(Collection_1.isCollection(Collection_1.Collection));
chai_1.assert.isFalse(Collection_1.isCollection(Model_1.Model));
chai_1.assert.isFalse(Collection_1.isCollection(Store_1.Store));
}),
it('basic', function () {
chai_1.assert.isDefined(Collection_1.Collection);
chai_1.assert.isFunction(Collection_1.Collection);
var instance = new Collection_1.Collection();
chai_1.assert.isDefined(instance);
chai_1.assert.isObject(instance);
chai_1.assert.isDefined(instance._type);
chai_1.assert.isString(instance._type);
chai_1.assert.equal(instance._type, 'Relution.livedata.Collection');
}),
it('creating collection', function () {
chai_1.assert.typeOf(Collection_1.Collection, 'function', 'Collection is defined');
var Developer = (function (_super) {
__extends(Developer, _super);
function Developer() {
_super.apply(this, arguments);
}
return Developer;
}(Model_1.Model.defaults({
idAttribute: '_id',
entity: 'Developer'
})));
TEST.Developer = Developer;
chai_1.assert.ok(typeof TEST.Developer === 'function', 'Developer model successfully extended.');
var DeveloperCollection = (function (_super) {
__extends(DeveloperCollection, _super);
function DeveloperCollection() {
_super.apply(this, arguments);
}
return DeveloperCollection;
}(Collection_1.Collection.defaults({
url: TEST.url,
model: TEST.Developer
})));
;
TEST.DeveloperCollection = DeveloperCollection;
chai_1.assert.ok(typeof TEST.DeveloperCollection === 'function', 'Developer collection successfully extended.');
TEST.Developers = new TEST.DeveloperCollection();
chai_1.assert.ok(typeof TEST.Developers === 'object', 'Developer collection successfully created.');
}),
it('adding data', function () {
TEST.Developers.add(TEST.data);
chai_1.assert.equal(TEST.Developers.length, 5, 'All records were added.');
chai_1.assert.equal(TEST.Developers.at(2).get('sureName'), TEST.data[2].sureName, 'sureName of 3. model has correct value');
chai_1.assert.equal(TEST.Developers.at(3).get('firstName'), TEST.data[3].firstName, 'firstName of 4. model has correct value');
chai_1.assert.equal(TEST.Developers.at(4).get('age'), TEST.data[4].age, 'age of 5. model has correct value');
chai_1.assert.ok(TEST.Developer.prototype.isPrototypeOf(TEST.Developers.at(0)), 'Records successfully converted to model records.');
}),
it('sorting data', function () {
TEST.Developers.comparator = function (m1, m2) {
return m2.get('age') - m1.get('age');
};
TEST.Developers.sort();
var p2 = TEST.Developers.at(0);
chai_1.assert.ok(p2.get('sureName') === 'Stierle', 'Records correctly sorted by passed in sort function');
}),
it('filtering data', function () {
// filter all devs older or equal to 26
var a1 = TEST.Developers.filter(function (rec) {
return rec.get('age') >= 26;
});
chai_1.assert.ok(a1.length === 5, 'Records successfully filtered. Everyone is 26 or older.');
// filter all devs older than 26
var a2 = TEST.Developers.filter(function (rec) {
return rec.get('age') > 26;
});
chai_1.assert.ok(a2.length === 4, 'Records successfully filtered. One dev is younger than 27.');
})
];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbi5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpdmVkYXRhL0NvbGxlY3Rpb24uc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0g7O0dBRUc7QUFDSCxNQUFNOzs7Ozs7O0FBRU4scUJBQXFCLE1BQU0sQ0FBQyxDQUFBO0FBRTVCLHNCQUFvQixTQUFTLENBQUMsQ0FBQTtBQUM5QiwyQkFBdUMsY0FBYyxDQUFDLENBQUE7QUFDdEQsc0JBQW9CLFNBQVMsQ0FBQyxDQUFBO0FBRTlCLElBQUksSUFBSSxHQUFRLEVBQUUsQ0FBQztBQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLCtCQUErQixDQUFDO0FBQ3pFLElBQUksQ0FBQyxJQUFJLEdBQUc7SUFDVjtRQUNFLFFBQVEsRUFBRSxTQUFTO1FBQ25CLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLEdBQUcsRUFBRSxFQUFFO0tBQ1I7SUFDRDtRQUNFLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLEdBQUcsRUFBRSxFQUFFO0tBQ1I7SUFDRDtRQUNFLFFBQVEsRUFBRSxTQUFTO1FBQ25CLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLEdBQUcsRUFBRSxFQUFFO0tBQ1I7SUFDRDtRQUNFLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLEdBQUcsRUFBRSxFQUFFO0tBQ1I7SUFDRDtRQUNFLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLFNBQVMsRUFBRSxRQUFRO1FBQ25CLEdBQUcsRUFBRSxFQUFFO0tBQ1I7Q0FDRixDQUFDO0FBRUYsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksVUFBVSxFQUFFO0lBQ3RDLE1BQU0sQ0FBQztRQUVMLEVBQUUsQ0FBQyxjQUFjLEVBQUU7WUFDakIs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cGVjLnRzXHJcbiAqIFJlbHV0aW9uIFNES1xyXG4gKlxyXG4gKiBDcmVhdGVkIGJ5IFRob21hcyBCZWNrbWFubiBvbiAyOC4wNi4yMDE2XHJcbiAqIENvcHlyaWdodCAyMDE2IE0tV2F5IFNvbHV0aW9ucyBHbWJIXHJcbiAqXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XHJcbiAqXHJcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKlxyXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXHJcbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiAqL1xyXG4vKipcclxuICogQG1vZHVsZSBsaXZlZGF0YVxyXG4gKi9cclxuLyoqICovXHJcblxyXG5pbXBvcnQge2Fzc2VydH0gZnJvbSAnY2hhaSc7XHJcblxyXG5pbXBvcnQge01vZGVsfSBmcm9tICcuL01vZGVsJztcclxuaW1wb3J0IHtDb2xsZWN0aW9uLCBpc0NvbGxlY3Rpb259IGZyb20gJy4vQ29sbGVjdGlvbic7XHJcbmltcG9ydCB7U3RvcmV9IGZyb20gJy4vU3RvcmUnO1xyXG5cclxudmFyIFRFU1Q6IGFueSA9IHt9O1xyXG5URVNULnVybCA9IChnbG9iYWxbJ3NlcnZlclVybCddIHx8ICcnKSArICcvcmVsdXRpb24vbGl2ZWRhdGEvZGV2ZWxvcGVycyc7XHJcblRFU1QuZGF0YSA9IFtcclxuICB7XHJcbiAgICBzdXJlTmFtZTogJ0xhdWJhY2gnLFxyXG4gICAgZmlyc3ROYW1lOiAnRG9taW5paycsXHJcbiAgICBhZ2U6IDI3XHJcbiAgfSxcclxuICB7XHJcbiAgICBzdXJlTmFtZTogJ0hhbm93c2tpJyxcclxuICAgIGZpcnN0TmFtZTogJ01hcmNvJyxcclxuICAgIGFnZTogMjdcclxuICB9LFxyXG4gIHtcclxuICAgIHN1cmVOYW1lOiAnU3RpZXJsZScsXHJcbiAgICBmaXJzdE5hbWU6ICdGcmFuaycsXHJcbiAgICBhZ2U6IDQzXHJcbiAgfSxcclxuICB7XHJcbiAgICBzdXJlTmFtZTogJ1dlcmxlcicsXHJcbiAgICBmaXJzdE5hbWU6ICdTZWJhc3RpYW4nLFxyXG4gICAgYWdlOiAzMFxyXG4gIH0sXHJcbiAge1xyXG4gICAgc3VyZU5hbWU6ICdCdWNrJyxcclxuICAgIGZpcnN0TmFtZTogJ1N0ZWZhbicsXHJcbiAgICBhZ2U6IDI2XHJcbiAgfVxyXG5dO1xyXG5cclxuZGVzY3JpYmUobW9kdWxlLmZpbGVuYW1lIHx8IF9fZmlsZW5hbWUsIGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiBbXHJcblxyXG4gICAgaXQoJ2lzQ29sbGVjdGlvbicsICgpID0+IHtcclxuICAgICAgYXNzZXJ0LmlzRmFsc2UoaXNDb2xsZWN0aW9uKHVuZGVmaW5lZCkpO1xyXG4gICAgICBhc3NlcnQuaXNGYWxzZShpc0NvbGxlY3Rpb24obnVsbCkpO1xyXG4gICAgICBhc3NlcnQuaXNGYWxzZShpc0NvbGxlY3Rpb24oJycpKTtcclxuICAgICAgYXNzZXJ0LmlzRmFsc2UoaXNDb2xsZWN0aW9uKDApKTtcclxuICAgICAgYXNzZXJ0LmlzRmFsc2UoaXNDb2xsZWN0aW9uKDEpKTtcclxuICAgICAgYXNzZXJ0LmlzRmFsc2UoaXNDb2xsZWN0aW9uKHt9KSk7XHJcbiAgICAgIGFzc2VydC5pc0ZhbHNlKGlzQ29sbGVjdGlvbihbXSkpO1xyXG4gICAgICBhc3NlcnQuaXNGYWxzZShpc0NvbGxlY3Rpb24oQ29sbGVjdGlvbikpO1xyXG4gICAgICBhc3NlcnQuaXNGYWxzZShpc0NvbGxlY3Rpb24oTW9kZWwpKTtcclxuICAgICAgYXNzZXJ0LmlzRmFsc2UoaXNDb2xsZWN0aW9uKFN0b3JlKSk7XHJcbiAgICB9KSxcclxuXHJcbiAgICBpdCgnYmFzaWMnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGFzc2VydC5pc0RlZmluZWQoQ29sbGVjdGlvbik7XHJcbiAgICAgIGFzc2VydC5pc0Z1bmN0aW9uKENvbGxlY3Rpb24pO1xyXG5cclxuICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbGxlY3Rpb24oKTtcclxuICAgICAgYXNzZXJ0LmlzRGVmaW5lZChpbnN0YW5jZSk7XHJcbiAgICAgIGFzc2VydC5pc09iamVjdChpbnN0YW5jZSk7XHJcbiAgICAgIGFzc2VydC5pc0RlZmluZWQoaW5zdGFuY2UuX3R5cGUpO1xyXG4gICAgICBhc3NlcnQuaXNTdHJpbmcoaW5zdGFuY2UuX3R5cGUpO1xyXG4gICAgICBhc3NlcnQuZXF1YWwoaW5zdGFuY2UuX3R5cGUsICdSZWx1dGlvbi5saXZlZGF0YS5Db2xsZWN0aW9uJyk7XHJcbiAgICB9KSxcclxuXHJcbiAgICBpdCgnY3JlYXRpbmcgY29sbGVjdGlvbicsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgYXNzZXJ0LnR5cGVPZihDb2xsZWN0aW9uLCAnZnVuY3Rpb24nLCAnQ29sbGVjdGlvbiBpcyBkZWZpbmVkJyk7XHJcblxyXG4gICAgICBjbGFzcyBEZXZlbG9wZXIgZXh0ZW5kcyBNb2RlbC5kZWZhdWx0cyh7XHJcbiAgICAgICAgaWRBdHRyaWJ1dGU6ICdfaWQnLFxyXG4gICAgICAgIGVudGl0eTogJ0RldmVsb3BlcidcclxuICAgICAgfSkge31cclxuICAgICAgVEVTVC5EZXZlbG9wZXIgPSBEZXZlbG9wZXI7XHJcblxyXG4gICAgICBhc3NlcnQub2sodHlwZW9mIFRFU1QuRGV2ZWxvcGVyID09PSAnZnVuY3Rpb24nLCAnRGV2ZWxvcGVyIG1vZGVsIHN1Y2Nlc3NmdWxseSBleHRlbmRlZC4nKTtcclxuXHJcbiAgICAgIGNsYXNzIERldmVsb3BlckNvbGxlY3Rpb24gZXh0ZW5kcyBDb2xsZWN0aW9uLmRlZmF1bHRzKHtcclxuICAgICAgICB1cmw6IFRFU1QudXJsLFxyXG4gICAgICAgIG1vZGVsOiBURVNULkRldmVsb3BlclxyXG4gICAgICB9KSB7fTtcclxuICAgICAgVEVTVC5EZXZlbG9wZXJDb2xsZWN0aW9uID0gRGV2ZWxvcGVyQ29sbGVjdGlvbjtcclxuXHJcbiAgICAgIGFzc2VydC5vayh0eXBlb2YgVEVTVC5EZXZlbG9wZXJDb2xsZWN0aW9uID09PSAnZnVuY3Rpb24nLCAnRGV2ZWxvcGVyIGNvbGxlY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4dGVuZGVkLicpO1xyXG5cclxuICAgICAgVEVTVC5EZXZlbG9wZXJzID0gbmV3IFRFU1QuRGV2ZWxvcGVyQ29sbGVjdGlvbigpO1xyXG5cclxuICAgICAgYXNzZXJ0Lm9rKHR5cGVvZiBURVNULkRldmVsb3BlcnMgPT09ICdvYmplY3QnLCAnRGV2ZWxvcGVyIGNvbGxlY3Rpb24gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuJyk7XHJcbiAgICB9KSxcclxuXHJcbiAgICBpdCgnYWRkaW5nIGRhdGEnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIFRFU1QuRGV2ZWxvcGVycy5hZGQoVEVTVC5kYXRhKTtcclxuXHJcbiAgICAgIGFzc2VydC5lcXVhbChURVNULkRldmVsb3BlcnMubGVuZ3RoLCA1LCAnQWxsIHJlY29yZHMgd2VyZSBhZGRlZC4nKTtcclxuXHJcbiAgICAgIGFzc2VydC5lcXVhbChURVNULkRldmVsb3BlcnMuYXQoMikuZ2V0KCdzdXJlTmFtZScpLCBURVNULmRhdGFbMl0uc3VyZU5hbWUsICdzdXJlTmFtZSBvZiAzLiBtb2RlbCBoYXMgY29ycmVjdCB2YWx1ZScpO1xyXG4gICAgICBhc3NlcnQuZXF1YWwoVEVTVC5EZXZlbG9wZXJzLmF0KDMpLmdldCgnZmlyc3ROYW1lJyksIFRFU1QuZGF0YVszXS5maXJzdE5hbWUsICdmaXJzdE5hbWUgb2YgNC4gbW9kZWwgaGFzIGNvcnJlY3QgdmFsdWUnKTtcclxuICAgICAgYXNzZXJ0LmVxdWFsKFRFU1QuRGV2ZWxvcGVycy5hdCg0KS5nZXQoJ2FnZScpLCBURVNULmRhdGFbNF0uYWdlLCAnYWdlIG9mIDUuIG1vZGVsIGhhcyBjb3JyZWN0IHZhbHVlJyk7XHJcblxyXG4gICAgICBhc3NlcnQub2soVEVTVC5EZXZlbG9wZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoVEVTVC5EZXZlbG9wZXJzLmF0KDApKSwgJ1JlY29yZHMgc3VjY2Vzc2Z1bGx5IGNvbnZlcnRlZCB0byBtb2RlbCByZWNvcmRzLicpO1xyXG5cclxuICAgIH0pLFxyXG5cclxuICAgIGl0KCdzb3J0aW5nIGRhdGEnLCBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICBURVNULkRldmVsb3BlcnMuY29tcGFyYXRvciA9IGZ1bmN0aW9uIChtMTogTW9kZWwsIG0yOiBNb2RlbCkge1xyXG4gICAgICAgIHJldHVybiBtMi5nZXQoJ2FnZScpIC0gbTEuZ2V0KCdhZ2UnKTtcclxuICAgICAgfTtcclxuICAgICAgVEVTVC5EZXZlbG9wZXJzLnNvcnQoKTtcclxuXHJcbiAgICAgIHZhciBwMiA9IFRFU1QuRGV2ZWxvcGVycy5hdCgwKTtcclxuICAgICAgYXNzZXJ0Lm9rKHAyLmdldCgnc3VyZU5hbWUnKSA9PT0gJ1N0aWVybGUnLCAnUmVjb3JkcyBjb3JyZWN0bHkgc29ydGVkIGJ5IHBhc3NlZCBpbiBzb3J0IGZ1bmN0aW9uJyk7XHJcblxyXG4gICAgfSksXHJcblxyXG4gICAgaXQoJ2ZpbHRlcmluZyBkYXRhJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyBmaWx0ZXIgYWxsIGRldnMgb2xkZXIgb3IgZXF1YWwgdG8gMjZcclxuICAgICAgdmFyIGExID0gVEVTVC5EZXZlbG9wZXJzLmZpbHRlcihmdW5jdGlvbiAocmVjOiBNb2RlbCkge1xyXG4gICAgICAgIHJldHVybiByZWMuZ2V0KCdhZ2UnKSA+PSAyNjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBhc3NlcnQub2soYTEubGVuZ3RoID09PSA1LCAnUmVjb3JkcyBzdWNjZXNzZnVsbHkgZmlsdGVyZWQuIEV2ZXJ5b25lIGlzIDI2IG9yIG9sZGVyLicpO1xyXG5cclxuICAgICAgLy8gZmlsdGVyIGFsbCBkZXZzIG9sZGVyIHRoYW4gMjZcclxuICAgICAgdmFyIGEyID0gVEVTVC5EZXZlbG9wZXJzLmZpbHRlcihmdW5jdGlvbiAocmVjOiBNb2RlbCkge1xyXG4gICAgICAgIHJldHVybiByZWMuZ2V0KCdhZ2UnKSA+IDI2O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGFzc2VydC5vayhhMi5sZW5ndGggPT09IDQsICdSZWNvcmRzIHN1Y2Nlc3NmdWxseSBmaWx0ZXJlZC4gT25lIGRldiBpcyB5b3VuZ2VyIHRoYW4gMjcuJyk7XHJcblxyXG4gICAgfSlcclxuXHJcbiAgXTtcclxufSk7XHJcbiJdfQ==