open-consul/ui-v2/tests/integration/services/repository/service-test.js
John Cowen 0505ebd04c
ui: Ensure blocking query configuration is passed through to findInstanceBySlug (#7543)
* ui: Ensure configuration is passed through to findInstanceBySlug

Due to the addition of namespace support, this arguments passed to this
method have been increased. Whilst the nspace support continues ot work
here, the configuration for blocking queries is never passed through.
This results in a 2 second poll rather than a blocking query.

This commit fixes that

* ui: Add a basic test to check the number of arguments passed through
2020-03-30 15:23:06 +01:00

133 lines
4.2 KiB
JavaScript

import { moduleFor, test } from 'ember-qunit';
import { skip } from '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,
});
skip('findBySlug returns a sane tree');
const dc = 'dc-1';
const id = 'token-name';
const now = new Date().getTime();
const undefinedNspace = 'default';
[undefinedNspace, 'team-1', undefined].forEach(nspace => {
test(`findInstanceBySlug calls findBySlug with the correct arguments when nspace is ${nspace}`, function(assert) {
assert.expect(4);
const id = 'id';
const slug = 'slug';
const node = 'node-name';
const datacenter = 'dc-1';
const conf = {
cursor: 1,
};
const service = this.subject();
service.findBySlug = function(slug, dc, nspace, configuration) {
assert.equal(
arguments.length,
4,
'Expected to be called with the correct number of arguments'
);
assert.equal(dc, datacenter);
assert.deepEqual(configuration, conf);
return Promise.resolve({ Nodes: [] });
};
// This will throw an error as we don't resolve any services that match what was requested
// so a 404 is the correct error response
return service.findInstanceBySlug(id, slug, node, datacenter, nspace, conf).catch(function(e) {
assert.equal(e.errors[0].status, '404');
});
});
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(
'Service',
'findAllByDatacenter',
this.subject(),
function retrieveStub(stub) {
return stub(
`/v1/internal/ui/services?dc=${dc}${
typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``
}`,
{
CONSUL_SERVICE_COUNT: '100',
}
);
},
function performTest(service) {
return service.findAllByDatacenter(dc, nspace || undefinedNspace);
},
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,
uid: `["${item.Namespace || undefinedNspace}","${dc}","${item.Name}"]`,
})
);
})
);
}
);
});
test(`findBySlug returns the correct data for item endpoint when the nspace is ${nspace}`, function(assert) {
return repo(
'Service',
'findBySlug',
this.subject(),
function(stub) {
return stub(
`/v1/health/service/${id}?dc=${dc}${
typeof nspace !== 'undefined' ? `&ns=${nspace}` : ``
}`,
{
CONSUL_NODE_COUNT: 1,
}
);
},
function(service) {
return service.findBySlug(id, dc, nspace || undefinedNspace);
},
function(actual, expected) {
assert.deepEqual(
actual,
expected(function(payload) {
// TODO: So this tree is all 'wrong', it's not having any major impact
// this this tree needs revisting to something that makes more sense
payload = Object.assign(
{},
{ Nodes: payload },
{
Datacenter: dc,
Namespace: payload[0].Service.Namespace || undefinedNspace,
uid: `["${payload[0].Service.Namespace || undefinedNspace}","${dc}","${id}"]`,
}
);
const nodes = payload.Nodes;
const service = payload.Nodes[0];
service.Nodes = nodes;
service.Tags = [...new Set(payload.Nodes[0].Service.Tags)];
service.Namespace = payload.Namespace;
service.meta = {
cursor: undefined,
dc: dc,
nspace: payload.Namespace,
};
return service;
})
);
}
);
});
});