Skip to content

Commit

Permalink
[CHORE] IE11 Testing (#6830)
Browse files Browse the repository at this point in the history
* add ie11

* ensure we are always using RSVP Promise

* tweaks

* ie11 cleanup

* freezit

* just in case

* fix lint

* always run production

* fix

* dont run TODO tests in Prod

* allow iteration

* fix

* fix startsWith

* almost there

* turn on waiter for more things and fix assert

* fix?

* maybe fix?

* fastboot test helpers dont work in production so we cant test fastboot+ie11
  • Loading branch information
runspired authored Dec 2, 2019
1 parent 8323dbc commit 4c71e3c
Show file tree
Hide file tree
Showing 20 changed files with 160 additions and 54 deletions.
11 changes: 11 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ module.exports = {
plugins: ['prettier', 'qunit', 'mocha'],
extends: ['eslint:recommended', 'prettier'],
rules: {
'no-restricted-globals': ['error', { name: 'Promise', message: 'Global Promise does not work in IE11' }],
'mocha/no-exclusive-tests': 'error',
'prettier/prettier': 'error',
'no-unused-vars': ['error', { args: 'none' }],
Expand All @@ -28,6 +29,7 @@ module.exports = {
Map: false,
WeakMap: true,
Set: true,
Promise: false,
},
env: {
browser: true,
Expand Down Expand Up @@ -87,6 +89,9 @@ module.exports = {
},
plugins: ['node'],
extends: 'plugin:node/recommended',
rules: {
'no-restricted-globals': 'off',
},
},

// node tests
Expand All @@ -95,6 +100,9 @@ module.exports = {
env: {
mocha: true,
},
rules: {
'no-restricted-globals': 'off',
},
},

// docs
Expand All @@ -104,6 +112,9 @@ module.exports = {
qunit: true,
es6: false,
},
rules: {
'no-restricted-globals': 'off',
},
},

// bin files
Expand Down
20 changes: 20 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,26 @@ jobs:
EMBER_DATA_FEATURE_OVERRIDE: DISABLE_ALL
run: yarn test
basic-tests-ie11:
needs: [lint]
timeout-minutes: 20
runs-on: windows-latest
env:
TEST_IE11: true
TARGET_IE11: true
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install dependencies
run: yarn install
- name: Launcher Info
run: |
yarn run testem launchers
- name: Production build
run: yarn test:production

floating-dependencies:
timeout-minutes: 4
needs: [lint, basic-tests]
Expand Down
8 changes: 7 additions & 1 deletion packages/-ember-data/testem.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
const TestIE = process.env.TEST_IE11;

if (TestIE) {
// eslint-disable-next-line no-console
console.log('\n\nLaunching with IE\n\n');
}
module.exports = {
test_page: 'tests/index.html?hidepassed',
disable_watching: true,
reporter: 'dot',
launch_in_ci: ['Chrome'],
launch_in_ci: TestIE ? ['IE'] : ['Chrome'],
launch_in_dev: ['Chrome'],
browser_start_timeout: 120,
browser_args: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { RecordData } from '@ember-data/store/-private/ts-interfaces/record-data
import { RecordIdentifier } from '@ember-data/store/-private/ts-interfaces/identifier';
import { RECORD_DATA_ERRORS } from '@ember-data/canary-features';
import JSONAPISerializer from '@ember-data/serializer/json-api';
import { Promise } from 'rsvp';

class Person extends Model {
// TODO fix the typing for naked attrs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import Ember from 'ember';
import { RecordData } from '@ember-data/store/-private/ts-interfaces/record-data';
import { RECORD_DATA_STATE } from '@ember-data/canary-features';
import JSONAPISerializer from '@ember-data/serializer/json-api';
import { Promise } from 'rsvp';

class Person extends Model {
// TODO fix the typing for naked attrs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { settled } from '@ember/test-helpers';
import EmberObject from '@ember/object';
import { attr, hasMany, belongsTo } from '@ember-data/model';
import { RECORD_DATA_ERRORS } from '@ember-data/canary-features';
import { Promise } from 'rsvp';

class Person extends Model {
// TODO fix the typing for naked attrs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4017,7 +4017,9 @@ module('inverse relationship load test', function(hooks) {
'hasMany relationship on specified record has correct number of associated records'
);

for (let dog of store.peekAll('dogs').toArray()) {
let allDogs = store.peekAll('dogs').toArray();
for (let i = 0; i < allDogs.length; i++) {
let dog = allDogs[i];
let dogPerson = await dog.get('person');
assert.equal(dogPerson.get('id'), person2.get('id'), 'right hand side has correct belongsTo value');
}
Expand Down Expand Up @@ -4142,7 +4144,9 @@ module('inverse relationship load test', function(hooks) {
'hasMany relationship on specified record has correct number of associated records'
);

for (let dog of store.peekAll('dogs').toArray()) {
let allDogs = store.peekAll('dogs').toArray();
for (let i = 0; i < allDogs.length; i++) {
let dog = allDogs[i];
let dogPerson = await dog.get('person');
assert.equal(dogPerson.get('id'), person2.get('id'), 'right hand side has correct belongsTo value');
}
Expand Down Expand Up @@ -4244,7 +4248,9 @@ module('inverse relationship load test', function(hooks) {

assert.equal(personDogs.get('length'), 0, 'hasMany relationship for parent is empty');

for (let dog of store.peekAll('dogs').toArray()) {
let allDogs = store.peekAll('dogs').toArray();
for (let i = 0; i < allDogs.length; i++) {
let dog = allDogs[i];
let dogPerson = await dog.get('person');
assert.equal(dogPerson, null, 'right hand side has correct belongsTo value');
}
Expand Down Expand Up @@ -4346,7 +4352,9 @@ module('inverse relationship load test', function(hooks) {

assert.equal(personDogs.get('length'), 0, 'hasMany relationship for parent is empty');

for (let dog of store.peekAll('dogs').toArray()) {
let allDogs = store.peekAll('dogs').toArray();
for (let i = 0; i < allDogs.length; i++) {
let dog = allDogs[i];
let dogPerson = await dog.get('person');
assert.equal(dogPerson, null, 'right hand side has correct belongsTo value');
}
Expand Down Expand Up @@ -4471,7 +4479,9 @@ module('inverse relationship load test', function(hooks) {
'hasMany relationship on specified record has correct number of associated records'
);

for (let dog of store.peekAll('dogs').toArray()) {
let allDogs = store.peekAll('dogs').toArray();
for (let i = 0; i < allDogs.length; i++) {
let dog = allDogs[i];
let dogPerson = await dog.get('pal');
assert.equal(dogPerson.get('id'), pal2.get('id'), 'right hand side has correct belongsTo value');
}
Expand Down Expand Up @@ -4596,7 +4606,9 @@ module('inverse relationship load test', function(hooks) {
'hasMany relationship on specified record has correct number of associated records'
);

for (let dog of store.peekAll('dogs').toArray()) {
let allDogs = store.peekAll('dogs').toArray();
for (let i = 0; i < allDogs.length; i++) {
let dog = allDogs[i];
let dogPerson = await dog.get('pal');
assert.equal(dogPerson.get('id'), pal2.get('id'), 'right hand side has correct belongsTo value');
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { attr } from '@ember-data/model';
import { REQUEST_SERVICE } from '@ember-data/canary-features';
import { RequestStateEnum } from '@ember-data/store/-private/ts-interfaces/fetch-manager';
import JSONSerializer from '@ember-data/serializer/json';
import { Promise } from 'rsvp';

class Person extends Model {
// TODO fix the typing for naked attrs
Expand Down
26 changes: 9 additions & 17 deletions packages/-ember-data/tests/integration/store-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -274,17 +274,19 @@ module('integration/store - destroy', function(hooks) {

module('integration/store - findRecord', function(hooks) {
setupTest(hooks);
let store;

hooks.beforeEach(function() {
this.owner.register('model:car', Car);
this.owner.register('adapter:application', RESTAdapter.extend());
this.owner.register('serializer:application', RESTSerializer.extend());
store = this.owner.lookup('service:store');
store.shouldTrackAsyncRequests = true;
});

test('store#findRecord fetches record from server when cached record is not present', async function(assert) {
assert.expect(2);

let store = this.owner.lookup('service:store');
let adapter = store.adapterFor('application');

adapter.ajax = ajaxResponse({
Expand All @@ -309,7 +311,6 @@ module('integration/store - findRecord', function(hooks) {
test('store#findRecord returns cached record immediately and reloads record in the background', async function(assert) {
assert.expect(4);

let store = this.owner.lookup('service:store');
let adapter = store.adapterFor('application');

adapter.shouldReloadRecord = () => false;
Expand All @@ -327,7 +328,7 @@ module('integration/store - findRecord', function(hooks) {
});

adapter.ajax = async () => {
await new Promise(resolve => setTimeout(resolve, 1));
await resolve();

return {
cars: [
Expand Down Expand Up @@ -363,7 +364,6 @@ module('integration/store - findRecord', function(hooks) {

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

let store = this.owner.lookup('service:store');
let adapter = store.adapterFor('application');

store.push({
Expand Down Expand Up @@ -408,7 +408,7 @@ module('integration/store - findRecord', function(hooks) {
async findRecord() {
calls++;

await new Promise(resolve => setTimeout(resolve, 1));
await resolve();

return {
data: {
Expand All @@ -426,8 +426,6 @@ module('integration/store - findRecord', function(hooks) {
this.owner.register('adapter:application', testAdapter);
this.owner.register('serializer:application', JSONAPISerializer.extend());

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

let car = await store.findRecord('car', '1');

assert.strictEqual(calls, 1, 'We made one call to findRecord');
Expand Down Expand Up @@ -458,8 +456,6 @@ module('integration/store - findRecord', function(hooks) {

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

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

store.push({
data: {
type: 'car',
Expand Down Expand Up @@ -491,7 +487,6 @@ module('integration/store - findRecord', function(hooks) {

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

let store = this.owner.lookup('service:store');
let adapter = store.adapterFor('application');

store.push({
Expand All @@ -506,7 +501,7 @@ module('integration/store - findRecord', function(hooks) {
});

adapter.ajax = async function() {
await new Promise(resolve => setTimeout(resolve, 1));
await resolve();

return deepCopy({
cars: [
Expand Down Expand Up @@ -546,7 +541,6 @@ module('integration/store - findRecord', function(hooks) {

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

let store = this.owner.lookup('service:store');
let adapter = store.adapterFor('application');

store.push({
Expand All @@ -561,7 +555,7 @@ module('integration/store - findRecord', function(hooks) {
});

adapter.ajax = async function() {
await new Promise(resolve => setTimeout(resolve, 1));
await resolve();

return deepCopy({
cars: [
Expand Down Expand Up @@ -590,8 +584,6 @@ module('integration/store - findRecord', function(hooks) {

assert.expect(badValues.length);

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

badValues.map(item => {
assert.expectAssertion(() => {
store.findRecord('car', item);
Expand Down Expand Up @@ -780,7 +772,7 @@ module('integration/store - findAll', function(hooks) {
});

adapter.ajax = async () => {
await new Promise(resolve => setTimeout(resolve, 1));
await resolve();

return {
cars: [
Expand All @@ -805,8 +797,8 @@ module('integration/store - findAll', function(hooks) {

await settled();

// IE11 hack
cars = store.peekAll('car');

assert.equal(cars.length, 2, 'multiple cars now in the store');
assert.equal(cars.firstObject.model, 'New Mini', 'existing record updated correctly');
assert.equal(cars.lastObject.model, 'Isetta', 'new record added to the store');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { setupTest } from 'ember-qunit';
import { module, test } from 'qunit';
import Store from 'ember-data/store';
import { assign } from '@ember/polyfills';

class TestAdapter {
constructor(args) {
Object.assign(this, args);
assign(this, args);
this.didInit();
}

Expand Down
13 changes: 11 additions & 2 deletions packages/-ember-data/tests/integration/store/model-name-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ import { computed } from '@ember/object';
import Service, { inject } from '@ember/service';
import Store from '@ember-data/store';

function startsWith(str, substr) {
if (typeof str.startsWith === 'function') {
return str.startsWith(substr);
}
return str.indexOf(substr) === 0;
}

module('@ember-data/model klass.modelName', function(hooks) {
setupTest(hooks);

Expand Down Expand Up @@ -52,9 +59,11 @@ module('@ember-data/model klass.modelName', function(hooks) {
assert.ok(false, 'expected modelName to be immutable');
} catch (e) {
assert.strictEqual(
e.message.startsWith(`Cannot assign to read only property 'modelName' of `),
startsWith(e.message, `Cannot assign to read only property 'modelName' of `) ||
// IE11 has a different message
startsWith(e.message, `Assignment to read-only properties is not allowed in strict mode`),
true,
'modelName is immutable'
`modelName is immutable: ${e.message}`
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import { setupTest } from 'ember-qunit';
import { module, test } from 'qunit';
import { deprecatedTest } from '@ember-data/unpublished-test-infra/test-support/deprecated-test';
import Store from 'ember-data/store';
import { assign } from '@ember/polyfills';

class TestAdapter {
constructor(args) {
Object.assign(this, args);
assign(this, args);
this.didInit();
}

Expand All @@ -18,7 +19,7 @@ class TestAdapter {

class TestSerializer {
constructor(args) {
Object.assign(this, args);
assign(this, args);
this.didInit();
}

Expand Down
4 changes: 4 additions & 0 deletions packages/-ember-data/tests/test-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ import QUnit from 'qunit';
import { wait, asyncEqual, invokeAsync } from '@ember-data/unpublished-test-infra/test-support/async';
import configureAsserts from '@ember-data/unpublished-test-infra/test-support/qunit-asserts';

if (window.Promise === undefined) {
window.Promise = RSVP.Promise;
}

configureAsserts();

setApplication(Application.create(config.APP));
Expand Down
Loading

0 comments on commit 4c71e3c

Please sign in to comment.