Merge pull request #4319 from hashicorp/b-ui-errant-acl-error
UI: XHR keys need to include the method as well
This commit is contained in:
commit
52e6c1e551
|
@ -47,11 +47,12 @@ export default Watchable.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
xhrKey(url, method, options = {}) {
|
xhrKey(url, method, options = {}) {
|
||||||
|
const plainKey = this._super(...arguments);
|
||||||
const namespace = options.data && options.data.namespace;
|
const namespace = options.data && options.data.namespace;
|
||||||
if (namespace) {
|
if (namespace) {
|
||||||
return `${url}?namespace=${namespace}`;
|
return `${plainKey}?namespace=${namespace}`;
|
||||||
}
|
}
|
||||||
return url;
|
return plainKey;
|
||||||
},
|
},
|
||||||
|
|
||||||
relationshipFallbackLinks: {
|
relationshipFallbackLinks: {
|
||||||
|
|
|
@ -51,8 +51,8 @@ export default ApplicationAdapter.extend({
|
||||||
return ajaxOptions;
|
return ajaxOptions;
|
||||||
},
|
},
|
||||||
|
|
||||||
xhrKey(url /* method, options */) {
|
xhrKey(url, method /* options */) {
|
||||||
return url;
|
return `${method} ${url}`;
|
||||||
},
|
},
|
||||||
|
|
||||||
findAll(store, type, sinceToken, snapshotRecordArray, additionalParams = {}) {
|
findAll(store, type, sinceToken, snapshotRecordArray, additionalParams = {}) {
|
||||||
|
@ -149,7 +149,7 @@ export default ApplicationAdapter.extend({
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const url = this.urlForFindRecord(id, modelName);
|
const url = this.urlForFindRecord(id, modelName);
|
||||||
this.get('xhrs').cancel(url);
|
this.get('xhrs').cancel(`GET ${url}`);
|
||||||
},
|
},
|
||||||
|
|
||||||
cancelFindAll(modelName) {
|
cancelFindAll(modelName) {
|
||||||
|
@ -161,7 +161,7 @@ export default ApplicationAdapter.extend({
|
||||||
if (params) {
|
if (params) {
|
||||||
url = `${url}?${params}`;
|
url = `${url}?${params}`;
|
||||||
}
|
}
|
||||||
this.get('xhrs').cancel(url);
|
this.get('xhrs').cancel(`GET ${url}`);
|
||||||
},
|
},
|
||||||
|
|
||||||
cancelReloadRelationship(model, relationshipName) {
|
cancelReloadRelationship(model, relationshipName) {
|
||||||
|
@ -175,7 +175,7 @@ export default ApplicationAdapter.extend({
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
const url = model[relationship.kind](relationship.key).link();
|
const url = model[relationship.kind](relationship.key).link();
|
||||||
this.get('xhrs').cancel(url);
|
this.get('xhrs').cancel(`GET ${url}`);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import EmberObject from '@ember/object';
|
||||||
import { run } from '@ember/runloop';
|
import { run } from '@ember/runloop';
|
||||||
import { assign } from '@ember/polyfills';
|
import { assign } from '@ember/polyfills';
|
||||||
import { test } from 'ember-qunit';
|
import { test } from 'ember-qunit';
|
||||||
|
@ -10,8 +11,12 @@ moduleForAdapter('job', 'Unit | Adapter | Job', {
|
||||||
'adapter:job',
|
'adapter:job',
|
||||||
'service:token',
|
'service:token',
|
||||||
'service:system',
|
'service:system',
|
||||||
'model:namespace',
|
'model:allocation',
|
||||||
|
'model:deployment',
|
||||||
|
'model:evaluation',
|
||||||
'model:job-summary',
|
'model:job-summary',
|
||||||
|
'model:job-version',
|
||||||
|
'model:namespace',
|
||||||
'adapter:application',
|
'adapter:application',
|
||||||
'service:watchList',
|
'service:watchList',
|
||||||
],
|
],
|
||||||
|
@ -292,6 +297,36 @@ test('requests can be canceled even if multiple requests for the same URL were m
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('canceling a find record request will never cancel a request with the same url but different method', function(assert) {
|
||||||
|
const { pretender } = this.server;
|
||||||
|
const jobId = JSON.stringify(['job-1', 'default']);
|
||||||
|
|
||||||
|
pretender.get('/v1/job/:id', () => [200, {}, '{}'], true);
|
||||||
|
pretender.delete('/v1/job/:id', () => [204, {}, ''], 200);
|
||||||
|
|
||||||
|
this.subject().findRecord(null, { modelName: 'job' }, jobId, {
|
||||||
|
reload: true,
|
||||||
|
adapterOptions: { watch: true },
|
||||||
|
});
|
||||||
|
|
||||||
|
this.subject().stop(EmberObject.create({ id: jobId }));
|
||||||
|
|
||||||
|
const { request: getXHR } = pretender.requestReferences[0];
|
||||||
|
const { request: deleteXHR } = pretender.requestReferences[1];
|
||||||
|
assert.equal(getXHR.status, 0, 'Get request is still pending');
|
||||||
|
assert.equal(deleteXHR.status, 0, 'Delete request is still pending');
|
||||||
|
|
||||||
|
// Schedule the cancelation before waiting
|
||||||
|
run.next(() => {
|
||||||
|
this.subject().cancelFindRecord('job', jobId);
|
||||||
|
});
|
||||||
|
|
||||||
|
return wait().then(() => {
|
||||||
|
assert.ok(getXHR.aborted, 'Get request was aborted');
|
||||||
|
assert.notOk(deleteXHR.aborted, 'Delete request was aborted');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
function makeMockModel(id, options) {
|
function makeMockModel(id, options) {
|
||||||
return assign(
|
return assign(
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue