mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-22 23:21:08 +02:00
88 lines
2.8 KiB
JavaScript
88 lines
2.8 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import { module, test } from 'qunit';
|
|
import { setupTest } from 'vault/tests/helpers';
|
|
import { setupMirage } from 'ember-cli-mirage/test-support';
|
|
|
|
module('Unit | Serializer | sync | association', function (hooks) {
|
|
setupTest(hooks);
|
|
setupMirage(hooks);
|
|
|
|
hooks.beforeEach(function () {
|
|
this.serializer = this.owner.lookup('serializer:sync/association');
|
|
});
|
|
|
|
test('it normalizes query payload from the server', async function (assert) {
|
|
const updated_at = '2023-09-20T10:51:53.961861096-04:00';
|
|
const destinationName = 'us-west-1';
|
|
const destinationType = 'aws-sm';
|
|
const associations = [
|
|
{ mount: 'foo', secret_name: 'bar', sync_status: 'SYNCED', updated_at },
|
|
{ mount: 'test', secret_name: 'my-secret', sync_status: 'UNSYNCED', updated_at },
|
|
];
|
|
const payload = {
|
|
data: {
|
|
associated_secrets: {
|
|
'foo_12345/bar': associations[0],
|
|
'test_12345/my-secret': associations[1],
|
|
},
|
|
store_name: destinationName,
|
|
store_type: destinationType,
|
|
},
|
|
};
|
|
const expected = [
|
|
{ id: 'foo/bar', destinationName, destinationType, ...associations[0] },
|
|
{ id: 'test/my-secret', destinationName, destinationType, ...associations[1] },
|
|
];
|
|
const normalized = this.serializer.extractLazyPaginatedData(payload);
|
|
|
|
assert.deepEqual(normalized, expected, 'lazy paginated data is extracted from payload');
|
|
});
|
|
|
|
test('it should normalize response for fetchByDestinations request', async function (assert) {
|
|
const payload = {
|
|
data: {
|
|
associated_secrets: {
|
|
'foo_12345/bar': {
|
|
mount: 'foo',
|
|
secret_name: 'bar',
|
|
sync_status: 'SYNCED',
|
|
updated_at: '2023-09-20T10:51:53.961861096-04:00',
|
|
},
|
|
'bar_12345/baz': {
|
|
mount: 'bar',
|
|
secret_name: 'baz',
|
|
sync_status: 'UNSYNCED',
|
|
updated_at: '2023-11-30T14:51:53.961861096-04:00',
|
|
},
|
|
},
|
|
store_name: 'us-west-1',
|
|
store_type: 'aws-sm',
|
|
},
|
|
};
|
|
const expected = {
|
|
icon: 'aws-color',
|
|
name: 'us-west-1',
|
|
type: 'aws-sm',
|
|
associationCount: 2,
|
|
status: '1 Unsynced',
|
|
lastUpdated: new Date(payload.data.associated_secrets['bar_12345/baz'].updated_at),
|
|
};
|
|
let normalized = this.serializer.normalizeFetchByDestinations(payload);
|
|
|
|
assert.deepEqual(normalized, expected, 'Response is normalized from fetchByDestinations request');
|
|
|
|
payload.data.associated_secrets['bar_12345/baz'].sync_status = 'SYNCED';
|
|
normalized = this.serializer.normalizeFetchByDestinations(payload);
|
|
|
|
assert.strictEqual(
|
|
normalized.status,
|
|
'All synced',
|
|
'Correct status is set when all associations are synced'
|
|
);
|
|
});
|
|
});
|