From 2d1c8965e781b7c963a0287cf288ff93f5ab183e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=81=D0=B0=D0=BB=D0=BA=D0=B8=D0=BD=20=D0=9F?= =?UTF-8?q?=D0=B0=D0=B2=D0=B5=D0=BB?= Date: Wed, 23 Oct 2019 11:24:29 +0500 Subject: [PATCH 1/3] Add test --- ...exberry-dummy-localized-suggestion-type.js | 45 ++++++++++++ ...g-with-computed-detail-with-master-test.js | 48 +++++++++++++ ...g-with-computed-detail-with-master-test.js | 6 ++ ...berry-dummy-localized-suggestion-type.json | 69 +++++++++++++++++++ 4 files changed, 168 insertions(+) create mode 100644 tests/unit/CRUD/base/base-batch-updating-with-computed-detail-with-master-test.js create mode 100644 tests/unit/CRUD/odata/odata-batch-updating-with-computed-detail-with-master-test.js diff --git a/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js b/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js index acbb9430..7b17fc20 100644 --- a/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js +++ b/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js @@ -10,6 +10,40 @@ var Model = Projection.Model.extend({ }), name: DS.attr('string'), + /** + Non-stored property. + + @property detailComputedField + */ + detailComputedField: DS.attr('string'), + + /** + Method to set non-stored property. + Please, use code below in model class (outside of this mixin) otherwise it will be replaced during regeneration of models. + Please, implement 'detailComputedFieldCompute' method in model class (outside of this mixin) if you want to compute value of 'detailComputedField' property. + + @method _detailComputedFieldCompute + @private + @example + ```javascript + _detailComputedFieldChanged: on('init', observer('detailComputedField', function() { + once(this, '_detailComputedFieldCompute'); + })) + ``` + */ + + _detailComputedFieldCompute: function() { + let name = this.get('name'); + let localizationName = this.get('localization.name'); + let result = (localizationName) ? name + ':' + localizationName : name; + this.set('detailComputedField', result); + }, + + detailComputedFieldChanged: Ember.on('init', Ember.observer('name', function() { + Ember.run.once(this, '_detailComputedFieldCompute'); + })), + + // This property is for flexberry-lookup component. No inverse relationship here. localization: DS.belongsTo('ember-flexberry-dummy-localization', { inverse: null, @@ -38,4 +72,15 @@ Model.defineProjection('LocalizedSuggestionTypeE', 'ember-flexberry-dummy-locali }) }); + +Model.defineProjection('LocalizedSuggestionTypeEWithComputedField', 'ember-flexberry-dummy-localized-suggestion-type', { + name: Projection.attr('Name'), + detailComputedField: Projection.attr(''), + localization: Projection.belongsTo('ember-flexberry-dummy-localization', '', { + name: Projection.attr('Name') + }), + suggestionType: Projection.belongsTo('ember-flexberry-dummy-suggestion-type', '', { + }) +}); + export default Model; diff --git a/tests/unit/CRUD/base/base-batch-updating-with-computed-detail-with-master-test.js b/tests/unit/CRUD/base/base-batch-updating-with-computed-detail-with-master-test.js new file mode 100644 index 00000000..5d93d392 --- /dev/null +++ b/tests/unit/CRUD/base/base-batch-updating-with-computed-detail-with-master-test.js @@ -0,0 +1,48 @@ +import Ember from 'ember'; +import generateUniqueId from 'ember-flexberry-data/utils/generate-unique-id'; + +export default function batchUpdatingWithCompDetailMasterTest(store, assert) { + assert.expect(4); + let done = assert.async(); + + Ember.run(() => { + let records = initTestData(store) + store.adapterFor('application').batchUpdate(store, Ember.A(records)).then((result) => { + assert.equal(result.length, 3); + assert.ok(result[0] === records[0]); + assert.ok(result[1] === records[1]); + assert.ok(result[2] === records[2]); + }) + .catch((e) => { + console.log(e, e.message); + throw e; + }) + .finally(done); + }); +} + +function initTestData(store) { + // Parent type + let result = []; + + createdSuggestionType = store.createRecord('ember-flexberry-dummy-suggestion-type', { + id: generateUniqueId(), + name: 'Parent type', + }); + + createdLocalization = store.createRecord('ember-flexberry-dummy-localization', { + id: generateUniqueId(), + name: 'en', + }); + + createdLocalizationSuggestionType = store.createRecord('ember-flexberry-dummy-localized-suggestion-type', { + id: generateUniqueId(), + name: 'LocName', + localization: createdLocalization, + suggestionType: createdSuggestionType, + }); + + result.push(createdSuggestionType, createdLocalization, createdLocalizationSuggestionType); + + return result; +} diff --git a/tests/unit/CRUD/odata/odata-batch-updating-with-computed-detail-with-master-test.js b/tests/unit/CRUD/odata/odata-batch-updating-with-computed-detail-with-master-test.js new file mode 100644 index 00000000..6721eb0d --- /dev/null +++ b/tests/unit/CRUD/odata/odata-batch-updating-with-computed-detail-with-master-test.js @@ -0,0 +1,6 @@ +import executeTest from './execute-odata-test'; +import batchUpdating from '../base/base-batch-updating-with-computed-detail-with-master-test'; + +executeTest('batchUpdatingWhithComputedDetailWithMasterTest', (store, assert) => { + batchUpdating(store, assert); +}); diff --git a/vendor/flexberry/dummy-metadata/models/ember-flexberry-dummy-localized-suggestion-type.json b/vendor/flexberry/dummy-metadata/models/ember-flexberry-dummy-localized-suggestion-type.json index d63f79ef..1a20394d 100644 --- a/vendor/flexberry/dummy-metadata/models/ember-flexberry-dummy-localized-suggestion-type.json +++ b/vendor/flexberry/dummy-metadata/models/ember-flexberry-dummy-localized-suggestion-type.json @@ -39,6 +39,13 @@ "flexberryType": "string", "notNull": false, "defaultValue": "" + }, + { + "name": "detailComputedField", + "type": "string", + "flexberryType": "string", + "notNull": false, + "defaultValue": "" } ], "belongsTo": [ @@ -103,6 +110,12 @@ "caption": "Name", "hidden": false, "index": 0 + }, + { + "name": "detailComputedField", + "caption": "", + "hidden": false, + "index": 1 } ], "belongsTo": [ @@ -141,6 +154,62 @@ } ], "hasMany": [] + }, + { + "name": "LocalizedSuggestionTypeEWithComputedField", + "modelName": "ember-flexberry-dummy-localized-suggestion-type", + "attrs": [ + { + "name": "name", + "caption": "", + "hidden": false, + "index": 0 + }, + { + "name": "detailComputedField", + "caption": "", + "hidden": false, + "index": 1 + } + ], + "belongsTo": [ + { + "lookupValue": null, + "lookupValueField": null, + "relationName": "Localization", + "belongsTo": [], + "hidden": false, + "attrs": [ + { + "name": "name", + "caption": "", + "hidden": false, + "index": 3 + } + ], + "index": 2, + "type": "default", + "caption": "", + "name": "localization", + "relatedTo": "ember-flexberry-dummy-localization", + "inverse": null + }, + { + "lookupValue": null, + "lookupValueField": null, + "relationName": "SuggestionType", + "belongsTo": [], + "hidden": false, + "attrs": [], + "index": 4, + "type": "default", + "caption": "", + "name": "suggestionType", + "relatedTo": "ember-flexberry-dummy-suggestion-type", + "inverse": null + } + ], + "hasMany": [] } ] } \ No newline at end of file From 5b1145476d21e05bd6e3c3490f9b5045812f9874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=81=D0=B0=D0=BB=D0=BA=D0=B8=D0=BD=20=D0=9F?= =?UTF-8?q?=D0=B0=D0=B2=D0=B5=D0=BB?= Date: Wed, 23 Oct 2019 11:29:47 +0500 Subject: [PATCH 2/3] Correct syntax mistake --- .../ember-flexberry-dummy-localized-suggestion-type.js | 2 +- ...atch-updating-with-computed-detail-with-master-test.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js b/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js index 7b17fc20..3a4e4afe 100644 --- a/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js +++ b/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js @@ -1,5 +1,6 @@ import DS from 'ember-data'; import { Projection } from 'ember-flexberry-data'; +import Ember from 'ember'; var Model = Projection.Model.extend({ // Inversed relationship for ember-flexberry-dummy-suggestion-type.localizedTypes. @@ -43,7 +44,6 @@ var Model = Projection.Model.extend({ Ember.run.once(this, '_detailComputedFieldCompute'); })), - // This property is for flexberry-lookup component. No inverse relationship here. localization: DS.belongsTo('ember-flexberry-dummy-localization', { inverse: null, diff --git a/tests/unit/CRUD/base/base-batch-updating-with-computed-detail-with-master-test.js b/tests/unit/CRUD/base/base-batch-updating-with-computed-detail-with-master-test.js index 5d93d392..2c1b3a9b 100644 --- a/tests/unit/CRUD/base/base-batch-updating-with-computed-detail-with-master-test.js +++ b/tests/unit/CRUD/base/base-batch-updating-with-computed-detail-with-master-test.js @@ -6,7 +6,7 @@ export default function batchUpdatingWithCompDetailMasterTest(store, assert) { let done = assert.async(); Ember.run(() => { - let records = initTestData(store) + let records = initTestData(store); store.adapterFor('application').batchUpdate(store, Ember.A(records)).then((result) => { assert.equal(result.length, 3); assert.ok(result[0] === records[0]); @@ -25,17 +25,17 @@ function initTestData(store) { // Parent type let result = []; - createdSuggestionType = store.createRecord('ember-flexberry-dummy-suggestion-type', { + let createdSuggestionType = store.createRecord('ember-flexberry-dummy-suggestion-type', { id: generateUniqueId(), name: 'Parent type', }); - createdLocalization = store.createRecord('ember-flexberry-dummy-localization', { + let createdLocalization = store.createRecord('ember-flexberry-dummy-localization', { id: generateUniqueId(), name: 'en', }); - createdLocalizationSuggestionType = store.createRecord('ember-flexberry-dummy-localized-suggestion-type', { + let createdLocalizationSuggestionType = store.createRecord('ember-flexberry-dummy-localized-suggestion-type', { id: generateUniqueId(), name: 'LocName', localization: createdLocalization, From 6f8a697aeb8037bc5734c6fb8f8a5200a7d79349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=81=D0=B0=D0=BB=D0=BA=D0=B8=D0=BD=20=D0=9F?= =?UTF-8?q?=D0=B0=D0=B2=D0=B5=D0=BB?= Date: Wed, 23 Oct 2019 13:17:38 +0500 Subject: [PATCH 3/3] Update ember-flexberry-dummy-localized-suggestion-type.js --- .../ember-flexberry-dummy-localized-suggestion-type.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js b/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js index 3a4e4afe..0b6f211d 100644 --- a/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js +++ b/tests/dummy/app/models/ember-flexberry-dummy-localized-suggestion-type.js @@ -19,7 +19,7 @@ var Model = Projection.Model.extend({ detailComputedField: DS.attr('string'), /** - Method to set non-stored property. + Method to set non-stored property. Please, use code below in model class (outside of this mixin) otherwise it will be replaced during regeneration of models. Please, implement 'detailComputedFieldCompute' method in model class (outside of this mixin) if you want to compute value of 'detailComputedField' property. @@ -41,7 +41,7 @@ var Model = Projection.Model.extend({ }, detailComputedFieldChanged: Ember.on('init', Ember.observer('name', function() { - Ember.run.once(this, '_detailComputedFieldCompute'); + Ember.run.once(this, '_detailComputedFieldCompute'); })), // This property is for flexberry-lookup component. No inverse relationship here. @@ -72,7 +72,6 @@ Model.defineProjection('LocalizedSuggestionTypeE', 'ember-flexberry-dummy-locali }) }); - Model.defineProjection('LocalizedSuggestionTypeEWithComputedField', 'ember-flexberry-dummy-localized-suggestion-type', { name: Projection.attr('Name'), detailComputedField: Projection.attr(''),