UI: Update Ember to 3.12 LTS (#6419)

This is mostly deprecation fixes and blueprint changes. There
are some dependency updates too; the changes to Ember
Basic Dropdown necessitated changing it to angle bracket
component invocation. The conversion of the rest of the
templates will happen separately.
This commit is contained in:
Buck Doyle
2019-10-15 13:32:58 -05:00
committed by GitHub
parent 53400c5484
commit 882a0210fe
39 changed files with 963 additions and 441 deletions

View File

@@ -1,4 +1,5 @@
module.exports = {
root: true,
globals: {
server: true,
},
@@ -38,12 +39,19 @@ module.exports = {
],
parserOptions: {
sourceType: 'script',
ecmaVersion: 2015,
},
env: {
browser: false,
node: true,
},
plugins: ['node'],
rules: Object.assign({}, require('eslint-plugin-node').configs.recommended.rules, {
// add your custom rules and overrides for node files here
// this can be removed once the following is fixed
// https://github.com/mysticatea/eslint-plugin-node/issues/77
'node/no-unpublished-require': 'off'
}),
},
],
};

View File

@@ -3,7 +3,7 @@ import { assign } from '@ember/polyfills';
import { inject as service } from '@ember/service';
import queryString from 'query-string';
import ApplicationAdapter from './application';
import { AbortError } from 'ember-data/adapters/errors';
import { AbortError } from '@ember-data/adapter/error';
export default ApplicationAdapter.extend({
watchList: service(),

View File

@@ -2,6 +2,7 @@ import Ember from 'ember';
import { inject as service } from '@ember/service';
import Component from '@ember/component';
import { computed } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
import { alias } from '@ember/object/computed';
import { run } from '@ember/runloop';
import { task, timeout } from 'ember-concurrency';
@@ -24,7 +25,7 @@ export default Component.extend({
// Internal state
statsError: false,
enablePolling: computed(() => !Ember.testing),
enablePolling: overridable(() => !Ember.testing),
stats: computed('allocation', 'allocation.isRunning', function() {
if (!this.get('allocation.isRunning')) return;

View File

@@ -1,17 +1,18 @@
import Component from '@ember/component';
import { computed } from '@ember/object';
import { on } from '@ember/object/evented';
export default Component.extend({
timerTicks: 0,
startTimer: function() {
startTimer: on('init', function() {
this.set(
'timer',
setInterval(() => {
this.incrementProperty('timerTicks');
}, 500)
);
}.on('init'),
}),
willDestroy() {
clearInterval(this.timer);

View File

@@ -1,11 +1,12 @@
import Component from '@ember/component';
import { computed } from '@ember/object';
import { on } from '@ember/object/evented';
import d3TimeFormat from 'd3-time-format';
export default Component.extend({
timerTicks: 0,
startTimer: function() {
startTimer: on('init', function() {
this.set(
'timer',
setInterval(() => {
@@ -18,7 +19,7 @@ export default Component.extend({
}
}, 500)
);
}.on('init'),
}),
willDestroy() {
clearInterval(this.timer);

View File

@@ -1,17 +1,18 @@
import Component from '@ember/component';
import { computed } from '@ember/object';
import { on } from '@ember/object/evented';
export default Component.extend({
timerTicks: 0,
startTimer: function() {
startTimer: on('init', function() {
this.set(
'timer',
setInterval(() => {
this.incrementProperty('timerTicks');
}, 1000)
);
}.on('init'),
}),
willDestroy() {
clearInterval(this.timer);

View File

@@ -1,12 +1,13 @@
import Component from '@ember/component';
import { computed } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
import moment from 'moment';
export default Component.extend({
tagName: 'ol',
classNames: ['timeline'],
deployments: computed(() => []),
deployments: overridable(() => []),
sortedDeployments: computed('deployments.@each.versionSubmitTime', function() {
return this.deployments

View File

@@ -1,12 +1,13 @@
import Component from '@ember/component';
import { computed } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
import moment from 'moment';
export default Component.extend({
tagName: 'ol',
classNames: ['timeline'],
versions: computed(() => []),
versions: overridable(() => []),
// Passes through to the job-diff component
verbose: true,

View File

@@ -1,5 +1,6 @@
import Component from '@ember/component';
import { computed, observer } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
import { guidFor } from '@ember/object/internals';
import { run } from '@ember/runloop';
import d3 from 'd3-selection';
@@ -184,7 +185,7 @@ export default Component.extend(WindowResizable, {
return axis && axis.getBBox().width;
}),
xAxisOffset: computed('height', 'xAxisHeight', function() {
xAxisOffset: overridable('height', 'xAxisHeight', function() {
return this.height - this.xAxisHeight;
}),

View File

@@ -1,11 +1,12 @@
import Component from '@ember/component';
import { computed, get } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
export default Component.extend({
classNames: ['accordion'],
key: 'id',
source: computed(() => []),
source: overridable(() => []),
onToggle(/* item, isOpen */) {},
startExpanded: false,
@@ -30,5 +31,5 @@ export default Component.extend({
// When source updates come in, the state cache is used to preserve
// open/close state.
stateCache: computed(() => []),
stateCache: overridable(() => []),
});

View File

@@ -1,8 +1,9 @@
import Component from '@ember/component';
import { computed } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
export default Component.extend({
source: computed(() => []),
source: overridable(() => []),
size: 25,
page: 1,
spread: 2,

View File

@@ -1,11 +1,12 @@
import Component from '@ember/component';
import { computed } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
export default Component.extend({
tagName: 'table',
classNames: ['table'],
source: computed(() => []),
source: overridable(() => []),
// Plan for a future with metadata (e.g., isSelected)
decoratedSource: computed('source.[]', function() {

View File

@@ -1,5 +1,5 @@
import Component from '@ember/component';
import { computed } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
import { run } from '@ember/runloop';
const TAB = 9;
@@ -11,8 +11,8 @@ const ARROW_DOWN = 40;
export default Component.extend({
classNames: ['dropdown'],
options: computed(() => []),
selection: computed(() => []),
options: overridable(() => []),
selection: overridable(() => []),
onSelect() {},

View File

@@ -1,5 +1,5 @@
import Component from '@ember/component';
import { computed } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
import { inject as service } from '@ember/service';
export default Component.extend({
@@ -10,7 +10,7 @@ export default Component.extend({
allocationId: null,
// An allocation can also be provided directly
allocation: computed('allocationId', function() {
allocation: overridable('allocationId', function() {
return this.store.findRecord('allocation', this.allocationId);
}),

View File

@@ -1,6 +1,7 @@
import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
import { computed, observer } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
import { alias } from '@ember/object/computed';
import { task } from 'ember-concurrency';
import Sortable from 'nomad-ui/mixins/sortable';
@@ -24,7 +25,7 @@ export default Controller.extend(Sortable, {
// Set in the route
preempter: null,
error: computed(() => {
error: overridable(() => {
// { title, description }
return null;
}),

View File

@@ -1,5 +1,6 @@
import Controller from '@ember/controller';
import { computed } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
import { alias } from '@ember/object/computed';
import { task } from 'ember-concurrency';
@@ -22,7 +23,7 @@ export default Controller.extend({
.sortBy('name');
}),
error: computed(() => {
error: overridable(() => {
// { title, description }
return null;
}),

View File

@@ -1,6 +1,7 @@
import Mixin from '@ember/object/mixin';
import { run } from '@ember/runloop';
import { assert } from '@ember/debug';
import { on } from '@ember/object/evented';
import $ from 'jquery';
export default Mixin.create({
@@ -8,14 +9,14 @@ export default Mixin.create({
assert('windowResizeHandler needs to be overridden in the Component', false);
},
setupWindowResize: function() {
setupWindowResize: on('didInsertElement', function() {
run.scheduleOnce('afterRender', this, () => {
this.set('_windowResizeHandler', this.windowResizeHandler.bind(this));
$(window).on('resize', this._windowResizeHandler);
});
}.on('didInsertElement'),
}),
removeWindowResize: function() {
removeWindowResize: on('willDestroyElement', function() {
$(window).off('resize', this._windowResizeHandler);
}.on('willDestroyElement'),
}),
});

View File

@@ -1,22 +1,23 @@
import Ember from 'ember';
import Mixin from '@ember/object/mixin';
import { assert } from '@ember/debug';
import { on } from '@ember/object/evented';
export default Mixin.create({
visibilityHandler() {
assert('visibilityHandler needs to be overridden in the Component', false);
},
setupDocumentVisibility: function() {
setupDocumentVisibility: on('init', function() {
if (!Ember.testing) {
this.set('_visibilityHandler', this.visibilityHandler.bind(this));
document.addEventListener('visibilitychange', this._visibilityHandler);
}
}.on('init'),
}),
removeDocumentVisibility: function() {
removeDocumentVisibility: on('init', function() {
if (!Ember.testing) {
document.removeEventListener('visibilitychange', this._visibilityHandler);
}
}.on('willDestroy'),
}),
});

View File

@@ -1,22 +1,23 @@
import Ember from 'ember';
import Mixin from '@ember/object/mixin';
import { assert } from '@ember/debug';
import { on } from '@ember/object/evented';
export default Mixin.create({
visibilityHandler() {
assert('visibilityHandler needs to be overridden in the Route', false);
},
setupDocumentVisibility: function() {
setupDocumentVisibility: on('activate', function() {
if (!Ember.testing) {
this.set('_visibilityHandler', this.visibilityHandler.bind(this));
document.addEventListener('visibilitychange', this._visibilityHandler);
}
}.on('activate'),
}),
removeDocumentVisibility: function() {
removeDocumentVisibility: on('deactivate', function() {
if (!Ember.testing) {
document.removeEventListener('visibilitychange', this._visibilityHandler);
}
}.on('deactivate'),
}),
});

View File

@@ -1,7 +1,7 @@
import { inject as service } from '@ember/service';
import { next } from '@ember/runloop';
import Route from '@ember/routing/route';
import { AbortError } from 'ember-data/adapters/errors';
import { AbortError } from '@ember-data/adapter/error';
import RSVP from 'rsvp';
export default Route.extend({

View File

@@ -1,5 +1,5 @@
import ApplicationSerializer from './application';
import { AdapterError } from 'ember-data/adapters/errors';
import AdapterError from '@ember-data/adapter/error';
export default ApplicationSerializer.extend({
attrs: {

View File

@@ -18,6 +18,8 @@ export default Service.extend({
token: service(),
init() {
this._super(...arguments);
// The LRUMap limits the number of trackers tracked by making room for
// new entries beyond the limit by removing the least recently used entry.
registry = new LRUMap(MAX_STAT_TRACKERS);

View File

@@ -10,6 +10,7 @@ export default Service.extend({
}),
init() {
this._super(...arguments);
list = {};
},

View File

@@ -4,7 +4,7 @@
selected=selectedOption
searchField="name"
searchEnabled=(gt options.length 10)
onchange=(action (mut selectedOption))
onChange=(action (mut selectedOption))
as |option|}}
{{option.name}}
{{/power-select}}
@@ -22,7 +22,7 @@
selected=selectedOption2
searchField="name"
searchEnabled=(gt options.length 10)
onchange=(action (mut selectedOption2))
onChange=(action (mut selectedOption2))
as |option|}}
{{option.name}}
{{/power-select}}
@@ -42,7 +42,7 @@
selected=selectedOption3
searchField="name"
searchEnabled=(gt manyOptions.length 10)
onchange=(action (mut selectedOption3))
onChange=(action (mut selectedOption3))
as |option|}}
{{option.name}}
{{/power-select}}

View File

@@ -37,7 +37,7 @@
{{#power-select
selected=(or selection "One")
options=(array "One" "Two" "Three")
onchange=(action (mut selection))
onChange=(action (mut selection))
as |option|}}
{{option}}
{{/power-select}}

View File

@@ -36,7 +36,7 @@
selected=system.activeNamespace
searchField="name"
searchEnabled=(gt sortedNamespaces.length 10)
onchange=(action gotoJobsForNamespace)
onChange=(action gotoJobsForNamespace)
tagName="div"
class="namespace-switcher"
as |namespace|}}

View File

@@ -1,36 +1,43 @@
{{#basic-dropdown
horizontalPosition="left"
onOpen=(action (queue
(action (mut isOpen) true)
(action capture)
))
onClose=(action (mut isOpen) false)
as |dd|}}
{{#dd.trigger data-test-dropdown-trigger class="dropdown-trigger" onKeyDown=(action "openOnArrowDown")}}
<span class="dropdown-trigger-label">
<BasicDropdown
@horizontalPosition="left"
@onOpen={{action (queue (action (mut isOpen) true) (action capture))}}
@onClose={{action (mut isOpen) false}} as |dd|
>
<dd.Trigger data-test-dropdown-trigger class="dropdown-trigger" {{on "keydown" (action "openOnArrowDown" dd)}}>
<div class="dropdown-trigger-label">
{{label}}
{{#if selection.length}}
<span data-test-dropdown-count class="tag is-light">{{selection.length}}</span>
<span data-test-dropdown-count class="tag is-light">
{{selection.length}}
</span>
{{/if}}
</span>
</div>
<span class="dropdown-trigger-icon ember-power-select-status-icon"></span>
{{/dd.trigger}}
{{#dd.content class="dropdown-options"}}
</dd.Trigger>
<dd.Content class="dropdown-options">
<ul role="listbox" data-test-dropdown-options>
{{#each options key="key" as |option|}}
<li data-test-dropdown-option={{option.key}} class="dropdown-option" tabindex="1" onkeydown={{action "traverseList" option}}>
<li
data-test-dropdown-option={{option.key}}
class="dropdown-option"
tabindex="1"
onkeydown={{action "traverseList" option}}
>
<label>
<input
type="checkbox"
tabindex="-1"
checked={{contains option.key selection}}
onchange={{action "toggle" option}} />
onchange={{action "toggle" option}}
/>
{{option.label}}
</label>
</li>
{{else}}
<em data-test-dropdown-empty class="dropdown-empty">No options</em>
<em data-test-dropdown-empty class="dropdown-empty">
No options
</em>
{{/each}}
</ul>
{{/dd.content}}
{{/basic-dropdown}}
</dd.Content>
</BasicDropdown>

View File

@@ -6,7 +6,7 @@
options=sortedRegions
selected=system.activeRegion
searchEnabled=false
onchange=(action gotoRegion) as |region|}}
onChange=(action gotoRegion) as |region|}}
<span class="ember-power-select-prefix">Region: </span>{{region}}
{{/power-select}}
{{/if}}

View File

@@ -1,6 +1,7 @@
import { assert } from '@ember/debug';
import Mixin from '@ember/object/mixin';
import { computed } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
import { assign } from '@ember/polyfills';
import queryString from 'query-string';
@@ -8,7 +9,7 @@ const MAX_OUTPUT_LENGTH = 50000;
export default Mixin.create({
url: '',
params: computed(() => ({})),
params: overridable(() => ({})),
logFetch() {
assert('Loggers need a logFetch method, which should have an interface like window.fetch');
},
@@ -22,7 +23,7 @@ export default Mixin.create({
: { origin: 'end', offset: MAX_OUTPUT_LENGTH };
}),
additionalParams: computed(() => ({})),
additionalParams: overridable(() => ({})),
fullUrl: computed('url', 'params', 'offsetParams', 'additionalParams', function() {
const queryParams = queryString.stringify(

View File

@@ -3,6 +3,7 @@ import { assert } from '@ember/debug';
import { htmlSafe } from '@ember/template';
import Evented from '@ember/object/evented';
import EmberObject, { computed } from '@ember/object';
import { computed as overridable } from 'ember-overridable-computed';
import { assign } from '@ember/polyfills';
import queryString from 'query-string';
import { task } from 'ember-concurrency';
@@ -20,7 +21,7 @@ const Log = EmberObject.extend(Evented, {
// Parameters
url: '',
params: computed(() => ({})),
params: overridable(() => ({})),
plainText: false,
logFetch() {
assert('Log objects need a logFetch method, which should have an interface like window.fetch');

View File

@@ -1,4 +1,4 @@
import { AdapterError } from 'ember-data/adapters/errors';
import AdapterError from '@ember-data/adapter/error';
export const NO_LEADER = 'No cluster leader';

View File

@@ -8,5 +8,6 @@ self.deprecationWorkflow.config = {
// Only used in ivy-codemirror.
// PR open: https://github.com/IvyApp/ivy-codemirror/pull/40/files
{ handler: 'log', matchId: 'ember-component.send-action' },
{ handler: 'log', matchId: 'ember-test-helpers.rendering-context.jquery-element' },
],
};

View File

@@ -15,8 +15,7 @@ module.exports = function(environment) {
EmberENV: {
FEATURES: {
// Here you can enable experimental features on an ember canary build
// e.g. 'with-controller': true
'ember-routing-router-service': true,
// e.g. EMBER_NATIVE_DECORATOR_SUPPORT: true
},
EXTEND_PROTOTYPES: {
// Prevent Ember Data from overriding Date.parse.

View File

@@ -2,5 +2,9 @@
"name": "bulma",
"keywords": [
"ember-addon"
]
],
"devDependencies": {
"broccoli-funnel": "^2.0.1",
"bulma": "0.6.1"
}
}

View File

@@ -21,15 +21,21 @@
}
},
"lint-staged": {
"{app,tests,config,lib,mirage}/**/*.js": ["prettier --write", "git add"],
"app/styles/**/*.*": ["prettier --write", "git add"]
"{app,tests,config,lib,mirage}/**/*.js": [
"prettier --write",
"git add"
],
"app/styles/**/*.*": [
"prettier --write",
"git add"
]
},
"devDependencies": {
"anser": "^1.4.8",
"@babel/plugin-proposal-object-rest-spread": "^7.4.3",
"@ember/jquery": "^0.6.0",
"@ember/optional-features": "^0.7.0",
"@hashicorp/structure-icons": "^1.3.0",
"anser": "^1.4.8",
"broccoli-asset-rev": "^3.0.0",
"bulma": "0.6.1",
"core-js": "^2.4.1",
@@ -43,15 +49,15 @@
"d3-transition": "^1.1.0",
"ember-ajax": "^5.0.0",
"ember-auto-import": "^1.2.21",
"ember-cli": "~3.8.3",
"ember-cli-babel": "^7.1.2",
"ember-cli": "~3.12.0",
"ember-cli-babel": "^7.7.3",
"ember-cli-clipboard": "^0.13.0",
"ember-cli-dependency-checker": "^3.1.0",
"ember-cli-deprecation-workflow": "^1.0.1",
"ember-cli-eslint": "^5.1.0",
"ember-cli-funnel": "^0.6.1",
"ember-cli-htmlbars": "^3.0.0",
"ember-cli-htmlbars-inline-precompile": "^1.0.3",
"ember-cli-htmlbars": "^3.0.1",
"ember-cli-htmlbars-inline-precompile": "^2.1.0",
"ember-cli-inject-live-reload": "^2.0.1",
"ember-cli-mirage": "^1.1.2",
"ember-cli-moment-shim": "^3.5.0",
@@ -64,27 +70,29 @@
"ember-composable-helpers": "^2.0.3",
"ember-concurrency": "^1.0.0",
"ember-copy": "^1.0.0",
"ember-data": "~3.8.0",
"ember-data": "~3.12.0",
"ember-data-model-fragments": "4.0.0",
"ember-export-application-global": "^2.0.0",
"ember-fetch": "^6.5.0",
"ember-freestyle": "~0.10.0",
"ember-inflector": "^3.0.0",
"ember-inline-svg": "^0.3.0",
"ember-load-initializers": "^1.1.0",
"ember-load-initializers": "^2.0.0",
"ember-maybe-import-regenerator": "^0.1.6",
"ember-moment": "^7.8.1",
"ember-overridable-computed": "^1.0.0",
"ember-page-title": "^5.0.2",
"ember-power-select": "^2.2.3",
"ember-qunit": "^3.4.1",
"ember-power-select": "^3.0.4",
"ember-qunit": "^4.4.1",
"ember-qunit-nice-errors": "^1.2.0",
"ember-resolver": "^5.0.1",
"ember-responsive": "^3.0.4",
"ember-sinon": "^4.0.0",
"ember-source": "~3.8.0",
"ember-source": "~3.12.0",
"ember-test-selectors": "^2.1.0",
"ember-truth-helpers": "^2.0.0",
"eslint": "^5.16.0",
"eslint-plugin-node": "^9.0.1",
"faker": "^4.1.0",
"flat": "^4.0.0",
"fuse.js": "^3.4.4",
@@ -101,11 +109,13 @@
"sass": "^1.17.3"
},
"engines": {
"node": "6.* || 8.* || >= 10.*"
"node": "8.* || >= 10.*"
},
"private": true,
"ember-addon": {
"paths": ["lib/bulma"]
"paths": [
"lib/bulma"
]
},
"dependencies": {
"lru_map": "^0.3.3"

View File

@@ -32,7 +32,7 @@ module('Integration | Component | attributes table', function(hooks) {
const rowsCount = Object.keys(flatten(commonAttributes)).length;
assert.equal(
this.$('[data-test-attributes-section]').has('[data-test-value]').length,
this.element.querySelectorAll('[data-test-attributes-section] [data-test-value]').length,
rowsCount,
`Table has ${rowsCount} rows with values`
);

View File

@@ -59,31 +59,10 @@ module('Integration | Component | list table', function(hooks) {
// list-table is not responsible for sorting, only dispatching sort events. The table is still
// rendered in index-order.
this.get('source').forEach((item, index) => {
const $item = this.$(`.item:eq(${index})`);
assert.equal(
$item
.find('td:eq(0)')
.text()
.trim(),
item.firstName,
'First name'
);
assert.equal(
$item
.find('td:eq(1)')
.text()
.trim(),
item.lastName,
'Last name'
);
assert.equal(
$item
.find('td:eq(2)')
.text()
.trim(),
item.age,
'Age'
);
const $item = this.element.querySelectorAll('.item')[index];
assert.equal($item.querySelectorAll('td')[0].innerHTML.trim(), item.firstName, 'First name');
assert.equal($item.querySelectorAll('td')[1].innerHTML.trim(), item.lastName, 'Last name');
assert.equal($item.querySelectorAll('td')[2].innerHTML.trim(), item.age, 'Age');
});
});

View File

@@ -57,6 +57,7 @@ module('Unit | Adapter | Job', function(hooks) {
this.subject().findRecord(null, { modelName: 'job' }, jobId);
await settled();
assert.deepEqual(
pretender.handledRequests.mapBy('url'),
[`/v1/job/${jobName}`],
@@ -75,6 +76,7 @@ module('Unit | Adapter | Job', function(hooks) {
const jobId = JSON.stringify([jobName, jobNamespace]);
this.subject().findRecord(null, { modelName: 'job' }, jobId);
await settled();
assert.deepEqual(
pretender.handledRequests.mapBy('url'),
@@ -94,6 +96,7 @@ module('Unit | Adapter | Job', function(hooks) {
const jobId = JSON.stringify([jobName, jobNamespace]);
this.subject().findRecord(null, { modelName: 'job' }, jobId);
await settled();
assert.deepEqual(
pretender.handledRequests.mapBy('url'),
@@ -111,6 +114,7 @@ module('Unit | Adapter | Job', function(hooks) {
const jobId = JSON.stringify([jobName, jobNamespace]);
this.subject().findRecord(null, { modelName: 'job' }, jobId);
await settled();
assert.deepEqual(
pretender.handledRequests.mapBy('url'),
@@ -126,6 +130,7 @@ module('Unit | Adapter | Job', function(hooks) {
const jobId = JSON.stringify(['job-1', 'default']);
this.subject().findRecord(null, { modelName: 'job' }, jobId);
await settled();
assert.notOk(
pretender.handledRequests.mapBy('requestHeaders').some(headers => headers['X-Nomad-Token']),
@@ -142,6 +147,7 @@ module('Unit | Adapter | Job', function(hooks) {
this.subject().set('token.secret', secret);
this.subject().findRecord(null, { modelName: 'job' }, jobId);
await settled();
assert.ok(
pretender.handledRequests
@@ -242,6 +248,8 @@ module('Unit | Adapter | Job', function(hooks) {
await settled();
this.subject().reloadRelationship(mockModel, 'summary', { watch: true });
await settled();
assert.equal(
pretender.handledRequests[1].url,
'/v1/job/job-1/summary?index=2',
@@ -377,6 +385,7 @@ module('Unit | Adapter | Job', function(hooks) {
await settled();
this.subject().findRecord(null, { modelName: 'job' }, jobId);
this.subject().findAll(null, { modelName: 'job' }, null);
await settled();
assert.deepEqual(
pretender.handledRequests.mapBy('url'),
@@ -399,6 +408,7 @@ module('Unit | Adapter | Job', function(hooks) {
await settled();
this.subject().findRecord(null, { modelName: 'job' }, jobId);
this.subject().findAll(null, { modelName: 'job' }, null);
await settled();
assert.deepEqual(
pretender.handledRequests.mapBy('url'),
@@ -420,6 +430,7 @@ module('Unit | Adapter | Job', function(hooks) {
await settled();
this.subject().findRecord(null, { modelName: 'job' }, jobId);
this.subject().findAll(null, { modelName: 'job' }, null);
await settled();
assert.deepEqual(
pretender.handledRequests.mapBy('url'),

File diff suppressed because it is too large Load Diff