Skip to content

Commit

Permalink
Fixed tests
Browse files Browse the repository at this point in the history
  • Loading branch information
DubrovinPavel committed Jul 25, 2024
1 parent 72f623c commit 6436d8c
Show file tree
Hide file tree
Showing 52 changed files with 1,337 additions and 1,945 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:

strategy:
matrix:
node-version: [12.x]
node-version: [20.x]

steps:

Expand All @@ -26,7 +26,7 @@ jobs:
run: |
set -x
node -v
npm install -g ember-cli@3.1.4
npm install -g ember-cli@5.10.0
npm install
- name: StartUp docker services
Expand Down
23 changes: 14 additions & 9 deletions addon/adapters/odata.js
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,10 @@ export default DS.RESTAdapter.extend({
args = this._getODataArgs(arguments);
}

if (args.store && !args.modelName || !args.store && args.modelName) {
throw new Error(`store and modelName both should be undefined or have value`);
}

if (args.modelProjection && args.modelName && args.store) {
const builder = new Builder(args.store, args.modelName).selectByProjection(args.modelProjection);
args.queryParams = builder.build();
Expand Down Expand Up @@ -323,6 +327,10 @@ export default DS.RESTAdapter.extend({
args = this._getODataArgs(arguments, false, true);
}

if (args.store && !args.modelName || !args.store && args.modelName) {
throw new Error(`store and modelName both should be undefined or have value`);
}

const resultUrl = this.generateActionUrl(args.actionName, args.data, args.url);
const headers = $.extend({}, this.get('headers'));

Expand Down Expand Up @@ -418,18 +426,18 @@ export default DS.RESTAdapter.extend({
this.store = store;
}

const modelUrl = this._buildURL(snapshot.type.modelName, modelDirtyType === 'created' ? undefined : model.get('id'));
const modelUrl = this._buildURL(snapshot.modelName, modelDirtyType === 'created' ? undefined : model.get('id'));

requestBody += modelHttpMethod + ' ' + modelUrl + ' HTTP/1.1\r\n';
requestBody += 'Content-Type: application/json;type=entry\r\n';
requestBody += 'Prefer: return=representation\r\n\r\n';

// Don't need to send any data for deleting.
if (modelDirtyType !== 'deleted') {
const modelName = snapshot.type.modelName;
const modelName = snapshot.modelName;
const serializer = store.serializerFor(modelName);
const data = {};
serializer.serializeIntoHash(data, snapshot.type, snapshot);
serializer.serializeIntoHash(data, snapshot);
requestBody += JSON.stringify(data) + '\r\n';

// Add a GET request for created or updated models.
Expand Down Expand Up @@ -530,10 +538,6 @@ export default DS.RESTAdapter.extend({
const normalized = getResponses[id];
if (!isNone(normalized)) {
normalizedForPush.addObject(normalized);
const internalModel = model._internalModel;
internalModel.adapterWillCommit();
internalModel.flushChangedAttributes();
store.didSaveRecord(internalModel, normalized);
} else {
return reject(new Error(`Can't find model with id ${id} in batch response.`));
}
Expand Down Expand Up @@ -755,7 +759,8 @@ export default DS.RESTAdapter.extend({
normalizedRecords.included.addObjects(normalized.included);
}
});
run.join(() => { msg = store.push(normalizedRecords); });

msg = store.push(normalizedRecords);
}

if (!isNone(successCallback)) {
Expand Down Expand Up @@ -966,7 +971,7 @@ export default DS.RESTAdapter.extend({
if (requestType !== 'deleteRecord') {
let serializer = store.serializerFor(type.modelName);
data = {};
serializer.serializeIntoHash(data, type, snapshot);
serializer.serializeIntoHash(data, snapshot);
}

return this.ajax(url, httpMethod, { data: data }).then(function (response) {
Expand Down
21 changes: 7 additions & 14 deletions addon/models/model-without-validation.js
Original file line number Diff line number Diff line change
Expand Up @@ -191,11 +191,9 @@ let ModelWithoutValidation = DS.Model.extend(Evented, Copyable, {
let changedHasMany = {};
this.eachRelationship((key, { kind }) => {
if (kind === 'hasMany') {
if (this.get(key).filterBy('hasDirtyAttributes', true).length) {
changedHasMany[key] = [
this.get(`${key}.canonicalState`).map(internalModel => internalModel ? internalModel.getRecord() : undefined),
this.get(`${key}.currentState`).map(internalModel => internalModel ? internalModel.getRecord() : undefined),
];
const changedHasManyRecords = this[key].filterBy('hasDirtyAttributes', true);
if (changedHasManyRecords.length > 0) {
changedHasMany[key] = changedHasManyRecords;
}
}
});
Expand Down Expand Up @@ -223,15 +221,10 @@ let ModelWithoutValidation = DS.Model.extend(Evented, Copyable, {
rollbackHasMany(forOnlyKey) {
this.eachRelationship((key, { kind }) => {
if (kind === 'hasMany' && (!forOnlyKey || forOnlyKey === key)) {
if (this.get(key).filterBy('hasDirtyAttributes', true).length) {
[this.get(`${key}.canonicalState`), this.get(`${key}.currentState`)].forEach((state, i) => {
let records = state.map(internalModel => internalModel.getRecord());
records.forEach((record) => {
record.rollbackAll();
});
if (i === 0) {
this.set(key, records);
}
const changedHasManyRecords = this[key].filterBy('hasDirtyAttributes', true);
if (changedHasManyRecords.length > 0) {
changedHasManyRecords.forEach((record) => {
record.rollbackAll();
});
}
}
Expand Down
4 changes: 2 additions & 2 deletions addon/query/odata-adapter.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { warn } from '@ember/debug';
import { get } from '@ember/object';
import DS from 'ember-data';
import Store from '@ember-data/store';

import BaseAdapter from './base-adapter';
import {
Expand Down Expand Up @@ -43,7 +43,7 @@ export default class ODataAdapter extends BaseAdapter {
throw new Error('Base URL for OData feed is required');
}

if (!store || !(store instanceof DS.Store)) {
if (!store || !(store instanceof Store)) {
throw new Error('Store is required');
}

Expand Down
2 changes: 1 addition & 1 deletion addon/serializers/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ export default DS.RESTSerializer.extend({
* @param record Record itself.
* @param options Serialization options.
*/
serializeIntoHash(hash, type, record, options) {
serializeIntoHash(hash, record, options) {
// OData requires id in request body.
options = options || {};
options.includeId = true;
Expand Down
24 changes: 10 additions & 14 deletions addon/stores/base-store.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { inject as service } from '@ember/service';
import { isNone, isEmpty } from '@ember/utils';
import { computed } from '@ember/object';
import $ from 'jquery';
import { copy } from '@ember/object/internals';
import { getOwner } from '@ember/application';
import Store from '@ember-data/store';
import decorateAdapter from './base-store/decorate-adapter';
Expand All @@ -27,14 +26,11 @@ export default class extends Store {
@private
@default 'Schema of 1 version for internal models of addon'
*/
@computed()
get _offlineSchema() {
return {
'ember-flexberry-data': {
1: this.offlineGlobals.getOfflineSchema(),
}
};
}
_offlineSchema = {
'ember-flexberry-data': {
1: this.offlineGlobals.getOfflineSchema(),
}
};

@service offlineGlobals;

Expand Down Expand Up @@ -146,8 +142,6 @@ export default class extends Store {
let offlineStore = owner.lookup('store:local');
this.offlineStore = offlineStore;
this.offlineStore.offlineSchema = this.offlineSchema;

this._dbInit();
}

/**
Expand Down Expand Up @@ -207,7 +201,7 @@ export default class extends Store {
*/
query(modelName, query) {
// TODO: Method `copy` bewitch `QueryObject` into `Object`.
let _query = query instanceof QueryObject ? query : copy(query);
let _query = query instanceof QueryObject ? query : Object.assign({}, query);

if (this.offlineGlobals.isOfflineEnabled) {
let offlineStore = this.offlineStore;
Expand Down Expand Up @@ -236,7 +230,7 @@ export default class extends Store {
*/
queryRecord(modelName, query) {
// TODO: Method `copy` bewitch `QueryObject` into `Object`.
let _query = query instanceof QueryObject ? query : copy(query);
let _query = query instanceof QueryObject ? query : Object.assign({}, query);

if (this.offlineGlobals.isOfflineEnabled) {
let offlineStore = this.offlineStore;
Expand Down Expand Up @@ -387,7 +381,9 @@ export default class extends Store {
@param {Boolean} [useOnlineStore] Allow to explicitly specify online or offline store using independently of global online status
*/
unloadAll() {
return this._callSuperMethod('unloadAll', 1, arguments);
if (!this.isDestroying) {
return this._callSuperMethod('unloadAll', 1, arguments);
}
}

/**
Expand Down
59 changes: 59 additions & 0 deletions addon/stores/compatible-store.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/*import Store from '@ember-data/store';
import { CacheHandler } from '@ember-data/store';
import RequestManager from '@ember-data/request';
import Fetch from '@ember-data/request/fetch';
import {
adapterFor,
cleanup,
LegacyNetworkHandler,
normalize,
pushPayload,
serializeRecord,
serializerFor,
} from '@ember-data/legacy-compat';
import JSONAPICache from '@ember-data/json-api';
import { buildSchema, instantiateRecord, modelFor, teardownRecord } from '@ember-data/model/hooks';
export default class extends Store {
adapterFor = adapterFor;
serializerFor = serializerFor;
pushPayload = pushPayload;
normalize = normalize;
serializeRecord = serializeRecord;
constructor() {
super(...arguments);
if (!this.requestManager) {
this.requestManager = new RequestManager();
this.requestManager.use([LegacyNetworkHandler, Fetch]);
}
this.requestManager.useCache(CacheHandler);
}
createSchemaService() {
return buildSchema(this);
}
createCache(storeWrapper) {
return new JSONAPICache(storeWrapper);
}
instantiateRecord(identifier, createRecordArgs) {
return instantiateRecord.call(this, identifier, createRecordArgs);
}
teardownRecord(record) {
teardownRecord.call(this, record);
}
modelFor(type) {
return (modelFor.call(this, type)) || super.modelFor(type);
}
destroy() {
cleanup.call(this);
super.destroy();
}
}*/
8 changes: 7 additions & 1 deletion addon/stores/local-store.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import RSVP from 'rsvp';
import Store from '@ember-data/store';
import OfflineAdapter from '../adapters/offline';
import QueryBuilder from '../query/builder';
import { cleanup } from '../utils/store-functions';

/**
Store that used in offline mode by default.
Expand Down Expand Up @@ -175,7 +176,7 @@ export default class extends Store {
});
}

resolve(results);
resolve(results.toArray());
}, reject);
});
}
Expand Down Expand Up @@ -273,4 +274,9 @@ export default class extends Store {
}
});
}

destroy() {
cleanup.call(this);
super.destroy();
}
};
Loading

0 comments on commit 6436d8c

Please sign in to comment.