open-consul/ui/packages/consul-ui/tests/unit/serializers/kv-test.js
John Cowen eeb04ae436
ui: Partitions Application Layer (#11017)
* Add Partition to all our models

* Add partitions into our serializers/fingerprinting

* Make some amends to a few adapters ready for partitions

* Amend blueprints to avoid linting error

* Update all  our repositories to include partitions, also

Remove enabled/disable nspace repo and just use a nspace with
conditionals

* Ensure nspace and parition parameters always return '' no matter what

* Ensure data-sink finds the model properly

This will later be replaced by a @dataSink decorator but we are find
kicking that can down the road a little more

* Add all the new partition data layer

* Add a way to set the title of the page from inside the route

and make it accessibile via a route announcer

* Make the Consul Route the default/basic one

* Tweak nspace and partition abilities not to check the length

* Thread partition through all the components that need it

* Some ACL tweaks

* Move the entire app to use partitions

* Delete all the tests we no longer need

* Update some Unit tests to use partition

* Fix up KV title tests

* Fix up a few more acceptance tests

* Fixup and temporarily ignore some acceptance tests

* Stop using ember-cli-page-objects fillable as it doesn't seem to work

* Fix lint error

* Remove old ACL related test

* Add a tick after filling out forms

* Fix token warning modal

* Found some more places where we need a partition var

* Fixup some more acceptance tests

* Tokens still needs a repo service for CRUD

* Remove acceptance tests we no longer need

* Fixup and "FIXME ignore" a few tests

* Remove an s

* Disable blocking queries for KV to revert to previous release for now

* Fixup adapter tests to follow async/function resolving interface

* Fixup all the serializer integration tests

* Fixup service/repo integration tests

* Fixup deleting acceptance test

* Fixup some ent tests

* Make sure nspaces passes the dc through for when thats important

* ...aaaand acceptance nspaces with the extra dc param
2021-09-15 19:50:11 +01:00

119 lines
3.5 KiB
JavaScript

import { module, skip } from 'qunit';
import test from 'ember-sinon-qunit/test-support/test';
import { setupTest } from 'ember-qunit';
import { run } from '@ember/runloop';
import { set } from '@ember/object';
module('Unit | Serializer | kv', function(hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('it exists', function(assert) {
const store = this.owner.lookup('service:store');
const serializer = store.serializerFor('kv');
assert.ok(serializer);
});
// TODO: Would undefined be better instead of null?
test("it serializes records that aren't strings to null", function(assert) {
const store = this.owner.lookup('service:store');
const record = run(() => store.createRecord('kv', {}));
const serializedRecord = record.serialize();
// anything but a string ends up as null
assert.equal(serializedRecord, null);
});
skip(
'what should respondForCreate/UpdateRecord return when createRecord is called with a `false` payload'
);
test('respondForCreate/UpdateRecord returns a KV uid object when receiving a `true` payload', function(assert) {
const uid = 'key/name';
const dc = 'dc1';
const nspace = 'default';
const partition = 'default';
const expected = {
uid: JSON.stringify([partition, nspace, dc, uid]),
Key: uid,
Namespace: nspace,
Partition: partition,
Datacenter: dc,
};
const serializer = this.owner.lookup('serializer:kv');
serializer.primaryKey = 'uid';
serializer.slugKey = 'Key';
['respondForCreateRecord', 'respondForUpdateRecord'].forEach(function(item) {
const actual = serializer[item](
function(cb) {
const headers = {
'X-Consul-Namespace': nspace,
};
const body = true;
return cb(headers, body);
},
{},
{
Key: uid,
Datacenter: dc,
Partition: partition,
}
);
assert.deepEqual(actual, expected);
});
});
test("respondForCreate/UpdateRecord returns the original object if it's not a Boolean", function(assert) {
const uid = 'key/name';
const dc = 'dc1';
const nspace = 'default';
const partition = 'default';
const expected = {
uid: JSON.stringify([partition, nspace, dc, uid]),
Key: uid,
Partition: partition,
Namespace: nspace,
Datacenter: dc,
};
const serializer = this.owner.lookup('serializer:kv');
serializer.primaryKey = 'uid';
serializer.slugKey = 'Key';
['respondForCreateRecord'].forEach(function(item) {
const actual = serializer[item](
function(cb) {
const headers = {
'X-Consul-Namespace': nspace,
'X-Consul-Partition': partition,
};
const body = {
Key: uid,
Datacenter: dc,
};
return cb(headers, body);
},
{},
{
Key: uid,
Datacenter: dc,
Partition: partition,
}
);
assert.deepEqual(actual, expected);
});
});
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),
});
//
const expected = 'value';
const snapshot = {
attr: function(prop) {
return expected;
},
};
const options = {};
const actual = serializer.serialize(snapshot, options);
assert.equal(actual, expected);
assert.ok(serializer.decoder.execute.calledOnce);
});
});