diff --git a/ui/packages/consul-ui/package.json b/ui/packages/consul-ui/package.json index 7960af1a7..64e731b32 100644 --- a/ui/packages/consul-ui/package.json +++ b/ui/packages/consul-ui/package.json @@ -60,6 +60,7 @@ "@docfy/ember": "^0.4.1", "@ember/optional-features": "^1.3.0", "@ember/render-modifiers": "^1.0.2", + "@ember/test-helpers": "^2.1.4", "@glimmer/component": "^1.0.0", "@glimmer/tracking": "^1.0.0", "@hashicorp/ember-cli-api-double": "^3.1.0", @@ -135,7 +136,7 @@ "ember-page-title": "^6.2.1", "ember-power-select": "^4.0.5", "ember-power-select-with-create": "^0.8.0", - "ember-qunit": "^4.6.0", + "ember-qunit": "^5.1.1", "ember-ref-modifier": "^1.0.0", "ember-render-helpers": "^0.2.0", "ember-resolver": "^8.0.0", @@ -166,7 +167,7 @@ "pretender": "^3.2.0", "prettier": "^1.10.2", "pretty-ms": "^7.0.1", - "qunit-dom": "^1.0.0", + "qunit-dom": "^1.6.0", "react-is": "^17.0.1", "refractor": "^3.5.0", "remark-autolink-headings": "^6.0.1", @@ -177,7 +178,8 @@ "tippy.js": "^6.2.7", "torii": "^0.10.1", "unist-util-visit": "^2.0.3", - "wayfarer": "^7.0.1" + "wayfarer": "^7.0.1", + "qunit": "^2.13.0" }, "engines": { "node": ">=10 <=14" diff --git a/ui/packages/consul-ui/tests/acceptance/dc/services/show-routing.feature b/ui/packages/consul-ui/tests/acceptance/dc/services/show-routing.feature index 8befb868f..3cbf392f7 100644 --- a/ui/packages/consul-ui/tests/acceptance/dc/services/show-routing.feature +++ b/ui/packages/consul-ui/tests/acceptance/dc/services/show-routing.feature @@ -52,6 +52,13 @@ Feature: dc / services / show-routing: Show Routing for Service service: service-1 --- And I see routing on the tabs + # something weird is going on with this test + # without waiting we issue a url reload that + # will make the test timeout. + # waiting will "fix" this - we should look into + # the underlying reason for this soon. This is + # only a quick-fix to land ember-qunit v5. + And pause for 1000 And I visit the service page for yaml --- dc: dc1 diff --git a/ui/packages/consul-ui/tests/acceptance/submit-blank.feature b/ui/packages/consul-ui/tests/acceptance/submit-blank.feature index 906281012..f18cdbbc3 100644 --- a/ui/packages/consul-ui/tests/acceptance/submit-blank.feature +++ b/ui/packages/consul-ui/tests/acceptance/submit-blank.feature @@ -10,7 +10,7 @@ Feature: submit-blank dc: datacenter --- Then the url should be /datacenter/[Slug]/create - And I submit + Then I don't see submitIsEnabled Then the url should be /datacenter/[Slug]/create Where: -------------------------- diff --git a/ui/packages/consul-ui/tests/index.html b/ui/packages/consul-ui/tests/index.html index f841d34b9..4ee572ab4 100644 --- a/ui/packages/consul-ui/tests/index.html +++ b/ui/packages/consul-ui/tests/index.html @@ -16,6 +16,13 @@ {{content-for "body"}} {{content-for "test-body"}} +
+
+
+
+
+
+ {{content-for "body-footer"}} diff --git a/ui/packages/consul-ui/tests/integration/components/data-source-test.js b/ui/packages/consul-ui/tests/integration/components/data-source-test.js index 10702240a..6c343d617 100644 --- a/ui/packages/consul-ui/tests/integration/components/data-source-test.js +++ b/ui/packages/consul-ui/tests/integration/components/data-source-test.js @@ -1,13 +1,13 @@ -import { module } from 'qunit'; +import { module, test } from 'qunit'; import { setupRenderingTest } from 'ember-qunit'; import { clearRender, render, waitUntil } from '@ember/test-helpers'; import hbs from 'htmlbars-inline-precompile'; -import test from 'ember-sinon-qunit/test-support/test'; import Service, { inject as service } from '@ember/service'; import DataSourceComponent from 'consul-ui/components/data-source/index'; import { BlockingEventSource as RealEventSource } from 'consul-ui/utils/dom/event-source'; +import sinon from 'sinon'; const createFakeBlockingEventSource = function() { const EventSource = function(cb) { @@ -39,10 +39,10 @@ module('Integration | Component | data-source', function(hooks) { // Set any properties with this.set('myProperty', 'value'); // Handle any actions with this.set('myAction', function(val) { ... }); assert.expect(9); - const close = this.stub(); - const open = this.stub(); - const addEventListener = this.stub(); - const removeEventListener = this.stub(); + const close = sinon.stub(); + const open = sinon.stub(); + const addEventListener = sinon.stub(); + const removeEventListener = sinon.stub(); let count = 0; const fakeService = class extends Service { close = close; @@ -98,8 +98,8 @@ module('Integration | Component | data-source', function(hooks) { }); test('error actions are triggered when errors are dispatched', async function(assert) { const source = new RealEventSource(); - const error = this.stub(); - const close = this.stub(); + const error = sinon.stub(); + const close = sinon.stub(); const fakeService = class extends Service { close = close; open(uri, obj) { diff --git a/ui/packages/consul-ui/tests/integration/services/repository/auth-method-test.js b/ui/packages/consul-ui/tests/integration/services/repository/auth-method-test.js index ce9ab231c..93de5150f 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/auth-method-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/auth-method-test.js @@ -1,92 +1,94 @@ -import { moduleFor, test } from 'ember-qunit'; +import { setupTest } from 'ember-qunit'; import repo from 'consul-ui/tests/helpers/repo'; -import { skip } from 'qunit'; +import { module, skip, test } from 'qunit'; -const NAME = 'auth-method'; -moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { - // Specify the other units that are required for this test. - integration: true, -}); -const dc = 'dc-1'; -const id = 'auth-method-name'; -const undefinedNspace = 'default'; -const undefinedPartition = 'default'; -const partition = 'default'; -[undefinedNspace, 'team-1', undefined].forEach(nspace => { - test(`findAllByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { - return repo( - 'auth-method', - 'findAllByDatacenter', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/acl/auth-methods?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }`, - { - CONSUL_AUTH_METHOD_COUNT: '3', - } - ); - }, - function performTest(service) { - return service.findAllByDatacenter({ - dc: dc, - nspace: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - return payload.map(function(item) { +module(`Integration | Service | auth-method`, function(hooks) { + setupTest(hooks); + const dc = 'dc-1'; + const id = 'auth-method-name'; + const undefinedNspace = 'default'; + const undefinedPartition = 'default'; + const partition = 'default'; + [undefinedNspace, 'team-1', undefined].forEach(nspace => { + test(`findAllByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/auth-method'); + + return repo( + 'auth-method', + 'findAllByDatacenter', + subject, + function retrieveStub(stub) { + return stub( + `/v1/acl/auth-methods?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }`, + { + CONSUL_AUTH_METHOD_COUNT: '3', + } + ); + }, + function performTest(service) { + return service.findAllByDatacenter({ + dc: dc, + nspace: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + return payload.map(function(item) { + return Object.assign({}, item, { + Datacenter: dc, + Namespace: item.Namespace || undefinedNspace, + Partition: item.Partition || undefinedPartition, + uid: `["${item.Partition || undefinedPartition}","${item.Namespace || + undefinedNspace}","${dc}","${item.Name}"]`, + }); + }); + }) + ); + } + ); + }); + skip(`findBySlug returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/auth-method'); + + return repo( + 'AuthMethod', + 'findBySlug', + subject, + function retrieveStub(stub) { + return stub( + `/v1/acl/auth-method/${id}?dc=${dc}${ + typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` + }` + ); + }, + function performTest(service) { + return service.findBySlug(id, dc, nspace || undefinedNspace); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + const item = payload; return Object.assign({}, item, { Datacenter: dc, Namespace: item.Namespace || undefinedNspace, - Partition: item.Partition || undefinedPartition, - uid: `["${item.Partition || undefinedPartition}","${item.Namespace || - undefinedNspace}","${dc}","${item.Name}"]`, + uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.Name}"]`, + meta: { + cacheControl: undefined, + cursor: undefined, + dc: dc, + nspace: item.Namespace || undefinedNspace, + }, }); - }); - }) - ); - } - ); - }); - skip(`findBySlug returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) { - return repo( - 'AuthMethod', - 'findBySlug', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/acl/auth-method/${id}?dc=${dc}${ - typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` - }` - ); - }, - function performTest(service) { - return service.findBySlug(id, dc, nspace || undefinedNspace); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - const item = payload; - return Object.assign({}, item, { - Datacenter: dc, - Namespace: item.Namespace || undefinedNspace, - uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.Name}"]`, - meta: { - cacheControl: undefined, - cursor: undefined, - dc: dc, - nspace: item.Namespace || undefinedNspace, - }, - }); - }) - ); - } - ); + }) + ); + } + ); + }); }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/coordinate-test.js b/ui/packages/consul-ui/tests/integration/services/repository/coordinate-test.js index de96343c2..1e19a84ca 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/coordinate-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/coordinate-test.js @@ -1,68 +1,74 @@ -import { moduleFor, test } from 'ember-qunit'; +import { setupTest } from 'ember-qunit'; +import { module, test } from 'qunit'; import repo from 'consul-ui/tests/helpers/repo'; import { get } from '@ember/object'; -const NAME = 'coordinate'; -moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { - // Specify the other units that are required for this test. - integration: true, -}); const dc = 'dc-1'; const nspace = 'default'; const partition = 'default'; const now = new Date().getTime(); -test('findAllByDatacenter returns the correct data for list endpoint', function(assert) { - get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { - return now; - }; - return repo( - 'Coordinate', - 'findAllByDatacenter', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/coordinate/nodes?dc=${dc}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }`, - { - CONSUL_NODE_COUNT: '100', - } +module(`Integration | Service | coordinate`, function(hooks) { + setupTest(hooks); + + test('findAllByDatacenter returns the correct data for list endpoint', function(assert) { + const subject = this.owner.lookup('service:repository/coordinate'); + + get(subject, 'store').serializerFor('coordinate').timestamp = function() { + return now; + }; + return repo( + 'Coordinate', + 'findAllByDatacenter', + subject, + function retrieveStub(stub) { + return stub( + `/v1/coordinate/nodes?dc=${dc}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }`, + { + CONSUL_NODE_COUNT: '100', + } + ); + }, + function performTest(service) { + return service.findAllByDatacenter({ dc, partition }); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + return payload.map(item => + Object.assign({}, item, { + SyncTime: now, + Datacenter: dc, + Partition: partition, + // TODO: nspace isn't required here, once we've + // refactored out our Serializer this can go + uid: `["${partition}","${nspace}","${dc}","${item.Node}"]`, + }) + ); + }) + ); + } + ); + }); + test('findAllByNode calls findAllByDatacenter with the correct arguments', function(assert) { + assert.expect(3); + const datacenter = 'dc-1'; + const conf = { + cursor: 1, + }; + const service = this.owner.lookup('service:repository/coordinate'); + service.findAllByDatacenter = function(params, configuration) { + assert.equal( + arguments.length, + 2, + 'Expected to be called with the correct number of arguments' ); - }, - function performTest(service) { - return service.findAllByDatacenter({ dc, partition }); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - return payload.map(item => - Object.assign({}, item, { - SyncTime: now, - Datacenter: dc, - Partition: partition, - // TODO: nspace isn't required here, once we've - // refactored out our Serializer this can go - uid: `["${partition}","${nspace}","${dc}","${item.Node}"]`, - }) - ); - }) - ); - } - ); -}); -test('findAllByNode calls findAllByDatacenter with the correct arguments', function(assert) { - assert.expect(3); - const datacenter = 'dc-1'; - const conf = { - cursor: 1, - }; - const service = this.subject(); - service.findAllByDatacenter = function(params, configuration) { - assert.equal(arguments.length, 2, 'Expected to be called with the correct number of arguments'); - assert.equal(params.dc, datacenter); - assert.deepEqual(configuration, conf); - return Promise.resolve([]); - }; - return service.findAllByNode({ node: 'node-name', dc: datacenter }, conf); + assert.equal(params.dc, datacenter); + assert.deepEqual(configuration, conf); + return Promise.resolve([]); + }; + return service.findAllByNode({ node: 'node-name', dc: datacenter }, conf); + }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/dc-test.js b/ui/packages/consul-ui/tests/integration/services/repository/dc-test.js index a491c98e0..6763d54be 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/dc-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/dc-test.js @@ -1,30 +1,31 @@ -import { moduleFor } from 'ember-qunit'; -import { skip } from 'qunit'; +import { setupTest } from 'ember-qunit'; +import { module, skip } from 'qunit'; import repo from 'consul-ui/tests/helpers/repo'; -const NAME = 'dc'; -moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { - // Specify the other units that are required for this test. - integration: true, -}); -skip("findBySlug (doesn't interact with the API) but still needs an int test"); -skip('findAll returns the correct data for list endpoint', function(assert) { - return repo( - 'Dc', - 'findAll', - this.subject(), - function retrieveStub(stub) { - return stub(`/v1/catalog/datacenters`, { - CONSUL_DATACENTER_COUNT: '100', - }); - }, - function performTest(service) { - return service.findAll(); - }, - function performAssertion(actual, expected) { - actual.forEach((item, i) => { - assert.equal(actual[i].Name, item.Name); - assert.equal(item.Local, i === 0); - }); - } - ); + +module(`Integration | Service | dc`, function(hooks) { + setupTest(hooks); + skip("findBySlug (doesn't interact with the API) but still needs an int test"); + skip('findAll returns the correct data for list endpoint', function(assert) { + const subject = this.owner.lookup('service:repository/dc'); + + return repo( + 'Dc', + 'findAll', + subject, + function retrieveStub(stub) { + return stub(`/v1/catalog/datacenters`, { + CONSUL_DATACENTER_COUNT: '100', + }); + }, + function performTest(service) { + return service.findAll(); + }, + function performAssertion(actual, expected) { + actual.forEach((item, i) => { + assert.equal(actual[i].Name, item.Name); + assert.equal(item.Local, i === 0); + }); + } + ); + }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/discovery-chain-test.js b/ui/packages/consul-ui/tests/integration/services/repository/discovery-chain-test.js index b289fd75c..e7d3da2ba 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/discovery-chain-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/discovery-chain-test.js @@ -1,42 +1,42 @@ -import { moduleFor, test } from 'ember-qunit'; +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; import repo from 'consul-ui/tests/helpers/repo'; -moduleFor('service:repository/discovery-chain', 'Integration | Service | discovery-chain', { - // Specify the other units that are required for this test. - integration: true, -}); -const dc = 'dc-1'; -const id = 'slug'; -test('findBySlug returns the correct data for item endpoint', function(assert) { - return repo( - 'Service', - 'findBySlug', - this.subject(), - function retrieveStub(stub) { - return stub(`/v1/discovery-chain/${id}?dc=${dc}`, { - CONSUL_DISCOVERY_CHAIN_COUNT: 1, - }); - }, - function performTest(service) { - return service.findBySlug({ id, dc }); - }, - function performAssertion(actual, expected) { - const result = expected(function(payload) { - return Object.assign( - {}, - { - Datacenter: dc, - uid: `["default","default","${dc}","${id}"]`, - meta: { - cacheControl: undefined, - cursor: undefined, +module('Integration | Service | discovery-chain', function(hooks) { + setupTest(hooks); + const dc = 'dc-1'; + const id = 'slug'; + test('findBySlug returns the correct data for item endpoint', function(assert) { + return repo( + 'Service', + 'findBySlug', + this.owner.lookup('service:repository/discovery-chain'), + function retrieveStub(stub) { + return stub(`/v1/discovery-chain/${id}?dc=${dc}`, { + CONSUL_DISCOVERY_CHAIN_COUNT: 1, + }); + }, + function performTest(service) { + return service.findBySlug({ id, dc }); + }, + function performAssertion(actual, expected) { + const result = expected(function(payload) { + return Object.assign( + {}, + { + Datacenter: dc, + uid: `["default","default","${dc}","${id}"]`, + meta: { + cacheControl: undefined, + cursor: undefined, + }, }, - }, - payload - ); - }); - assert.equal(actual.Datacenter, result.Datacenter); - assert.equal(actual.uid, result.uid); - } - ); + payload + ); + }); + assert.equal(actual.Datacenter, result.Datacenter); + assert.equal(actual.uid, result.uid); + } + ); + }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/kv-test.js b/ui/packages/consul-ui/tests/integration/services/repository/kv-test.js index ee7f5a085..bde99eb3f 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/kv-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/kv-test.js @@ -1,90 +1,97 @@ -import { moduleFor, test } from 'ember-qunit'; +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; import repo from 'consul-ui/tests/helpers/repo'; import { env } from '../../../../env'; import { get } from '@ember/object'; -const NAME = 'kv'; -moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { - // Specify the other units that are required for this test. - integration: true, -}); -const dc = 'dc-1'; -const id = 'key-name'; -const now = new Date().getTime(); -const undefinedNspace = 'default'; -const undefinedPartition = 'default'; -const partition = 'default'; -[undefinedNspace, 'team-1', undefined].forEach(nspace => { - test(`findAllBySlug returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { - get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { - return now; - }; - return repo( - 'Kv', - 'findAllBySlug', - this.subject(), - function retrieveTest(stub) { - return stub( - `/v1/kv/${id}?keys&dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }`, - { - CONSUL_KV_COUNT: '1', - } - ); - }, - function performTest(service) { - return service.findAllBySlug({ - id, - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - const expectedNspace = env('CONSUL_NSPACES_ENABLED') - ? nspace || undefinedNspace - : 'default'; - const expectedPartition = env('CONSUL_PARTITIONS_ENABLED') - ? partition || undefinedPartition - : 'default'; - actual.forEach(item => { - assert.equal(item.uid, `["${expectedPartition}","${expectedNspace}","${dc}","${item.Key}"]`); - assert.equal(item.Datacenter, dc); - }); - } - ); - }); - test(`findBySlug returns the correct data for item endpoint when nspace is ${nspace}`, function(assert) { - return repo( - 'Kv', - 'findBySlug', - this.subject(), - function(stub) { - return stub( - `/v1/kv/${id}?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }` - ); - }, - function(service) { - return service.findBySlug({ - id, - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function(actual, expected) { - expected( - function(payload) { +module(`Integration | Service | kv`, function(hooks) { + setupTest(hooks); + const dc = 'dc-1'; + const id = 'key-name'; + const now = new Date().getTime(); + const undefinedNspace = 'default'; + const undefinedPartition = 'default'; + const partition = 'default'; + [undefinedNspace, 'team-1', undefined].forEach(nspace => { + test(`findAllBySlug returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/kv'); + + get(subject, 'store').serializerFor('kv').timestamp = function() { + return now; + }; + return repo( + 'Kv', + 'findAllBySlug', + subject, + function retrieveTest(stub) { + return stub( + `/v1/kv/${id}?keys&dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }`, + { + CONSUL_KV_COUNT: '1', + } + ); + }, + function performTest(service) { + return service.findAllBySlug({ + id, + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + const expectedNspace = env('CONSUL_NSPACES_ENABLED') + ? nspace || undefinedNspace + : 'default'; + const expectedPartition = env('CONSUL_PARTITIONS_ENABLED') + ? partition || undefinedPartition + : 'default'; + actual.forEach(item => { + assert.equal( + item.uid, + `["${expectedPartition}","${expectedNspace}","${dc}","${item.Key}"]` + ); + assert.equal(item.Datacenter, dc); + }); + } + ); + }); + test(`findBySlug returns the correct data for item endpoint when nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/kv'); + + return repo( + 'Kv', + 'findBySlug', + subject, + function(stub) { + return stub( + `/v1/kv/${id}?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }` + ); + }, + function(service) { + return service.findBySlug({ + id, + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function(actual, expected) { + expected(function(payload) { const item = payload[0]; - assert.equal(actual.uid, `["${item.Partition || undefinedPartition}","${item.Namespace || - undefinedNspace}","${dc}","${item.Key}"]`); + assert.equal( + actual.uid, + `["${item.Partition || undefinedPartition}","${item.Namespace || + undefinedNspace}","${dc}","${item.Key}"]` + ); assert.equal(actual.Datacenter, dc); - } - ); - } - ); + }); + } + ); + }); }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/node-test.js b/ui/packages/consul-ui/tests/integration/services/repository/node-test.js index 0735c57d6..2e43465cc 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/node-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/node-test.js @@ -1,64 +1,67 @@ -import { moduleFor, test } from 'ember-qunit'; +import { setupTest } from 'ember-qunit'; +import { module, test } from 'qunit'; import repo from 'consul-ui/tests/helpers/repo'; import { get } from '@ember/object'; -const NAME = 'node'; -moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { - // Specify the other units that are required for this test. - integration: true, -}); const dc = 'dc-1'; const id = 'token-name'; const now = new Date().getTime(); const nspace = 'default'; const partition = 'default'; -test('findByDatacenter returns the correct data for list endpoint', function(assert) { - get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { - return now; - }; - return repo( - 'Node', - 'findAllByDatacenter', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/internal/ui/nodes?dc=${dc}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }`, - { - CONSUL_NODE_COUNT: '100', - } - ); - }, - function performTest(service) { - return service.findAllByDatacenter({ dc, partition }); - }, - function performAssertion(actual, expected) { - actual.forEach(item => { - assert.equal(item.uid, `["${partition}","${nspace}","${dc}","${item.ID}"]`); - assert.equal(item.Datacenter, dc); - }); - } - ); -}); -test('findBySlug returns the correct data for item endpoint', function(assert) { - return repo( - 'Node', - 'findBySlug', - this.subject(), - function(stub) { - return stub( - `/v1/internal/ui/node/${id}?dc=${dc}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }` - ); - }, - function(service) { - return service.findBySlug({ id, dc, partition }); - }, - function(actual, expected) { - assert.equal(actual.uid, `["${partition}","${nspace}","${dc}","${actual.ID}"]`); - assert.equal(actual.Datacenter, dc); - } - ); +module(`Integration | Service | node`, function(hooks) { + setupTest(hooks); + + test('findByDatacenter returns the correct data for list endpoint', function(assert) { + const subject = this.owner.lookup('service:repository/node'); + get(subject, 'store').serializerFor('node').timestamp = function() { + return now; + }; + return repo( + 'Node', + 'findAllByDatacenter', + subject, + function retrieveStub(stub) { + return stub( + `/v1/internal/ui/nodes?dc=${dc}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }`, + { + CONSUL_NODE_COUNT: '100', + } + ); + }, + function performTest(service) { + return service.findAllByDatacenter({ dc, partition }); + }, + function performAssertion(actual, expected) { + actual.forEach(item => { + assert.equal(item.uid, `["${partition}","${nspace}","${dc}","${item.ID}"]`); + assert.equal(item.Datacenter, dc); + }); + } + ); + }); + test('findBySlug returns the correct data for item endpoint', function(assert) { + const subject = this.owner.lookup('service:repository/node'); + + return repo( + 'Node', + 'findBySlug', + subject, + function(stub) { + return stub( + `/v1/internal/ui/node/${id}?dc=${dc}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }` + ); + }, + function(service) { + return service.findBySlug({ id, dc, partition }); + }, + function(actual, expected) { + assert.equal(actual.uid, `["${partition}","${nspace}","${dc}","${actual.ID}"]`); + assert.equal(actual.Datacenter, dc); + } + ); + }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/policy-test.js b/ui/packages/consul-ui/tests/integration/services/repository/policy-test.js index b7fe07ed1..662ff8715 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/policy-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/policy-test.js @@ -1,92 +1,95 @@ -import { moduleFor, test, skip } from 'ember-qunit'; +import { module, skip, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; import { get } from '@ember/object'; import repo from 'consul-ui/tests/helpers/repo'; -const NAME = 'policy'; -moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { - // Specify the other units that are required for this test. - integration: true, -}); -skip('translate returns the correct data for the translate endpoint'); -const now = new Date().getTime(); -const dc = 'dc-1'; -const id = 'policy-name'; -const undefinedNspace = 'default'; -const undefinedPartition = 'default'; -const partition = 'default'; -[undefinedNspace, 'team-1', undefined].forEach(nspace => { - test(`findByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { - get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { - return now; - }; - return repo( - 'Policy', - 'findAllByDatacenter', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/acl/policies?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }`, - { - CONSUL_POLICY_COUNT: '10', - } - ); - }, - function performTest(service) { - return service.findAllByDatacenter({ - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - return payload.map(item => - Object.assign({}, item, { - SyncTime: now, - Datacenter: dc, - Namespace: item.Namespace || undefinedNspace, - Partition: item.Partition || undefinedPartition, - uid: `["${item.Partition || undefinedPartition}","${item.Namespace || - undefinedNspace}","${dc}","${item.ID}"]`, - }) - ); - }) - ); - } - ); - }); - test(`findBySlug returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) { - return repo( - 'Policy', - 'findBySlug', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/acl/policy/${id}?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }` - ); - }, - function performTest(service) { - return service.findBySlug({ - id, - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - assert.equal( - actual.uid, - `["${partition || undefinedPartition}","${nspace || undefinedNspace}","${dc}","${ - actual.ID - }"]` - ); - assert.equal(actual.Datacenter, dc); - } - ); + +module(`Integration | Service | policy`, function(hooks) { + setupTest(hooks); + skip('translate returns the correct data for the translate endpoint'); + const now = new Date().getTime(); + const dc = 'dc-1'; + const id = 'policy-name'; + const undefinedNspace = 'default'; + const undefinedPartition = 'default'; + const partition = 'default'; + [undefinedNspace, 'team-1', undefined].forEach(nspace => { + test(`findByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/policy'); + + get(subject, 'store').serializerFor('policy').timestamp = function() { + return now; + }; + return repo( + 'Policy', + 'findAllByDatacenter', + subject, + function retrieveStub(stub) { + return stub( + `/v1/acl/policies?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }`, + { + CONSUL_POLICY_COUNT: '10', + } + ); + }, + function performTest(service) { + return service.findAllByDatacenter({ + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + return payload.map(item => + Object.assign({}, item, { + SyncTime: now, + Datacenter: dc, + Namespace: item.Namespace || undefinedNspace, + Partition: item.Partition || undefinedPartition, + uid: `["${item.Partition || undefinedPartition}","${item.Namespace || + undefinedNspace}","${dc}","${item.ID}"]`, + }) + ); + }) + ); + } + ); + }); + test(`findBySlug returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/policy'); + return repo( + 'Policy', + 'findBySlug', + subject, + function retrieveStub(stub) { + return stub( + `/v1/acl/policy/${id}?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }` + ); + }, + function performTest(service) { + return service.findBySlug({ + id, + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + assert.equal( + actual.uid, + `["${partition || undefinedPartition}","${nspace || undefinedNspace}","${dc}","${ + actual.ID + }"]` + ); + assert.equal(actual.Datacenter, dc); + } + ); + }); }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/role-test.js b/ui/packages/consul-ui/tests/integration/services/repository/role-test.js index 474eeaf65..9241b4323 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/role-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/role-test.js @@ -1,102 +1,105 @@ -import { moduleFor, test, skip } from 'ember-qunit'; +import { module, skip, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; import { get } from '@ember/object'; import repo from 'consul-ui/tests/helpers/repo'; import { createPolicies } from 'consul-ui/tests/helpers/normalizers'; -const NAME = 'role'; -moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { - // Specify the other units that are required for this test. - integration: true, -}); -const now = new Date().getTime(); -const dc = 'dc-1'; -const id = 'role-name'; -const undefinedNspace = 'default'; -const undefinedPartition = 'default'; -const partition = 'default'; -[undefinedNspace, 'team-1', undefined].forEach(nspace => { - test(`findByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { - get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { - return now; - }; - return repo( - 'Role', - 'findAllByDatacenter', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/acl/roles?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }`, - { - CONSUL_ROLE_COUNT: '100', - } - ); - }, - function performTest(service) { - return service.findAllByDatacenter({ - dc: dc, - nspace: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - return payload.map(item => - Object.assign({}, item, { - SyncTime: now, +module(`Integration | Service | role`, function(hooks) { + setupTest(hooks); + const now = new Date().getTime(); + const dc = 'dc-1'; + const id = 'role-name'; + const undefinedNspace = 'default'; + const undefinedPartition = 'default'; + const partition = 'default'; + [undefinedNspace, 'team-1', undefined].forEach(nspace => { + test(`findByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/role'); + + get(subject, 'store').serializerFor('role').timestamp = function() { + return now; + }; + return repo( + 'Role', + 'findAllByDatacenter', + subject, + function retrieveStub(stub) { + return stub( + `/v1/acl/roles?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }`, + { + CONSUL_ROLE_COUNT: '100', + } + ); + }, + function performTest(service) { + return service.findAllByDatacenter({ + dc: dc, + nspace: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + return payload.map(item => + Object.assign({}, item, { + SyncTime: now, + Datacenter: dc, + Namespace: item.Namespace || undefinedNspace, + Partition: item.Partition || undefinedPartition, + uid: `["${item.Partition || undefinedPartition}","${item.Namespace || + undefinedNspace}","${dc}","${item.ID}"]`, + Policies: createPolicies(item), + }) + ); + }) + ); + } + ); + }); + // FIXME: For some reason this tries to initialize the metrics service? + skip(`findBySlug returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/role'); + + return repo( + 'Role', + 'findBySlug', + subject, + function retrieveStub(stub) { + return stub( + `/v1/acl/role/${id}?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }` + ); + }, + function performTest(service) { + return service.findBySlug({ + id, + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + const item = payload; + return Object.assign({}, item, { Datacenter: dc, Namespace: item.Namespace || undefinedNspace, Partition: item.Partition || undefinedPartition, - uid: `["${item.Partition || undefinedPartition}","${item.Namespace || + uid: `["${partition || undefinedPartition}","${item.Namespace || undefinedNspace}","${dc}","${item.ID}"]`, Policies: createPolicies(item), - }) - ); - }) - ); - } - ); - }); - // FIXME: For some reason this tries to initialize the metrics service? - skip(`findBySlug returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) { - return repo( - 'Role', - 'findBySlug', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/acl/role/${id}?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }` - ); - }, - function performTest(service) { - return service.findBySlug({ - id, - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - const item = payload; - return Object.assign({}, item, { - Datacenter: dc, - Namespace: item.Namespace || undefinedNspace, - Partition: item.Partition || undefinedPartition, - uid: `["${partition || undefinedPartition}","${item.Namespace || - undefinedNspace}","${dc}","${item.ID}"]`, - Policies: createPolicies(item), - }); - }) - ); - } - ); + }); + }) + ); + } + ); + }); }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/service-test.js b/ui/packages/consul-ui/tests/integration/services/repository/service-test.js index 77b7cf92f..40174005f 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/service-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/service-test.js @@ -1,69 +1,70 @@ -import { moduleFor, test } from 'ember-qunit'; +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; import repo from 'consul-ui/tests/helpers/repo'; import { get } from '@ember/object'; -const NAME = 'service'; -moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { - // Specify the other units that are required for this test. - integration: true, -}); -const dc = 'dc-1'; -const now = new Date().getTime(); -const undefinedNspace = 'default'; -const undefinedPartition = 'default'; -const partition = 'default'; -[undefinedNspace, 'team-1', undefined].forEach(nspace => { - test(`findGatewayBySlug returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { - get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { - return now; - }; - const gateway = 'gateway'; - const conf = { - cursor: 1, - }; - return repo( - 'Service', - 'findGatewayBySlug', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/internal/ui/gateway-services-nodes/${gateway}?dc=${dc}${ - typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` - }${typeof partition !== 'undefined' ? `&partition=${partition}` : ``}`, - { - CONSUL_SERVICE_COUNT: '100', - } - ); - }, - function performTest(service) { - return service.findGatewayBySlug( - { - gateway, - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }, - conf - ); - }, - function performAssertion(actual, expected) { - const result = expected(function(payload) { - return payload.map(item => - Object.assign({}, item, { - SyncTime: now, - Datacenter: dc, - Namespace: item.Namespace || undefinedNspace, - Partition: item.Partition || undefinedPartition, - uid: `["${item.Partition || undefinedPartition}","${item.Namespace || - undefinedNspace}","${dc}","${item.Name}"]`, - }) + +module(`Integration | Service | service`, function(hooks) { + setupTest(hooks); + const dc = 'dc-1'; + const now = new Date().getTime(); + const undefinedNspace = 'default'; + const undefinedPartition = 'default'; + const partition = 'default'; + [undefinedNspace, 'team-1', undefined].forEach(nspace => { + test(`findGatewayBySlug returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/service'); + get(subject, 'store').serializerFor('service').timestamp = function() { + return now; + }; + const gateway = 'gateway'; + const conf = { + cursor: 1, + }; + return repo( + 'Service', + 'findGatewayBySlug', + subject, + function retrieveStub(stub) { + return stub( + `/v1/internal/ui/gateway-services-nodes/${gateway}?dc=${dc}${ + typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` + }${typeof partition !== 'undefined' ? `&partition=${partition}` : ``}`, + { + CONSUL_SERVICE_COUNT: '100', + } ); - }); - assert.equal(actual[0].SyncTime, result[0].SyncTime); - assert.equal(actual[0].Datacenter, result[0].Datacenter); - assert.equal(actual[0].Namespace, result[0].Namespace); - assert.equal(actual[0].Partition, result[0].Partition); - assert.equal(actual[0].uid, result[0].uid); - } - ); + }, + function performTest(service) { + return service.findGatewayBySlug( + { + gateway, + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }, + conf + ); + }, + function performAssertion(actual, expected) { + const result = expected(function(payload) { + return payload.map(item => + Object.assign({}, item, { + SyncTime: now, + Datacenter: dc, + Namespace: item.Namespace || undefinedNspace, + Partition: item.Partition || undefinedPartition, + uid: `["${item.Partition || undefinedPartition}","${item.Namespace || + undefinedNspace}","${dc}","${item.Name}"]`, + }) + ); + }); + assert.equal(actual[0].SyncTime, result[0].SyncTime); + assert.equal(actual[0].Datacenter, result[0].Datacenter); + assert.equal(actual[0].Namespace, result[0].Namespace); + assert.equal(actual[0].Partition, result[0].Partition); + assert.equal(actual[0].uid, result[0].uid); + } + ); + }); }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/session-test.js b/ui/packages/consul-ui/tests/integration/services/repository/session-test.js index c99742fbe..eee607e1b 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/session-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/session-test.js @@ -1,99 +1,102 @@ -import { moduleFor, test } from 'ember-qunit'; +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; import repo from 'consul-ui/tests/helpers/repo'; import { get } from '@ember/object'; -const NAME = 'session'; -moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { - // Specify the other units that are required for this test. - integration: true, -}); -const dc = 'dc-1'; -const id = 'node-name'; -const now = new Date().getTime(); -const undefinedNspace = 'default'; -const undefinedPartition = 'default'; -const partition = 'default'; -[undefinedNspace, 'team-1', undefined].forEach(nspace => { - test(`findByNode returns the correct data for list endpoint when the nspace is ${nspace}`, function(assert) { - get(this.subject(), 'store').serializerFor(NAME).timestamp = function() { - return now; - }; - return repo( - 'Session', - 'findByNode', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/session/node/${id}?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }`, - { - CONSUL_SESSION_COUNT: '100', - } - ); - }, - function performTest(service) { - return service.findByNode({ - id, - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - return payload.map(item => - Object.assign({}, item, { - SyncTime: now, +module(`Integration | Service | session`, function(hooks) { + setupTest(hooks); + + const dc = 'dc-1'; + const id = 'node-name'; + const now = new Date().getTime(); + const undefinedNspace = 'default'; + const undefinedPartition = 'default'; + const partition = 'default'; + [undefinedNspace, 'team-1', undefined].forEach(nspace => { + test(`findByNode returns the correct data for list endpoint when the nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/session'); + + get(subject, 'store').serializerFor('session').timestamp = function() { + return now; + }; + return repo( + 'Session', + 'findByNode', + subject, + function retrieveStub(stub) { + return stub( + `/v1/session/node/${id}?dc=${dc}${ + typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` + }${typeof partition !== 'undefined' ? `&partition=${partition}` : ``}`, + { + CONSUL_SESSION_COUNT: '100', + } + ); + }, + function performTest(service) { + return service.findByNode({ + id, + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + return payload.map(item => + Object.assign({}, item, { + SyncTime: now, + Datacenter: dc, + Namespace: item.Namespace || undefinedNspace, + Partition: item.Partition || undefinedPartition, + uid: `["${item.Partition || undefinedPartition}","${item.Namespace || + undefinedNspace}","${dc}","${item.ID}"]`, + }) + ); + }) + ); + } + ); + }); + test(`findByKey returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/session'); + return repo( + 'Session', + 'findByKey', + subject, + function(stub) { + return stub( + `/v1/session/info/${id}?dc=${dc}${ + typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` + }${typeof partition !== 'undefined' ? `&partition=${partition}` : ``}` + ); + }, + function(service) { + return service.findByKey({ + id, + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + const item = payload[0]; + return Object.assign({}, item, { Datacenter: dc, Namespace: item.Namespace || undefinedNspace, Partition: item.Partition || undefinedPartition, uid: `["${item.Partition || undefinedPartition}","${item.Namespace || undefinedNspace}","${dc}","${item.ID}"]`, - }) - ); - }) - ); - } - ); - }); - test(`findByKey returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) { - return repo( - 'Session', - 'findByKey', - this.subject(), - function(stub) { - return stub( - `/v1/session/info/${id}?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }` - ); - }, - function(service) { - return service.findByKey({ - id, - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - const item = payload[0]; - return Object.assign({}, item, { - Datacenter: dc, - Namespace: item.Namespace || undefinedNspace, - Partition: item.Partition || undefinedPartition, - uid: `["${item.Partition || undefinedPartition}","${item.Namespace || - undefinedNspace}","${dc}","${item.ID}"]`, - }); - }) - ); - } - ); + }); + }) + ); + } + ); + }); }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/token-test.js b/ui/packages/consul-ui/tests/integration/services/repository/token-test.js index 2142f031b..2af8d73d7 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/token-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/token-test.js @@ -1,181 +1,184 @@ -import { moduleFor, test, skip } from 'ember-qunit'; +import { module, skip, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; import repo from 'consul-ui/tests/helpers/repo'; import { createPolicies } from 'consul-ui/tests/helpers/normalizers'; -const NAME = 'token'; -moduleFor(`service:repository/${NAME}`, `Integration | Service | ${NAME}`, { - // Specify the other units that are required for this test. - integration: true, -}); -skip('clone returns the correct data for the clone endpoint'); -const dc = 'dc-1'; -const id = 'token-id'; -const undefinedNspace = 'default'; -const undefinedPartition = 'default'; -const partition = 'default'; -[undefinedNspace, 'team-1', undefined].forEach(nspace => { - test(`findByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { - return repo( - 'Token', - 'findAllByDatacenter', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/acl/tokens?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }`, - { - CONSUL_TOKEN_COUNT: '100', - } - ); - }, - function performTest(service) { - return service.findAllByDatacenter({ - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - return payload.map(function(item) { - return Object.assign({}, item, { - Datacenter: dc, - CreateTime: new Date(item.CreateTime), - Namespace: item.Namespace || undefinedNspace, - Partition: item.Partition || undefinedPartition, - uid: `["${item.Partition || undefinedPartition}","${item.Namespace || - undefinedNspace}","${dc}","${item.AccessorID}"]`, - Policies: createPolicies(item), - }); - }); - }) - ); - } - ); - }); - test(`findBySlug returns the correct data for item endpoint when nspace is ${nspace}`, function(assert) { - return repo( - 'Token', - 'findBySlug', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/acl/token/${id}?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ - typeof partition !== 'undefined' ? `&partition=${partition}` : `` - }` - ); - }, - function performTest(service) { - return service.findBySlug({ - id, - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - expected(function(item) { - assert.equal( - actual.uid, - `["${partition || undefinedPartition}","${nspace || undefinedNspace}","${dc}","${ - item.AccessorID - }"]` +module(`Integration | Service | token`, function(hooks) { + setupTest(hooks); + skip('clone returns the correct data for the clone endpoint'); + const dc = 'dc-1'; + const id = 'token-id'; + const undefinedNspace = 'default'; + const undefinedPartition = 'default'; + const partition = 'default'; + [undefinedNspace, 'team-1', undefined].forEach(nspace => { + test(`findByDatacenter returns the correct data for list endpoint when nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/token'); + return repo( + 'Token', + 'findAllByDatacenter', + subject, + function retrieveStub(stub) { + return stub( + `/v1/acl/tokens?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }`, + { + CONSUL_TOKEN_COUNT: '100', + } ); - assert.equal(actual.Datacenter, dc); - assert.deepEqual(actual.Policies, createPolicies(item)); - }); - } - ); - }); - test(`findByPolicy returns the correct data when nspace is ${nspace}`, function(assert) { - const policy = 'policy-1'; - return repo( - 'Token', - 'findByPolicy', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/acl/tokens?dc=${dc}&policy=${policy}${ - typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` - }${typeof partition !== 'undefined' ? `&partition=${partition}` : ``}`, - { - CONSUL_TOKEN_COUNT: '100', - } - ); - }, - function performTest(service) { - return service.findByPolicy({ - id: policy, - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - return payload.map(function(item) { - return Object.assign({}, item, { - Datacenter: dc, - CreateTime: new Date(item.CreateTime), - Namespace: item.Namespace || undefinedNspace, - Partition: item.Partition || undefinedPartition, - uid: `["${item.Partition || undefinedPartition}","${item.Namespace || - undefinedNspace}","${dc}","${item.AccessorID}"]`, - Policies: createPolicies(item), + }, + function performTest(service) { + return service.findAllByDatacenter({ + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + return payload.map(function(item) { + return Object.assign({}, item, { + Datacenter: dc, + CreateTime: new Date(item.CreateTime), + Namespace: item.Namespace || undefinedNspace, + Partition: item.Partition || undefinedPartition, + uid: `["${item.Partition || undefinedPartition}","${item.Namespace || + undefinedNspace}","${dc}","${item.AccessorID}"]`, + Policies: createPolicies(item), + }); }); - }); - }) - ); - } - ); - }); - test(`findByRole returns the correct data when nspace is ${nspace}`, function(assert) { - const role = 'role-1'; - return repo( - 'Token', - 'findByPolicy', - this.subject(), - function retrieveStub(stub) { - return stub( - `/v1/acl/tokens?dc=${dc}&role=${role}${ - typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` - }${typeof partition !== 'undefined' ? `&partition=${partition}` : ``}`, - { - CONSUL_TOKEN_COUNT: '100', - } - ); - }, - function performTest(service) { - return service.findByRole({ - id: role, - dc, - ns: nspace || undefinedNspace, - partition: partition || undefinedPartition, - }); - }, - function performAssertion(actual, expected) { - assert.deepEqual( - actual, - expected(function(payload) { - return payload.map(function(item) { - return Object.assign({}, item, { - Datacenter: dc, - CreateTime: new Date(item.CreateTime), - Namespace: item.Namespace || undefinedNspace, - Partition: item.Partition || undefinedPartition, - uid: `["${item.Partition || undefinedPartition}","${item.Namespace || - undefinedNspace}","${dc}","${item.AccessorID}"]`, - Policies: createPolicies(item), + }) + ); + } + ); + }); + test(`findBySlug returns the correct data for item endpoint when nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/token'); + return repo( + 'Token', + 'findBySlug', + subject, + function retrieveStub(stub) { + return stub( + `/v1/acl/token/${id}?dc=${dc}${typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``}${ + typeof partition !== 'undefined' ? `&partition=${partition}` : `` + }` + ); + }, + function performTest(service) { + return service.findBySlug({ + id, + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + expected(function(item) { + assert.equal( + actual.uid, + `["${partition || undefinedPartition}","${nspace || undefinedNspace}","${dc}","${ + item.AccessorID + }"]` + ); + assert.equal(actual.Datacenter, dc); + assert.deepEqual(actual.Policies, createPolicies(item)); + }); + } + ); + }); + test(`findByPolicy returns the correct data when nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/token'); + const policy = 'policy-1'; + return repo( + 'Token', + 'findByPolicy', + subject, + function retrieveStub(stub) { + return stub( + `/v1/acl/tokens?dc=${dc}&policy=${policy}${ + typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` + }${typeof partition !== 'undefined' ? `&partition=${partition}` : ``}`, + { + CONSUL_TOKEN_COUNT: '100', + } + ); + }, + function performTest(service) { + return service.findByPolicy({ + id: policy, + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + return payload.map(function(item) { + return Object.assign({}, item, { + Datacenter: dc, + CreateTime: new Date(item.CreateTime), + Namespace: item.Namespace || undefinedNspace, + Partition: item.Partition || undefinedPartition, + uid: `["${item.Partition || undefinedPartition}","${item.Namespace || + undefinedNspace}","${dc}","${item.AccessorID}"]`, + Policies: createPolicies(item), + }); }); - }); - }) - ); - } - ); + }) + ); + } + ); + }); + test(`findByRole returns the correct data when nspace is ${nspace}`, function(assert) { + const subject = this.owner.lookup('service:repository/token'); + const role = 'role-1'; + return repo( + 'Token', + 'findByPolicy', + subject, + function retrieveStub(stub) { + return stub( + `/v1/acl/tokens?dc=${dc}&role=${role}${ + typeof nspace !== 'undefined' ? `&ns=${nspace}` : `` + }${typeof partition !== 'undefined' ? `&partition=${partition}` : ``}`, + { + CONSUL_TOKEN_COUNT: '100', + } + ); + }, + function performTest(service) { + return service.findByRole({ + id: role, + dc, + ns: nspace || undefinedNspace, + partition: partition || undefinedPartition, + }); + }, + function performAssertion(actual, expected) { + assert.deepEqual( + actual, + expected(function(payload) { + return payload.map(function(item) { + return Object.assign({}, item, { + Datacenter: dc, + CreateTime: new Date(item.CreateTime), + Namespace: item.Namespace || undefinedNspace, + Partition: item.Partition || undefinedPartition, + uid: `["${item.Partition || undefinedPartition}","${item.Namespace || + undefinedNspace}","${dc}","${item.AccessorID}"]`, + Policies: createPolicies(item), + }); + }); + }) + ); + } + ); + }); }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/repository/topology-test.js b/ui/packages/consul-ui/tests/integration/services/repository/topology-test.js index 928da30fc..e42eb5c51 100644 --- a/ui/packages/consul-ui/tests/integration/services/repository/topology-test.js +++ b/ui/packages/consul-ui/tests/integration/services/repository/topology-test.js @@ -1,43 +1,43 @@ -import { moduleFor, test } from 'ember-qunit'; +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; import repo from 'consul-ui/tests/helpers/repo'; -moduleFor('service:repository/topology', 'Integration | Service | topology', { - // Specify the other units that are required for this test. - integration: true, -}); -const dc = 'dc-1'; -const id = 'slug'; -const kind = ''; -test('findBySlug returns the correct data for item endpoint', function(assert) { - return repo( - 'Service', - 'findBySlug', - this.subject(), - function retrieveStub(stub) { - return stub(`/v1/internal/ui/service-topology/${id}?dc=${dc}&${kind}`, { - CONSUL_DISCOVERY_CHAIN_COUNT: 1, - }); - }, - function performTest(service) { - return service.findBySlug({ id, kind, dc }); - }, - function performAssertion(actual, expected) { - const result = expected(function(payload) { - return Object.assign( - {}, - { - Datacenter: dc, - uid: `["default","default","${dc}","${id}"]`, - meta: { - cacheControl: undefined, - cursor: undefined, +module('Integration | Service | topology', function(hooks) { + setupTest(hooks); + const dc = 'dc-1'; + const id = 'slug'; + const kind = ''; + test('findBySlug returns the correct data for item endpoint', function(assert) { + return repo( + 'Service', + 'findBySlug', + this.owner.lookup('service:repository/topology'), + function retrieveStub(stub) { + return stub(`/v1/internal/ui/service-topology/${id}?dc=${dc}&${kind}`, { + CONSUL_DISCOVERY_CHAIN_COUNT: 1, + }); + }, + function performTest(service) { + return service.findBySlug({ id, kind, dc }); + }, + function performAssertion(actual, expected) { + const result = expected(function(payload) { + return Object.assign( + {}, + { + Datacenter: dc, + uid: `["default","default","${dc}","${id}"]`, + meta: { + cacheControl: undefined, + cursor: undefined, + }, }, - }, - payload - ); - }); - assert.equal(actual.Datacenter, result.Datacenter); - assert.equal(actual.uid, result.uid); - } - ); + payload + ); + }); + assert.equal(actual.Datacenter, result.Datacenter); + assert.equal(actual.uid, result.uid); + } + ); + }); }); diff --git a/ui/packages/consul-ui/tests/integration/services/routlet-test.js b/ui/packages/consul-ui/tests/integration/services/routlet-test.js index c0faa5f40..0fd40846e 100644 --- a/ui/packages/consul-ui/tests/integration/services/routlet-test.js +++ b/ui/packages/consul-ui/tests/integration/services/routlet-test.js @@ -1,32 +1,33 @@ -import { moduleFor, test } from 'ember-qunit'; -moduleFor('service:routlet', 'Integration | Routlet', { - // Specify the other units that are required for this test. - integration: true, -}); -test('outletFor works', function(assert) { - const routlet = this.subject(); - routlet.addOutlet('application', { - name: 'application' - }); - routlet.addRoute('dc', {}); - routlet.addOutlet('dc', { - name: 'dc' - }); - routlet.addRoute('dc.services', {}); - routlet.addOutlet('dc.services', { - name: 'dc.services' - }); - routlet.addRoute('dc.services.instances', {}); - - let actual = routlet.outletFor('dc.services'); - let expected = 'dc'; - assert.equal(actual.name, expected); - - actual = routlet.outletFor('dc'); - expected = 'application'; - assert.equal(actual.name, expected); - - actual = routlet.outletFor('application'); - expected = undefined; - assert.equal(actual, expected); +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Integration | Routlet', function(hooks) { + setupTest(hooks); + test('outletFor works', function(assert) { + const routlet = this.owner.lookup('service:routlet'); + routlet.addOutlet('application', { + name: 'application', + }); + routlet.addRoute('dc', {}); + routlet.addOutlet('dc', { + name: 'dc', + }); + routlet.addRoute('dc.services', {}); + routlet.addOutlet('dc.services', { + name: 'dc.services', + }); + routlet.addRoute('dc.services.instances', {}); + + let actual = routlet.outletFor('dc.services'); + let expected = 'dc'; + assert.equal(actual.name, expected); + + actual = routlet.outletFor('dc'); + expected = 'application'; + assert.equal(actual.name, expected); + + actual = routlet.outletFor('application'); + expected = undefined; + assert.equal(actual, expected); + }); }); diff --git a/ui/packages/consul-ui/tests/integration/utils/dom/event-source/callable-test.js b/ui/packages/consul-ui/tests/integration/utils/dom/event-source/callable-test.js index 71d322388..527b1c735 100644 --- a/ui/packages/consul-ui/tests/integration/utils/dom/event-source/callable-test.js +++ b/ui/packages/consul-ui/tests/integration/utils/dom/event-source/callable-test.js @@ -1,16 +1,16 @@ import domEventSourceCallable from 'consul-ui/utils/dom/event-source/callable'; import EventTarget from 'consul-ui/utils/dom/event-target/rsvp'; -import { module, skip } from 'qunit'; +import { module, test, skip } from 'qunit'; import { setupTest } from 'ember-qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import sinon from 'sinon'; module('Integration | Utility | dom/event-source/callable', function(hooks) { setupTest(hooks); test('it dispatches messages', function(assert) { assert.expect(1); const EventSource = domEventSourceCallable(EventTarget); - const listener = this.stub(); + const listener = sinon.stub(); const source = new EventSource( function(configuration) { return new Promise(resolve => { @@ -45,7 +45,7 @@ module('Integration | Utility | dom/event-source/callable', function(hooks) { skip('it dispatches a single open event and closes when called with no callable', function(assert) { assert.expect(4); const EventSource = domEventSourceCallable(EventTarget, Promise); - const listener = this.stub(); + const listener = sinon.stub(); const source = new EventSource(); source.addEventListener('open', function(e) { assert.deepEqual(e.target, this); @@ -60,7 +60,7 @@ module('Integration | Utility | dom/event-source/callable', function(hooks) { test('it dispatches a single open event, and calls the specified callable that can dispatch an event', function(assert) { assert.expect(1); const EventSource = domEventSourceCallable(EventTarget); - const listener = this.stub(); + const listener = sinon.stub(); const source = new EventSource(function() { return new Promise(resolve => { setTimeout(() => { @@ -87,7 +87,7 @@ module('Integration | Utility | dom/event-source/callable', function(hooks) { test("it can be closed before the first tick, and therefore doesn't run", function(assert) { assert.expect(4); const EventSource = domEventSourceCallable(EventTarget); - const listener = this.stub(); + const listener = sinon.stub(); const source = new EventSource(); assert.equal(source.readyState, 0); source.close(); diff --git a/ui/packages/consul-ui/tests/steps/interactions/form.js b/ui/packages/consul-ui/tests/steps/interactions/form.js index 5ac5cc1f0..122aa2488 100644 --- a/ui/packages/consul-ui/tests/steps/interactions/form.js +++ b/ui/packages/consul-ui/tests/steps/interactions/form.js @@ -1,6 +1,6 @@ export default function(scenario, find, fillIn, triggerKeyEvent, currentPage) { const dont = `( don't| shouldn't| can't)?`; - const fillInElement = function(page, name, value) { + const fillInElement = async function(page, name, value) { const cm = document.querySelector(`textarea[name="${name}"] + .CodeMirror`); if (cm) { if (!cm.CodeMirror.options.readOnly) { @@ -11,7 +11,7 @@ export default function(scenario, find, fillIn, triggerKeyEvent, currentPage) { return page; } else { const $el = document.querySelector(`[name="${name}"]`); - fillIn($el, value); + await fillIn($el, value); return page; } }; @@ -57,11 +57,13 @@ export default function(scenario, find, fillIn, triggerKeyEvent, currentPage) { } catch (e) { obj = currentPage(); } - const res = Object.keys(data).reduce(function(prev, item, i, arr) { + const res = Object.keys(data).reduce(async function(prev, item, i, arr) { + await prev; + const name = `${obj.prefix || property}[${item}]`; if (negative) { try { - fillInElement(prev, name, data[item]); + await fillInElement(obj, name, data[item]); throw new TypeError(`${item} is editable`); } catch (e) { if (e instanceof TypeError) { @@ -69,10 +71,9 @@ export default function(scenario, find, fillIn, triggerKeyEvent, currentPage) { } } } else { - return fillInElement(prev, name, data[item]); + return await fillInElement(obj, name, data[item]); } - }, obj); - await new Promise(resolve => setTimeout(resolve, 0)); + }, Promise.resolve()); return res; } ) diff --git a/ui/packages/consul-ui/tests/test-helper.js b/ui/packages/consul-ui/tests/test-helper.js index 58bc7a64a..2d638ea15 100644 --- a/ui/packages/consul-ui/tests/test-helper.js +++ b/ui/packages/consul-ui/tests/test-helper.js @@ -1,9 +1,12 @@ import Application from '../app'; import config from '../config/environment'; +import * as QUnit from 'qunit'; import { setApplication } from '@ember/test-helpers'; +import { setup } from 'qunit-dom'; import { registerWaiter } from '@ember/test'; import './helpers/flash-message'; import start from 'ember-exam/test-support/start'; +import setupSinon from 'ember-sinon-qunit'; import ClientConnections from 'consul-ui/services/client/connections'; @@ -33,6 +36,10 @@ ClientConnections.reopen({ }); const application = Application.create(config.APP); application.inject('component:copy-button', 'clipboard', 'service:clipboard/local-storage'); + setApplication(application); +setup(QUnit.assert); +setupSinon(); + start(); diff --git a/ui/packages/consul-ui/tests/unit/adapters/application-test.js b/ui/packages/consul-ui/tests/unit/adapters/application-test.js index 4c6d52515..b8dc15e8c 100644 --- a/ui/packages/consul-ui/tests/unit/adapters/application-test.js +++ b/ui/packages/consul-ui/tests/unit/adapters/application-test.js @@ -1,5 +1,4 @@ -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; module('Unit | Adapter | application', function(hooks) { diff --git a/ui/packages/consul-ui/tests/unit/mixins/with-blocking-actions-test.js b/ui/packages/consul-ui/tests/unit/mixins/with-blocking-actions-test.js index 436a44dbe..6f72a7887 100644 --- a/ui/packages/consul-ui/tests/unit/mixins/with-blocking-actions-test.js +++ b/ui/packages/consul-ui/tests/unit/mixins/with-blocking-actions-test.js @@ -1,8 +1,8 @@ -import { module, skip } from 'qunit'; +import { module, test, skip } from 'qunit'; import { setupTest } from 'ember-qunit'; -import test from 'ember-sinon-qunit/test-support/test'; import Route from '@ember/routing/route'; import Mixin from 'consul-ui/mixins/with-blocking-actions'; +import sinon from 'sinon'; module('Unit | Mixin | with blocking actions', function(hooks) { setupTest(hooks); @@ -24,7 +24,7 @@ module('Unit | Mixin | with blocking actions', function(hooks) { test('afterCreate just calls afterUpdate', function(assert) { const subject = this.subject(); const expected = [1, 2, 3, 4]; - const afterUpdate = this.stub(subject, 'afterUpdate').returns(expected); + const afterUpdate = sinon.stub(subject, 'afterUpdate').returns(expected); const actual = subject.afterCreate(expected); assert.deepEqual(actual, expected); assert.ok(afterUpdate.calledOnce); @@ -33,7 +33,7 @@ module('Unit | Mixin | with blocking actions', function(hooks) { const subject = this.subject(); const expected = 'dc.kv'; subject.routeName = expected + '.edit'; - const transitionTo = this.stub(subject, 'transitionTo').returnsArg(0); + const transitionTo = sinon.stub(subject, 'transitionTo').returnsArg(0); const actual = subject.afterUpdate(); assert.equal(actual, expected); assert.ok(transitionTo.calledOnce); @@ -42,7 +42,7 @@ module('Unit | Mixin | with blocking actions', function(hooks) { const subject = this.subject(); const expected = 'dc.kv'; subject.routeName = expected + '.edit'; - const transitionTo = this.stub(subject, 'transitionTo').returnsArg(0); + const transitionTo = sinon.stub(subject, 'transitionTo').returnsArg(0); const actual = subject.afterDelete(); assert.equal(actual, expected); assert.ok(transitionTo.calledOnce); @@ -51,7 +51,7 @@ module('Unit | Mixin | with blocking actions', function(hooks) { const subject = this.subject(); subject.routeName = 'dc.kv.index'; const expected = 'refresh'; - const refresh = this.stub(subject, 'refresh').returns(expected); + const refresh = sinon.stub(subject, 'refresh').returns(expected); const actual = subject.afterDelete(); assert.equal(actual, expected); assert.ok(refresh.calledOnce); @@ -67,7 +67,7 @@ module('Unit | Mixin | with blocking actions', function(hooks) { test('action cancel just calls afterUpdate', function(assert) { const subject = this.subject(); const expected = [1, 2, 3, 4]; - const afterUpdate = this.stub(subject, 'afterUpdate').returns(expected); + const afterUpdate = sinon.stub(subject, 'afterUpdate').returns(expected); // TODO: unsure as to whether ember testing should actually bind this for you? const actual = subject.actions.cancel.bind(subject)(expected); assert.deepEqual(actual, expected); diff --git a/ui/packages/consul-ui/tests/unit/routes/dc-test.js b/ui/packages/consul-ui/tests/unit/routes/dc-test.js index 79bc3ca39..b8cba11f2 100644 --- a/ui/packages/consul-ui/tests/unit/routes/dc-test.js +++ b/ui/packages/consul-ui/tests/unit/routes/dc-test.js @@ -1,6 +1,5 @@ -import { module } from 'qunit'; +import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; -import test from 'ember-sinon-qunit/test-support/test'; module('Unit | Route | dc', function(hooks) { setupTest(hooks); diff --git a/ui/packages/consul-ui/tests/unit/serializers/application-test.js b/ui/packages/consul-ui/tests/unit/serializers/application-test.js index d6e69e6fc..19648227d 100644 --- a/ui/packages/consul-ui/tests/unit/serializers/application-test.js +++ b/ui/packages/consul-ui/tests/unit/serializers/application-test.js @@ -1,5 +1,4 @@ -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { HEADERS_SYMBOL as META } from 'consul-ui/utils/http/consul'; diff --git a/ui/packages/consul-ui/tests/unit/serializers/kv-test.js b/ui/packages/consul-ui/tests/unit/serializers/kv-test.js index b1a442172..ed9c00b59 100644 --- a/ui/packages/consul-ui/tests/unit/serializers/kv-test.js +++ b/ui/packages/consul-ui/tests/unit/serializers/kv-test.js @@ -1,8 +1,8 @@ -import { module, skip } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, skip, test } from 'qunit'; import { setupTest } from 'ember-qunit'; import { run } from '@ember/runloop'; import { set } from '@ember/object'; +import sinon from 'sinon'; module('Unit | Serializer | kv', function(hooks) { setupTest(hooks); @@ -101,7 +101,7 @@ module('Unit | Serializer | kv', function(hooks) { test('serialize decodes Value if its a string', function(assert) { const serializer = this.owner.lookup('serializer:kv'); set(serializer, 'decoder', { - execute: this.stub().returnsArg(0), + execute: sinon.stub().returnsArg(0), }); // const expected = 'value'; diff --git a/ui/packages/consul-ui/tests/unit/utils/ascend-test.js b/ui/packages/consul-ui/tests/unit/utils/ascend-test.js index 9d8c9ac7c..9ec0c9afb 100644 --- a/ui/packages/consul-ui/tests/unit/utils/ascend-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/ascend-test.js @@ -1,5 +1,4 @@ -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; import ascend from 'consul-ui/utils/ascend'; module('Unit | Utils | ascend', function() { diff --git a/ui/packages/consul-ui/tests/unit/utils/atob-test.js b/ui/packages/consul-ui/tests/unit/utils/atob-test.js index b84abaec8..10cc764e9 100644 --- a/ui/packages/consul-ui/tests/unit/utils/atob-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/atob-test.js @@ -1,5 +1,4 @@ -import test from 'ember-sinon-qunit/test-support/test'; -import { module, skip } from 'qunit'; +import { module, skip, test } from 'qunit'; import atob from 'consul-ui/utils/atob'; module('Unit | Utils | atob', function() { diff --git a/ui/packages/consul-ui/tests/unit/utils/btoa-test.js b/ui/packages/consul-ui/tests/unit/utils/btoa-test.js index 776a3b57f..1fe10c584 100644 --- a/ui/packages/consul-ui/tests/unit/utils/btoa-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/btoa-test.js @@ -1,5 +1,4 @@ -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; import btoa from 'consul-ui/utils/btoa'; module('Unit | Utils | btoa', function() { diff --git a/ui/packages/consul-ui/tests/unit/utils/dom/closest-test.js b/ui/packages/consul-ui/tests/unit/utils/dom/closest-test.js index 5c72e2177..ccbb2bf95 100644 --- a/ui/packages/consul-ui/tests/unit/utils/dom/closest-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/dom/closest-test.js @@ -1,11 +1,11 @@ import domClosest from 'consul-ui/utils/dom/closest'; -import test from 'ember-sinon-qunit/test-support/test'; -import { module, skip } from 'qunit'; +import { module, skip, test } from 'qunit'; +import sinon from 'sinon'; module('Unit | Utility | dom/closest', function() { test('it calls Element.closest with the specified selector', function(assert) { const el = { - closest: this.stub().returnsArg(0), + closest: sinon.stub().returnsArg(0), }; const expected = 'selector'; const actual = domClosest(expected, el); diff --git a/ui/packages/consul-ui/tests/unit/utils/dom/create-listeners-test.js b/ui/packages/consul-ui/tests/unit/utils/dom/create-listeners-test.js index 9cb2391e8..1297ee362 100644 --- a/ui/packages/consul-ui/tests/unit/utils/dom/create-listeners-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/dom/create-listeners-test.js @@ -1,6 +1,6 @@ import createListeners from 'consul-ui/utils/dom/create-listeners'; -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; +import sinon from 'sinon'; module('Unit | Utility | dom/create listeners', function() { test('it has add and remove methods', function(assert) { @@ -33,7 +33,7 @@ module('Unit | Utility | dom/create listeners', function() { assert.equal(handlers.length, 0); }); test('remove calls the remove functions', function(assert) { - const expected = this.stub(); + const expected = sinon.stub(); const arr = [expected]; const listeners = createListeners(arr); listeners.remove(); @@ -42,7 +42,7 @@ module('Unit | Utility | dom/create listeners', function() { }); test('listeners are added on add', function(assert) { const listeners = createListeners(); - const stub = this.stub(); + const stub = sinon.stub(); const target = { addEventListener: stub, }; @@ -54,8 +54,8 @@ module('Unit | Utility | dom/create listeners', function() { }); test('listeners as objects are added on add and removed on remove', function(assert) { const listeners = createListeners(); - const addStub = this.stub(); - const removeStub = this.stub(); + const addStub = sinon.stub(); + const removeStub = sinon.stub(); const target = { addEventListener: addStub, removeEventListener: removeStub, @@ -77,7 +77,7 @@ module('Unit | Utility | dom/create listeners', function() { }); test('listeners are removed on remove', function(assert) { const listeners = createListeners(); - const stub = this.stub(); + const stub = sinon.stub(); const target = { addEventListener: function() {}, removeEventListener: stub, @@ -91,7 +91,7 @@ module('Unit | Utility | dom/create listeners', function() { }); test('listeners as functions are removed on remove', function(assert) { const listeners = createListeners(); - const stub = this.stub(); + const stub = sinon.stub(); const remove = listeners.add(stub); remove(); assert.ok(stub.calledOnce); @@ -99,7 +99,7 @@ module('Unit | Utility | dom/create listeners', function() { test('listeners as other listeners are removed on remove', function(assert) { const listeners = createListeners(); const listeners2 = createListeners(); - const stub = this.stub(); + const stub = sinon.stub(); listeners2.add(stub); const remove = listeners.add(listeners2); remove(); @@ -108,7 +108,7 @@ module('Unit | Utility | dom/create listeners', function() { test('listeners as functions of other listeners are removed on remove', function(assert) { const listeners = createListeners(); const listeners2 = createListeners(); - const stub = this.stub(); + const stub = sinon.stub(); const remove = listeners.add(listeners2.add(stub)); remove(); assert.ok(stub.calledOnce); @@ -120,7 +120,7 @@ module('Unit | Utility | dom/create listeners', function() { removeEventListener: function() {}, }; const name = 'test'; - const expected = this.stub(); + const expected = sinon.stub(); const remove = listeners.add(target, name, expected); const actual = remove(); actual[0](); diff --git a/ui/packages/consul-ui/tests/unit/utils/dom/event-source/blocking-test.js b/ui/packages/consul-ui/tests/unit/utils/dom/event-source/blocking-test.js index 49d6dac98..e81cf89b8 100644 --- a/ui/packages/consul-ui/tests/unit/utils/dom/event-source/blocking-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/dom/event-source/blocking-test.js @@ -2,8 +2,8 @@ import domEventSourceBlocking, { validateCursor, createErrorBackoff, } from 'consul-ui/utils/dom/event-source/blocking'; -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; +import sinon from 'sinon'; module('Unit | Utility | dom/event-source/blocking', function() { const createEventSource = function() { @@ -74,8 +74,8 @@ module('Unit | Utility | dom/event-source/blocking', function() { { errors: [{ status: '504' }] }, { errors: [{ status: '524' }] }, ].forEach(item => { - const timeout = this.stub().callsArg(0); - const resolve = this.stub().withArgs(item); + const timeout = sinon.stub().callsArg(0); + const resolve = sinon.stub().withArgs(item); const Promise = createPromise(resolve); const backoff = createErrorBackoff(undefined, Promise, timeout); const promise = backoff(item); diff --git a/ui/packages/consul-ui/tests/unit/utils/dom/event-source/cache-test.js b/ui/packages/consul-ui/tests/unit/utils/dom/event-source/cache-test.js index 2a82d59ce..8561479ea 100644 --- a/ui/packages/consul-ui/tests/unit/utils/dom/event-source/cache-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/dom/event-source/cache-test.js @@ -1,6 +1,6 @@ import domEventSourceCache from 'consul-ui/utils/dom/event-source/cache'; -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; +import sinon from 'sinon'; module('Unit | Utility | dom/event-source/cache', function() { const createEventSource = function() { @@ -66,8 +66,8 @@ module('Unit | Utility | dom/event-source/cache', function() { const Promise = createPromise(function() { return stub; }); - const source = this.stub().returns(Promise.resolve()); - const cb = this.stub(); + const source = sinon.stub().returns(Promise.resolve()); + const cb = sinon.stub(); const getCache = domEventSourceCache(source, EventSource, Promise); const obj = {}; const cache = getCache(obj); @@ -92,14 +92,14 @@ module('Unit | Utility | dom/event-source/cache', function() { test('cache creates the default EventSource and keeps it open when there is a cursor', function(assert) { const EventSource = createEventSource(); const stub = { - close: this.stub(), + close: sinon.stub(), configuration: { cursor: 1 }, }; const Promise = createPromise(function() { return stub; }); - const source = this.stub().returns(Promise.resolve()); - const cb = this.stub(); + const source = sinon.stub().returns(Promise.resolve()); + const cb = sinon.stub(); const getCache = domEventSourceCache(source, EventSource, Promise); const obj = {}; const cache = getCache(obj); @@ -120,14 +120,14 @@ module('Unit | Utility | dom/event-source/cache', function() { test("cache creates the default EventSource and closes it when there isn't a cursor", function(assert) { const EventSource = createEventSource(); const stub = { - close: this.stub(), + close: sinon.stub(), configuration: {}, }; const Promise = createPromise(function() { return stub; }); - const source = this.stub().returns(Promise.resolve()); - const cb = this.stub(); + const source = sinon.stub().returns(Promise.resolve()); + const cb = sinon.stub(); const getCache = domEventSourceCache(source, EventSource, Promise); const obj = {}; const cache = getCache(obj); diff --git a/ui/packages/consul-ui/tests/unit/utils/dom/event-source/callable-test.js b/ui/packages/consul-ui/tests/unit/utils/dom/event-source/callable-test.js index 823af58f5..a4b2f9cb1 100644 --- a/ui/packages/consul-ui/tests/unit/utils/dom/event-source/callable-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/dom/event-source/callable-test.js @@ -1,6 +1,6 @@ import domEventSourceCallable, { defaultRunner } from 'consul-ui/utils/dom/event-source/callable'; -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; +import sinon from 'sinon'; module('Unit | Utility | dom/event-source/callable', function() { const createEventTarget = function() { @@ -43,14 +43,14 @@ module('Unit | Utility | dom/event-source/callable', function() { return count === 11; }; const configuration = {}; - const then = this.stub().callsArg(0); + const then = sinon.stub().callsArg(0); const target = { source: function(configuration) { return { then: then, }; }, - dispatchEvent: this.stub(), + dispatchEvent: sinon.stub(), }; defaultRunner(target, configuration, isClosed); assert.ok(then.callCount == 10); @@ -59,7 +59,7 @@ module('Unit | Utility | dom/event-source/callable', function() { test('it calls the defaultRunner', function(assert) { const Promise = createPromise(); const EventTarget = createEventTarget(); - const run = this.stub(); + const run = sinon.stub(); const EventSource = domEventSourceCallable(EventTarget, Promise, run); const source = new EventSource(); assert.ok(run.calledOnce); diff --git a/ui/packages/consul-ui/tests/unit/utils/dom/event-source/openable-test.js b/ui/packages/consul-ui/tests/unit/utils/dom/event-source/openable-test.js index 9ab9dc3d5..16fabfa3d 100644 --- a/ui/packages/consul-ui/tests/unit/utils/dom/event-source/openable-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/dom/event-source/openable-test.js @@ -1,6 +1,6 @@ import domEventSourceOpenable from 'consul-ui/utils/dom/event-source/openable'; -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; +import sinon from 'sinon'; module('Unit | Utility | dom/event-source/openable', function() { const createEventSource = function() { @@ -23,7 +23,7 @@ module('Unit | Utility | dom/event-source/openable', function() { assert.ok(source instanceof EventSource); }); test('it reopens the event source when open is called', function(assert) { - const callable = this.stub(); + const callable = sinon.stub(); const EventSource = createEventSource(); const OpenableEventSource = domEventSourceOpenable(EventSource); const source = new OpenableEventSource(callable); diff --git a/ui/packages/consul-ui/tests/unit/utils/http/create-url-test.js b/ui/packages/consul-ui/tests/unit/utils/http/create-url-test.js index e996bb346..c9ba8eb5f 100644 --- a/ui/packages/consul-ui/tests/unit/utils/http/create-url-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/http/create-url-test.js @@ -1,5 +1,4 @@ -import { module, skip } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, skip, test } from 'qunit'; import createURL from 'consul-ui/utils/http/create-url'; import createQueryParams from 'consul-ui/utils/http/create-query-params'; diff --git a/ui/packages/consul-ui/tests/unit/utils/isFolder-test.js b/ui/packages/consul-ui/tests/unit/utils/isFolder-test.js index ab536257a..a9fab4584 100644 --- a/ui/packages/consul-ui/tests/unit/utils/isFolder-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/isFolder-test.js @@ -1,5 +1,4 @@ -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; import isFolder from 'consul-ui/utils/isFolder'; module('Unit | Utils | isFolder', function() { diff --git a/ui/packages/consul-ui/tests/unit/utils/keyToArray-test.js b/ui/packages/consul-ui/tests/unit/utils/keyToArray-test.js index 5cd33c322..120939cb4 100644 --- a/ui/packages/consul-ui/tests/unit/utils/keyToArray-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/keyToArray-test.js @@ -1,5 +1,4 @@ -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; import keyToArray from 'consul-ui/utils/keyToArray'; module('Unit | Utils | keyToArray', function() { diff --git a/ui/packages/consul-ui/tests/unit/utils/left-trim-test.js b/ui/packages/consul-ui/tests/unit/utils/left-trim-test.js index 3f0f1c31d..9bdefcdf2 100644 --- a/ui/packages/consul-ui/tests/unit/utils/left-trim-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/left-trim-test.js @@ -1,5 +1,4 @@ -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; import leftTrim from 'consul-ui/utils/left-trim'; module('Unit | Utility | left trim', function() { diff --git a/ui/packages/consul-ui/tests/unit/utils/promisedTimeout-test.js b/ui/packages/consul-ui/tests/unit/utils/promisedTimeout-test.js index 7719f6c08..b080f5119 100644 --- a/ui/packages/consul-ui/tests/unit/utils/promisedTimeout-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/promisedTimeout-test.js @@ -1,5 +1,4 @@ -import { module, skip } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, skip, test } from 'qunit'; import promisedTimeout from 'consul-ui/utils/promisedTimeout'; module('Unit | Utils | promisedTimeout', function() { diff --git a/ui/packages/consul-ui/tests/unit/utils/right-trim-test.js b/ui/packages/consul-ui/tests/unit/utils/right-trim-test.js index 6898de8e9..ac988322d 100644 --- a/ui/packages/consul-ui/tests/unit/utils/right-trim-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/right-trim-test.js @@ -1,5 +1,4 @@ -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; import rightTrim from 'consul-ui/utils/right-trim'; module('Unit | Utility | right trim', function() { diff --git a/ui/packages/consul-ui/tests/unit/utils/routing/walk-test.js b/ui/packages/consul-ui/tests/unit/utils/routing/walk-test.js index 9f520e57c..01eb1d487 100644 --- a/ui/packages/consul-ui/tests/unit/utils/routing/walk-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/routing/walk-test.js @@ -1,10 +1,10 @@ import { walk } from 'consul-ui/utils/routing/walk'; -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; +import sinon from 'sinon'; module('Unit | Utility | routing/walk', function() { test('it walks down deep routes', function(assert) { - const route = this.stub(); + const route = sinon.stub(); const Router = { route: function(name, options, cb) { route(); diff --git a/ui/packages/consul-ui/tests/unit/utils/ucfirst-test.js b/ui/packages/consul-ui/tests/unit/utils/ucfirst-test.js index b911ac04f..3c45b51d6 100644 --- a/ui/packages/consul-ui/tests/unit/utils/ucfirst-test.js +++ b/ui/packages/consul-ui/tests/unit/utils/ucfirst-test.js @@ -1,5 +1,4 @@ -import { module } from 'qunit'; -import test from 'ember-sinon-qunit/test-support/test'; +import { module, test } from 'qunit'; import ucfirst from 'consul-ui/utils/ucfirst'; module('Unit | Utils | ucfirst', function() { diff --git a/ui/yarn.lock b/ui/yarn.lock index 1f3f24f35..76bbc42af 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -1948,17 +1948,29 @@ ember-compatibility-helpers "^1.2.5" ember-modifier-manager-polyfill "^1.2.0" -"@ember/test-helpers@^1.7.1": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-1.7.2.tgz#5b128dc5f6524c3850abf52668e6bd4fda401194" - integrity sha512-FEJBpbFNIaWAsCSnataiNwYFvmcpoymL/B7fXLruuJ/46BnJjzLaRPtpUIZ91w4GNTK6knxbHWXW76aVb3Aezg== +"@ember/test-helpers@^2.1.4": + version "2.8.1" + resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-2.8.1.tgz#20f2e30d48172c2ff713e1db7fbec5352f918d4e" + integrity sha512-jbsYwWyAdhL/pdPu7Gb3SG1gvIXY70FWMtC/Us0Kmvk82Y+5YUQ1SOC0io75qmOGYQmH7eQrd/bquEVd+4XtdQ== dependencies: + "@ember/test-waiters" "^3.0.0" + "@embroider/macros" "^1.6.0" + "@embroider/util" "^1.6.0" broccoli-debug "^0.6.5" - broccoli-funnel "^2.0.2" - ember-assign-polyfill "^2.6.0" - ember-cli-babel "^7.7.3" - ember-cli-htmlbars-inline-precompile "^2.1.0" - ember-test-waiters "^1.1.1" + broccoli-funnel "^3.0.8" + ember-cli-babel "^7.26.6" + ember-cli-htmlbars "^5.7.1" + ember-destroyable-polyfill "^2.0.3" + +"@ember/test-waiters@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@ember/test-waiters/-/test-waiters-3.0.2.tgz#5b950c580a1891ed1d4ee64f9c6bacf49a15ea6f" + integrity sha512-H8Q3Xy9rlqhDKnQpwt2pzAYDouww4TZIGSI1pZJhM7mQIGufQKuB0ijzn/yugA6Z+bNdjYp1HioP8Y4hn2zazQ== + dependencies: + calculate-cache-key-for-tree "^2.0.0" + ember-cli-babel "^7.26.6" + ember-cli-version-checker "^5.1.2" + semver "^7.3.5" "@embroider/core@0.33.0", "@embroider/core@^0.33.0": version "0.33.0" @@ -2039,6 +2051,20 @@ resolve "^1.20.0" semver "^7.3.2" +"@embroider/macros@1.8.3", "@embroider/macros@^1.6.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-1.8.3.tgz#2f0961ab8871f6ad819630208031d705b357757e" + integrity sha512-gnIOfTL/pUkoD6oI7JyWOqXlVIUgZM+CnbH10/YNtZr2K0hij9eZQMdgjOZZVgN0rKOFw9dIREqc1ygrJHRYQA== + dependencies: + "@embroider/shared-internals" "1.8.3" + assert-never "^1.2.1" + babel-import-util "^1.1.0" + ember-cli-babel "^7.26.6" + find-up "^5.0.0" + lodash "^4.17.21" + resolve "^1.20.0" + semver "^7.3.2" + "@embroider/shared-internals@0.41.0": version "0.41.0" resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-0.41.0.tgz#2553f026d4f48ea1fd11235501feb63bf49fa306" @@ -2065,6 +2091,20 @@ semver "^7.3.5" typescript-memoize "^1.0.1" +"@embroider/shared-internals@1.8.3", "@embroider/shared-internals@^1.0.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-1.8.3.tgz#52d868dc80016e9fe983552c0e516f437bf9b9f9" + integrity sha512-N5Gho6Qk8z5u+mxLCcMYAoQMbN4MmH+z2jXwQHVs859bxuZTxwF6kKtsybDAASCtd2YGxEmzcc1Ja/wM28824w== + dependencies: + babel-import-util "^1.1.0" + ember-rfc176-data "^0.3.17" + fs-extra "^9.1.0" + js-string-escape "^1.0.1" + lodash "^4.17.21" + resolve-package-path "^4.0.1" + semver "^7.3.5" + typescript-memoize "^1.0.1" + "@embroider/util@^0.39.1 || ^0.40.0 || ^0.41.0": version "0.41.0" resolved "https://registry.yarnpkg.com/@embroider/util/-/util-0.41.0.tgz#5324cb4742aa4ed8d613c4f88a466f73e4e6acc1" @@ -2083,6 +2123,15 @@ broccoli-funnel "^3.0.5" ember-cli-babel "^7.23.1" +"@embroider/util@^1.6.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@embroider/util/-/util-1.8.3.tgz#7267a2b6fcbf3e56712711441159ab373f9bee7a" + integrity sha512-FvsPzsb9rNeveSnIGnsfLkWWBdSM5QIA9lDVtckUktRnRnBWZHm5jDxU/ST//pWMhZ8F0DucRlFWE149MTLtuQ== + dependencies: + "@embroider/macros" "1.8.3" + broccoli-funnel "^3.0.5" + ember-cli-babel "^7.23.1" + "@eslint/eslintrc@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" @@ -3387,6 +3436,11 @@ babel-import-util@^0.2.0: resolved "https://registry.yarnpkg.com/babel-import-util/-/babel-import-util-0.2.0.tgz#b468bb679919601a3570f9e317536c54f2862e23" integrity sha512-CtWYYHU/MgK88rxMrLfkD356dApswtR/kWZ/c6JifG1m10e7tBBrs/366dFzWMAoqYmG5/JSh+94tUSpIwh+ag== +babel-import-util@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/babel-import-util/-/babel-import-util-1.2.2.tgz#1027560e143a4a68b1758e71d4fadc661614e495" + integrity sha512-8HgkHWt5WawRFukO30TuaL9EiDUOdvyKtDwLma4uBNeUSDbOO0/hiPfavrOWxSS6J6TKXfukWHZ3wiqZhJ8ONQ== + babel-loader@^8.0.6, babel-loader@^8.1.0: version "8.2.2" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" @@ -3471,11 +3525,6 @@ babel-plugin-filter-imports@^4.0.0: "@babel/types" "^7.7.2" lodash "^4.17.15" -babel-plugin-htmlbars-inline-precompile@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-1.0.0.tgz#a9d2f6eaad8a3f3d361602de593a8cbef8179c22" - integrity sha512-4jvKEHR1bAX03hBDZ94IXsYCj3bwk9vYsn6ux6JZNL2U5pvzCWjqyrGahfsGNrhERyxw8IqcirOi9Q6WCo3dkQ== - babel-plugin-htmlbars-inline-precompile@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-htmlbars-inline-precompile/-/babel-plugin-htmlbars-inline-precompile-3.2.0.tgz#c4882ea875d0f5683f0d91c1f72e29a4f14b5606" @@ -4427,7 +4476,7 @@ broccoli-funnel@^3.0.1, broccoli-funnel@^3.0.2, broccoli-funnel@^3.0.3: path-posix "^1.0.0" walk-sync "^2.0.2" -broccoli-funnel@^3.0.5: +broccoli-funnel@^3.0.5, broccoli-funnel@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-3.0.8.tgz#f5b62e2763c3918026a15a3c833edc889971279b" integrity sha512-ng4eIhPYiXqMw6SyGoxPHR3YAwEd2lr9FgBI1CyTbspl4txZovOsmzFkMkGAlu88xyvYXJqHiM2crfLa65T1BQ== @@ -5444,10 +5493,10 @@ commander@2.8.x: dependencies: graceful-readlink ">= 1.0.0" -commander@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" - integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== +commander@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== commander@^2.20.0, commander@^2.6.0: version "2.20.3" @@ -5464,7 +5513,7 @@ commander@^6.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -common-tags@^1.4.0, common-tags@^1.8.0: +common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -6292,13 +6341,40 @@ ember-assign-helper@^0.3.0: ember-cli-babel "^7.19.0" ember-cli-htmlbars "^4.3.1" -ember-assign-polyfill@^2.6.0: - version "2.7.2" - resolved "https://registry.yarnpkg.com/ember-assign-polyfill/-/ember-assign-polyfill-2.7.2.tgz#58f6f60235126cb23df248c846008fa9a3245fc1" - integrity sha512-hDSaKIZyFS0WRQsWzxUgO6pJPFfmcpfdM7CbGoMgYGriYbvkKn+k8zTXSKpTFVGehhSmsLE9YPqisQ9QpPisfA== +ember-auto-import@^1.11.3: + version "1.12.2" + resolved "https://registry.yarnpkg.com/ember-auto-import/-/ember-auto-import-1.12.2.tgz#cc7298ee5c0654b0249267de68fb27a2861c3579" + integrity sha512-gLqML2k77AuUiXxWNon1FSzuG1DV7PEPpCLCU5aJvf6fdL6rmFfElsZRh+8ELEB/qP9dT+LHjNEunVzd2dYc8A== dependencies: - ember-cli-babel "^7.20.5" - ember-cli-version-checker "^2.0.0" + "@babel/core" "^7.1.6" + "@babel/preset-env" "^7.10.2" + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.1.6" + "@embroider/shared-internals" "^1.0.0" + babel-core "^6.26.3" + babel-loader "^8.0.6" + babel-plugin-syntax-dynamic-import "^6.18.0" + babylon "^6.18.0" + broccoli-debug "^0.6.4" + broccoli-node-api "^1.7.0" + broccoli-plugin "^4.0.0" + broccoli-source "^3.0.0" + debug "^3.1.0" + ember-cli-babel "^7.0.0" + enhanced-resolve "^4.0.0" + fs-extra "^6.0.1" + fs-tree-diff "^2.0.0" + handlebars "^4.3.1" + js-string-escape "^1.0.1" + lodash "^4.17.19" + mkdirp "^0.5.1" + resolve-package-path "^3.1.0" + rimraf "^2.6.2" + semver "^7.3.4" + symlink-or-copy "^1.2.0" + typescript-memoize "^1.0.0-alpha.3" + walk-sync "^0.3.3" + webpack "^4.43.0" ember-auto-import@^1.5.2, ember-auto-import@^1.5.3, ember-auto-import@^1.6.0: version "1.10.1" @@ -6402,7 +6478,7 @@ ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0, em resolved "https://registry.yarnpkg.com/ember-cli-babel-plugin-helpers/-/ember-cli-babel-plugin-helpers-1.1.1.tgz#5016b80cdef37036c4282eef2d863e1d73576879" integrity sha512-sKvOiPNHr5F/60NLd7SFzMpYPte/nnGkq/tMIfXejfKHIhaiIkYFqX8Z9UFTKWLLn+V7NOaby6niNPZUdvKCRw== -ember-cli-babel@7, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.17.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.23.1, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0: +ember-cli-babel@7, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.17.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.23.1, ember-cli-babel@^7.7.3, ember-cli-babel@^7.8.0: version "7.26.1" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.26.1.tgz#d3f06bd9aec8aac9197c5ff4d0b87ff1e4f0d62a" integrity sha512-WEWP3hJSe9CWL22gEWQ+Y3uKMGk1vLoIREUQfJNKrgUUh3l49bnfAamh3ywcAQz31IgzvkLPO8ZTXO4rxnuP4Q== @@ -6454,7 +6530,7 @@ ember-cli-babel@^6.0.0, ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.11.0, ember-cli-version-checker "^2.1.2" semver "^5.5.0" -ember-cli-babel@^7.26.3, ember-cli-babel@^7.26.5: +ember-cli-babel@^7.13.2, ember-cli-babel@^7.26.3, ember-cli-babel@^7.26.5: version "7.26.11" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.26.11.tgz#50da0fe4dcd99aada499843940fec75076249a9f" integrity sha512-JJYeYjiz/JTn34q7F5DSOjkkZqy8qwFOOxXfE6pe9yEJqWGu4qErKxlz8I22JoVEQ/aBUO+OcKTpmctvykM9YA== @@ -6573,17 +6649,6 @@ ember-cli-get-component-path-option@^1.0.0: resolved "https://registry.yarnpkg.com/ember-cli-get-component-path-option/-/ember-cli-get-component-path-option-1.0.0.tgz#0d7b595559e2f9050abed804f1d8eff1b08bc771" integrity sha1-DXtZVVni+QUKvtgE8djv8bCLx3E= -ember-cli-htmlbars-inline-precompile@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ember-cli-htmlbars-inline-precompile/-/ember-cli-htmlbars-inline-precompile-2.1.0.tgz#61b91ff1879d44ae504cadb46fb1f2604995ae08" - integrity sha512-BylIHduwQkncPhnj0ZyorBuljXbTzLgRo6kuHf1W+IHFxThFl2xG+r87BVwsqx4Mn9MTgW9SE0XWjwBJcSWd6Q== - dependencies: - babel-plugin-htmlbars-inline-precompile "^1.0.0" - ember-cli-version-checker "^2.1.2" - hash-for-dep "^1.2.3" - heimdalljs-logger "^0.1.9" - silent-error "^1.1.0" - ember-cli-htmlbars@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-3.1.0.tgz#87806c2a0bca2ab52d4fb8af8e2215c1ca718a99" @@ -6636,7 +6701,7 @@ ember-cli-htmlbars@^5.0.0, ember-cli-htmlbars@^5.1.0, ember-cli-htmlbars@^5.1.2, strip-bom "^4.0.0" walk-sync "^2.2.0" -ember-cli-htmlbars@^5.3.2: +ember-cli-htmlbars@^5.3.2, ember-cli-htmlbars@^5.7.1: version "5.7.2" resolved "https://registry.yarnpkg.com/ember-cli-htmlbars/-/ember-cli-htmlbars-5.7.2.tgz#e0cd2fb3c20d85fe4c3e228e6f0590ee1c645ba8" integrity sha512-Uj6R+3TtBV5RZoJY14oZn/sNPnc+UgmC8nb5rI4P3fR/gYoyTFIZSXiIM7zl++IpMoIrocxOrgt+mhonKphgGg== @@ -6799,12 +6864,12 @@ ember-cli-test-info@^1.0.0: dependencies: ember-cli-string-utils "^1.0.0" -ember-cli-test-loader@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ember-cli-test-loader/-/ember-cli-test-loader-2.2.0.tgz#3fb8d5d1357e4460d3f0a092f5375e71b6f7c243" - integrity sha512-mlSXX9SciIRwGkFTX6XGyJYp4ry6oCFZRxh5jJ7VH8UXLTNx2ZACtDTwaWtNhYrWXgKyiDUvmD8enD56aePWRA== +ember-cli-test-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ember-cli-test-loader/-/ember-cli-test-loader-3.0.0.tgz#1c036fc48de36155355fcda3266af63f977826f1" + integrity sha512-wfFRBrfO9gaKScYcdQxTfklx9yp1lWK6zv1rZRpkas9z2SHyJojF7NOQRWQgSB3ypm7vfpiF8VsFFVVr7VBzAQ== dependencies: - ember-cli-babel "^6.8.1" + ember-cli-babel "^7.13.2" ember-cli-typescript@3.0.0: version "3.0.0" @@ -6885,7 +6950,7 @@ ember-cli-uglify@^3.0.0: broccoli-uglify-sourcemap "^3.1.0" lodash.defaultsdeep "^4.6.0" -ember-cli-version-checker@^2.0.0, ember-cli-version-checker@^2.1.0, ember-cli-version-checker@^2.1.2: +ember-cli-version-checker@^2.1.0, ember-cli-version-checker@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-2.2.0.tgz#47771b731fe0962705e27c8199a9e3825709f3b3" integrity sha512-G+KtYIVlSOWGcNaTFHk76xR4GdzDLzAS4uxZUKdASuFX0KJE43C6DaqL+y3VTpUFLI2FIkAS6HZ4I1YBi+S3hg== @@ -7135,7 +7200,7 @@ ember-decorators@^6.1.1: "@ember-decorators/object" "^6.1.1" ember-cli-babel "^7.7.3" -ember-destroyable-polyfill@^2.0.2: +ember-destroyable-polyfill@^2.0.2, ember-destroyable-polyfill@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/ember-destroyable-polyfill/-/ember-destroyable-polyfill-2.0.3.tgz#1673ed66609a82268ef270a7d917ebd3647f11e1" integrity sha512-TovtNqCumzyAiW0/OisSkkVK93xnVF4NRU6+FN0ubpfwEOpRrmM2RqDwXI6YAChCgSHON1cz0DfQStpA1Gjuuw== @@ -7403,18 +7468,20 @@ ember-power-select@^4.0.0, ember-power-select@^4.0.5: ember-text-measurer "^0.6.0" ember-truth-helpers "^2.1.0 || ^3.0.0" -ember-qunit@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-4.6.0.tgz#ad79fd3ff00073a8779400cc5a4b44829517590f" - integrity sha512-i5VOGn0RP8XH+5qkYDOZshbqAvO6lHgF65D0gz8vRx4DszCIvJMJO+bbftBTfYMxp6rqG85etAA6pfNxE0DqsQ== +ember-qunit@^5.1.1: + version "5.1.5" + resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-5.1.5.tgz#24a7850f052be24189ff597dfc31b923e684c444" + integrity sha512-2cFA4oMygh43RtVcMaBrr086Tpdhgbn3fVZ2awLkzF/rnSN0D0PSRpd7hAD7OdBPerC/ZYRwzVyGXLoW/Zes4A== dependencies: - "@ember/test-helpers" "^1.7.1" - broccoli-funnel "^2.0.2" + broccoli-funnel "^3.0.8" broccoli-merge-trees "^3.0.2" - common-tags "^1.4.0" - ember-cli-babel "^7.12.0" - ember-cli-test-loader "^2.2.0" - qunit "^2.9.3" + common-tags "^1.8.0" + ember-auto-import "^1.11.3" + ember-cli-babel "^7.26.6" + ember-cli-test-loader "^3.0.0" + resolve-package-path "^3.1.0" + silent-error "^1.1.1" + validate-peer-dependencies "^1.2.0" ember-ref-modifier@^1.0.0: version "1.0.1" @@ -7629,14 +7696,6 @@ ember-test-selectors@^5.0.0: ember-cli-babel "^7.22.1" ember-cli-version-checker "^5.1.1" -ember-test-waiters@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ember-test-waiters/-/ember-test-waiters-1.2.0.tgz#c12ead4313934c24cff41857020cacdbf8e6effe" - integrity sha512-aEw7YuutLuJT4NUuPTNiGFwgTYl23ThqmBxSkfFimQAn+keWjAftykk3dlFELuhsJhYW/S8YoVjN0bSAQRLNtw== - dependencies: - ember-cli-babel "^7.11.0" - semver "^6.3.0" - ember-text-measurer@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/ember-text-measurer/-/ember-text-measurer-0.6.0.tgz#140eda044fd7d4d7f60f654dd30da79c06922b2e" @@ -10290,11 +10349,6 @@ jquery@^3.4.1, jquery@^3.5.0: resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== -js-reporters@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/js-reporters/-/js-reporters-1.2.3.tgz#8febcab370539df62e09b95da133da04b11f6168" - integrity sha512-2YzWkHbbRu6LueEs5ZP3P1LqbECvAeUJYrjw3H4y1ofW06hqCS0AbzBtLwbr+Hke51bt9CUepJ/Fj1hlCRIF6A== - js-string-escape@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" @@ -11734,10 +11788,10 @@ node-releases@^2.0.2: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== -node-watch@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.7.1.tgz#0caaa6a6833b0d533487f953c52a6c787769ba7c" - integrity sha512-UWblPYuZYrkCQCW5PxAwYSxaELNBLUckrTBBk8xr1/bUgyOkYYTsUcV4e3ytcazFEOyiRyiUrsG37pu6I0I05g== +node-watch@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.7.3.tgz#6d4db88e39c8d09d3ea61d6568d80e5975abc7ab" + integrity sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ== nomnom@^1.5.x: version "1.8.1" @@ -12705,7 +12759,7 @@ quick-temp@^0.1.2, quick-temp@^0.1.3, quick-temp@^0.1.5, quick-temp@^0.1.8: rimraf "^2.5.4" underscore.string "~3.3.4" -qunit-dom@^1.0.0: +qunit-dom@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/qunit-dom/-/qunit-dom-1.6.0.tgz#a4bea6a46329d221e4a317d712cb40709107b977" integrity sha512-YwSqcLjQcRI0fUFpaSWwU10KIJPFW5Qh+d3cT5DOgx81dypRuUSiPkKFmBY/CDs/R1KdHRadthkcXg2rqAon8Q== @@ -12715,15 +12769,14 @@ qunit-dom@^1.0.0: ember-cli-babel "^7.23.0" ember-cli-version-checker "^5.1.1" -qunit@^2.9.3: - version "2.14.1" - resolved "https://registry.yarnpkg.com/qunit/-/qunit-2.14.1.tgz#02ba25c108f0845fda411a42b5cbfca0f0319943" - integrity sha512-jtFw8bf8+GjzY8UpnwbjqTOdK/rvrjcafUFTNpRc6/9N4q5dBwcwSMlcC76kAn5BRiSFj5Ssn2dfHtEYvtsXSw== +qunit@^2.13.0: + version "2.19.1" + resolved "https://registry.yarnpkg.com/qunit/-/qunit-2.19.1.tgz#eb1afd188da9e47f07c13aa70461a1d9c4505490" + integrity sha512-gSGuw0vErE/rNjnlBW/JmE7NNubBlGrDPQvsug32ejYhcVFuZec9yoU0+C30+UgeCGwq6Ap89K65dMGo+kDGZQ== dependencies: - commander "7.1.0" - js-reporters "1.2.3" - node-watch "0.7.1" - tiny-glob "0.2.8" + commander "7.2.0" + node-watch "0.7.3" + tiny-glob "0.2.9" raf-pool@~0.1.4: version "0.1.4" @@ -13686,7 +13739,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -silent-error@^1.0.0, silent-error@^1.0.1, silent-error@^1.1.0, silent-error@^1.1.1: +silent-error@^1.0.0, silent-error@^1.0.1, silent-error@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.1.1.tgz#f72af5b0d73682a2ba1778b7e32cd8aa7c2d8662" integrity sha512-n4iEKyNcg4v6/jpb3c0/iyH2G1nzUNl7Gpqtn/mHIJK9S/q/7MCfoO4rwVOoO59qPFIc0hVHvMbiOJ0NdtxKKw== @@ -14531,10 +14584,10 @@ tiny-emitter@^2.0.0: resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== -tiny-glob@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.8.tgz#b2792c396cc62db891ffa161fe8b33e76123e531" - integrity sha512-vkQP7qOslq63XRX9kMswlby99kyO5OvKptw7AMwBVMjXEI7Tb61eoI5DydyEMOseyGS5anDN1VPoVxEvH01q8w== +tiny-glob@0.2.9: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2" + integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg== dependencies: globalyzer "0.1.0" globrex "^0.1.2" @@ -15235,6 +15288,14 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +validate-peer-dependencies@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/validate-peer-dependencies/-/validate-peer-dependencies-1.2.0.tgz#22aab93c514f4fda457d36c80685e8b1160d2036" + integrity sha512-nd2HUpKc6RWblPZQ2GDuI65sxJ2n/UqZwSBVtj64xlWjMx0m7ZB2m9b2JS3v1f+n9VWH/dd1CMhkHfP6pIdckA== + dependencies: + resolve-package-path "^3.1.0" + semver "^7.3.2" + validated-changeset@0.10.0, validated-changeset@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/validated-changeset/-/validated-changeset-0.10.0.tgz#2e8188c089ab282c1b51fba3c289073f6bd14c8b"