Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CHORE] Refactor away from createStore test helper #6347

Merged
merged 1 commit into from
Aug 22, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions packages/-ember-data/tests/helpers/store.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,3 @@ export default function setupStore(options) {
}

export { setupStore };

export function createStore(options) {
return setupStore(options).store;
}
Original file line number Diff line number Diff line change
@@ -1,36 +1,36 @@
import { run } from '@ember/runloop';
import { Promise } from 'rsvp';
import { setupStore, createStore } from 'dummy/tests/helpers/store';
import { setupTest } from 'ember-qunit';
import { settled } from '@ember/test-helpers';

import { module, test } from 'qunit';

import DS from 'ember-data';

let store;
import Adapter from '@ember-data/adapter';
import Model, { attr } from '@ember-data/model';

const Person = DS.Model.extend({
name: DS.attr('string'),
const Person = Model.extend({
name: attr('string'),
toString() {
return `<Person#${this.get('id')}>`;
},
});

const adapter = DS.Adapter.extend({
deleteRecord() {
return Promise.resolve();
},
});
module('integration/record-arrays/adapter_populated_record_array - AdapterPopulatedRecordArray', function(hooks) {
setupTest(hooks);

module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPopulatedRecordArray', function(hooks) {
hooks.beforeEach(function() {
store = createStore({
adapter: adapter,
person: Person,
});
this.owner.register('model:person', Person);
});

test('when a record is deleted in an adapter populated record array, it should be removed', function(assert) {
const ApplicationAdapter = Adapter.extend({
deleteRecord() {
return Promise.resolve();
},
});

this.owner.register('adapter:application', ApplicationAdapter);

let store = this.owner.lookup('service:store');
let recordArray = store.recordArrayManager.createAdapterPopulatedRecordArray('person', null);

let payload = {
Expand Down Expand Up @@ -71,6 +71,7 @@ module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPop
});

test('stores the metadata off the payload', function(assert) {
let store = this.owner.lookup('service:store');
let recordArray = store.recordArrayManager.createAdapterPopulatedRecordArray('person', null);

let payload = {
Expand Down Expand Up @@ -110,6 +111,7 @@ module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPop
});

test('stores the links off the payload', function(assert) {
let store = this.owner.lookup('service:store');
let recordArray = store.recordArrayManager.createAdapterPopulatedRecordArray('person', null);

let payload = {
Expand Down Expand Up @@ -153,7 +155,9 @@ module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPop
});

test('recordArray.replace() throws error', async function(assert) {
let store = this.owner.lookup('service:store');
let recordArray = store.recordArrayManager.createAdapterPopulatedRecordArray('person', null);

await settled();

assert.throws(
Expand All @@ -166,8 +170,8 @@ module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPop
});

test('pass record array to adapter.query regardless of arity', function(assert) {
let env = setupStore({ person: Person });
let store = env.store;
let store = this.owner.lookup('service:store');
let adapter = store.adapterFor('application');

let payload = {
data: [
Expand All @@ -176,14 +180,14 @@ module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPop
],
};

env.adapter.query = function(store, type, query) {
adapter.query = function(store, type, query) {
// Due to #6232, we now expect 5 arguments regardless of arity
assert.equal(arguments.length, 5);
return payload;
};

return store.query('person', {}).then(recordArray => {
env.adapter.query = function(store, type, query, _recordArray) {
adapter.query = function(store, type, query, _recordArray) {
assert.equal(arguments.length, 5);
return payload;
};
Expand All @@ -192,8 +196,8 @@ module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPop
});

test('pass record array to adapter.query regardless of arity', function(assert) {
let env = setupStore({ person: Person });
let store = env.store;
let store = this.owner.lookup('service:store');
let adapter = store.adapterFor('application');

let payload = {
data: [
Expand All @@ -216,14 +220,14 @@ module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPop
return superCreateAdapterPopulatedRecordArray.apply(this, arguments);
};

env.adapter.query = function(store, type, query) {
adapter.query = function(store, type, query) {
// Due to #6232, we now expect 5 arguments regardless of arity
assert.equal(arguments.length, 5);
return payload;
};

return store.query('person', actualQuery).then(recordArray => {
env.adapter.query = function(store, type, query, _recordArray) {
adapter.query = function(store, type, query, _recordArray) {
assert.equal(arguments.length, 5);
return payload;
};
Expand All @@ -241,8 +245,8 @@ module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPop
});

test('loadRecord re-syncs internalModels recordArrays', function(assert) {
let env = setupStore({ person: Person });
let store = env.store;
let store = this.owner.lookup('service:store');
let adapter = store.adapterFor('application');

let payload = {
data: [
Expand All @@ -251,7 +255,7 @@ module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPop
],
};

env.adapter.query = function(store, type, query, recordArray) {
adapter.query = function(store, type, query, recordArray) {
return payload;
};

Expand Down Expand Up @@ -284,18 +288,18 @@ module('integration/record-arrays/adapter_populated_record_array - DS.AdapterPop
assert.expect(8);

let queryPromise, queryArr, findPromise, findArray;
let env = setupStore({ person: Person });
let store = env.store;
let store = this.owner.lookup('service:store');
let adapter = store.adapterFor('application');
let array = [{ id: '1', type: 'person', attributes: { name: 'Scumbag Dale' } }];

// resemble server side filtering
env.adapter.query = function(store, type, query, recordArray) {
adapter.query = function(store, type, query, recordArray) {
return { data: array.slice(query.slice) };
};

// implement findAll to further test that query updates won't muddle
// with the non-query record arrays
env.adapter.findAll = function(store, type, sinceToken) {
adapter.findAll = function(store, type, sinceToken) {
return { data: array.slice(0) };
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
import Model, { attr } from '@ember-data/model';
import { run } from '@ember/runloop';
import { createStore } from 'dummy/tests/helpers/store';
import { setupTest } from 'ember-qunit';
import { module, test } from 'qunit';
import DS from 'ember-data';
import { get } from '@ember/object';
import { watchProperties } from '../../helpers/watch-property';

let store;

const Person = DS.Model.extend({
name: DS.attr('string'),
const Person = Model.extend({
name: attr('string'),
toString() {
return `<Person#${this.get('id')}>`;
},
});

module('integration/peeked-records', function(hooks) {
setupTest(hooks);

hooks.beforeEach(function() {
store = createStore({
person: Person,
});
this.owner.register('model:person', Person);
store = this.owner.lookup('service:store');
});

test('repeated calls to peekAll in separate run-loops works as expected', function(assert) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,33 @@
import { run } from '@ember/runloop';
import { Promise as EmberPromise } from 'rsvp';
import { createStore } from 'dummy/tests/helpers/store';
import { setupTest } from 'ember-qunit';

import { module, test } from 'qunit';

import DS from 'ember-data';
import Model from '@ember-data/model';
import RESTAdapter from '@ember-data/adapter/rest';

let GroupsAdapter, store, requests;
let store, requests;
let maxLength;
let lengths;

module('unit/adapters/rest_adapter/group_records_for_find_many_test - DS.RESTAdapter#groupRecordsForFindMany', function(
hooks
) {
setupTest(hooks);

hooks.beforeEach(function() {
maxLength = -1;
requests = [];
lengths = [];

GroupsAdapter = DS.RESTAdapter.extend({
const ApplicationAdapter = RESTAdapter.extend({
coalesceFindRequests: true,

findRecord(store, type, id, snapshot) {
return { id };
},
});

GroupsAdapter.reopen({
ajax(url, type, options) {
requests.push({
url,
Expand All @@ -48,14 +49,10 @@ module('unit/adapters/rest_adapter/group_records_for_find_many_test - DS.RESTAda
},
});

store = createStore({
adapter: GroupsAdapter,
testRecord: DS.Model.extend(),
});
});
this.owner.register('adapter:application', ApplicationAdapter);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are there any cases where we have to register the corresponding RESTSerializer? (previously the createStore was doing this)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The createStore helper was actually registering the -default serializer as the JSONAPISerializer:

owner.register('serializer:-default', JSONAPISerializer);

There were a few cases where I needed to do this where the test involves mocking the response from the adapter.
Some examples:

https://github.com/emberjs/data/pull/6347/files#diff-8aaaee520d117ac876f402e7a684ebd8R34
https://github.com/emberjs/data/pull/6347/files#diff-8aaaee520d117ac876f402e7a684ebd8R101
https://github.com/emberjs/data/pull/6347/files#diff-8aaaee520d117ac876f402e7a684ebd8R189

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See my notes in setupStore in #6353 for providing serializers. TL;DR we should always be supplying a serializer in tests unless we are testing the current default logic.

this.owner.register('model:test-record', Model.extend());

hooks.afterEach(function() {
run(store, 'destroy');
store = this.owner.lookup('service:store');
});

test('groupRecordsForFindMany - findMany', function(assert) {
Expand Down
65 changes: 29 additions & 36 deletions packages/-ember-data/tests/unit/debug-test.js
Original file line number Diff line number Diff line change
@@ -1,37 +1,33 @@
import Model, { attr, belongsTo, hasMany } from '@ember-data/model';
import { computed } from '@ember/object';
import { createStore } from 'dummy/tests/helpers/store';
import { setupTest } from 'ember-qunit';

import { module, test } from 'qunit';

import DS from 'ember-data';
module('Debug', function(hooks) {
setupTest(hooks);

const TestAdapter = DS.Adapter.extend();

module('Debug', function() {
test('_debugInfo groups the attributes and relationships correctly', function(assert) {
const MaritalStatus = DS.Model.extend({
name: DS.attr('string'),
const MaritalStatus = Model.extend({
name: attr('string'),
});

const Post = DS.Model.extend({
title: DS.attr('string'),
const Post = Model.extend({
title: attr('string'),
});

const User = DS.Model.extend({
name: DS.attr('string'),
isDrugAddict: DS.attr('boolean'),
maritalStatus: DS.belongsTo('marital-status', { async: false }),
posts: DS.hasMany('post', { async: false }),
const User = Model.extend({
name: attr('string'),
isDrugAddict: attr('boolean'),
maritalStatus: belongsTo('marital-status', { async: false }),
posts: hasMany('post', { async: false }),
});

let store = createStore({
adapter: TestAdapter.extend(),
maritalStatus: MaritalStatus,
post: Post,
user: User,
});
this.owner.register('model:marital-status', MaritalStatus);
this.owner.register('model:post', Post);
this.owner.register('model:user', User);

let record = store.createRecord('user');
let record = this.owner.lookup('service:store').createRecord('user');

let propertyInfo = record._debugInfo().propertyInfo;

Expand All @@ -45,18 +41,18 @@ module('Debug', function() {
});

test('_debugInfo supports arbitray relationship types', function(assert) {
const MaritalStatus = DS.Model.extend({
name: DS.attr('string'),
const MaritalStatus = Model.extend({
name: attr('string'),
});

const Post = DS.Model.extend({
title: DS.attr('string'),
const Post = Model.extend({
title: attr('string'),
});

const User = DS.Model.extend({
name: DS.attr('string'),
isDrugAddict: DS.attr('boolean'),
maritalStatus: DS.belongsTo('marital-status', { async: false }),
const User = Model.extend({
name: attr('string'),
isDrugAddict: attr('boolean'),
maritalStatus: belongsTo('marital-status', { async: false }),
posts: computed(() => [1, 2, 3])
.readOnly()
.meta({
Expand All @@ -68,14 +64,11 @@ module('Debug', function() {
}),
});

let store = createStore({
adapter: TestAdapter.extend(),
maritalStatus: MaritalStatus,
post: Post,
user: User,
});
this.owner.register('model:marital-status', MaritalStatus);
this.owner.register('model:post', Post);
this.owner.register('model:user', User);

let record = store.createRecord('user');
let record = this.owner.lookup('service:store').createRecord('user');

let propertyInfo = record._debugInfo().propertyInfo;

Expand Down
Loading