style: format addons/api

This commit is contained in:
Susmitha Girumala committed 2020-09-16 14:29:02 -04:00
1 parent e2610d6a90
commit ec870acba8
62 files changed
+590 -521

No files matched your search

+3 -4
View File
@@ -35,13 +35,12 @@ function payloadIsBlank(adapterPayload) {
* @return {object}
*/
function prenormalizeArrayResponse(response) {
return payloadIsBlank(response) ? {items: []} : response;
return payloadIsBlank(response) ? { items: [] } : response;
}
export default class ApplicationAdapter extends RESTAdapter.extend(
AdapterBuildURLMixin
) {
// =attributes
/**
@@ -68,7 +67,7 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
* @param {object} snapshot
* @return {string}
*/
urlSuffix(modelName, id, snapshot={}) {
urlSuffix(modelName, id, snapshot = {}) {
const method = getWithDefault(snapshot, 'adapterOptions.method', '');
return method ? `:${method}` : '';
}
@@ -205,7 +204,7 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
normalizeErrorResponse(/*status, headers, payload*/) {
const errors = super.normalizeErrorResponse(...arguments);
if (isArray(errors)) {
errors.forEach(error => {
errors.forEach((error) => {
switch (Number(error.status)) {
case 401:
error.isUnauthenticated = true;
+6 -6
View File
@@ -2,19 +2,20 @@ import BaseModel from '../../models/base';
import { attr } from '@ember-data/model';
/**
* Account contains all fields related to an account resource
* Account contains all fields related to an account resource
*/
export default class GeneratedAccountModel extends BaseModel {
// =attributes
@attr('string', {
description: 'The type of the resource, to help differentiate schemas'
}) type;
description: 'The type of the resource, to help differentiate schemas',
})
type;
@attr('string', {
description: 'The owning auth method ID.',
}) auth_method_id;
})
auth_method_id;
@attr('string', {
description: 'Optional name for identification purposes',
@@ -42,5 +43,4 @@ export default class GeneratedAccountModel extends BaseModel {
description: 'Current version number of this resource.',
})
version;
}
@@ -5,12 +5,12 @@ import { attr } from '@ember-data/model';
*
*/
export default class GeneratedAuthMethodModel extends BaseModel {
// =attributes
@attr('string', {
description: 'The type of the resource, to help differentiate schemas'
}) type;
description: 'The type of the resource, to help differentiate schemas',
})
type;
@attr('string', {
description: 'Optional name for identification purposes',
@@ -43,5 +43,4 @@ export default class GeneratedAuthMethodModel extends BaseModel {
description: 'Current version number of this resource.',
})
version;
}
+1 -2
View File
@@ -3,7 +3,7 @@ import { attr } from '@ember-data/model';
/**
* Group contains all fields related to a Group resource
*/
*/
export default class GeneratedGroupModel extends BaseModel {
// = attributes
@@ -38,5 +38,4 @@ export default class GeneratedGroupModel extends BaseModel {
description: 'Current version number of this resource.',
})
version;
}
@@ -5,42 +5,47 @@ import { attr } from '@ember-data/model';
* HostCatalog manages Hosts and HostSets
*/
export default class GeneratedHostCatalogModel extends BaseModel {
// =attributes
@attr('string', {
description: 'The type of the resource, to help differentiate schemas'
}) type;
description: 'The type of the resource, to help differentiate schemas',
})
type;
@attr('string', {
description: 'Optional name for identification purposes'
}) name;
description: 'Optional name for identification purposes',
})
name;
@attr('string', {
description: 'Optional user-set description for identification purposes'
}) description;
description: 'Optional user-set description for identification purposes',
})
description;
@attr('date', {
description: 'The time this resource was created\nOutput only.',
readOnly: true
}) created_time;
readOnly: true,
})
created_time;
@attr('date', {
description: 'The time this resource was last updated\nOutput only.',
readOnly: true
}) updated_time;
readOnly: true,
})
updated_time;
@attr('boolean', {
description: 'Whether the catalog is disabled'
}) disabled;
description: 'Whether the catalog is disabled',
})
disabled;
@attr({
description: 'Attributes specific to the catalog type'
}) attributes;
description: 'Attributes specific to the catalog type',
})
attributes;
@attr('number', {
description: 'Current version number of this resource.',
})
version;
}
+20 -15
View File
@@ -5,35 +5,40 @@ import { attr } from '@ember-data/model';
* HostSet is a collection of Hosts created and managed by a HostCatalog
*/
export default class GeneratedHostSetModel extends BaseModel {
// =attributes
@attr('string', {
description: 'The type of the resource, to help differentiate schemas',
readOnly: true
}) type;
readOnly: true,
})
type;
@attr('string', {
description: 'The owning host catalog ID.',
}) host_catalog_id;
})
host_catalog_id;
@attr('string', {
description: 'Optional name for identification purposes'
}) name;
description: 'Optional name for identification purposes',
})
name;
@attr('string', {
description: 'Optional user-set description for identification purposes'
}) description;
description: 'Optional user-set description for identification purposes',
})
description;
@attr('date', {
description: 'The time this resource was created\nOutput only.',
readOnly: true
}) created_time;
readOnly: true,
})
created_time;
@attr('date', {
description: 'The time this resource was last updated\nOutput only.',
readOnly: true
}) updated_time;
readOnly: true,
})
updated_time;
@attr('number', {
description: 'Current version number of this resource.',
@@ -42,7 +47,7 @@ export default class GeneratedHostSetModel extends BaseModel {
@attr('number', {
description: 'The total count of hosts in this host set\nOutput only.',
readOnly: true
}) size;
readOnly: true,
})
size;
}
+17 -13
View File
@@ -5,38 +5,42 @@ import { attr } from '@ember-data/model';
* Host contains all fields related to a Host resource
*/
export default class GeneratedHostModel extends BaseModel {
// =attributes
@attr('string', {
description: 'The type of the resource, to help differentiate schemas'
}) type;
description: 'The type of the resource, to help differentiate schemas',
})
type;
@attr('string', {
description: 'The owning host catalog ID.',
}) host_catalog_id;
})
host_catalog_id;
@attr('string', {
description: 'Optional name for identification purposes'
}) name;
description: 'Optional name for identification purposes',
})
name;
@attr('string', {
description: 'Optional user-set description for identification purposes'
}) description;
description: 'Optional user-set description for identification purposes',
})
description;
@attr('date', {
description: 'The time this resource was created\nOutput only.',
readOnly: true
}) created_time;
readOnly: true,
})
created_time;
@attr('date', {
description: 'The time this resource was last updated\nOutput only.',
readOnly: true
}) updated_time;
readOnly: true,
})
updated_time;
@attr('number', {
description: 'Current version number of this resource.',
})
version;
}
@@ -38,5 +38,4 @@ export default class GeneratedRoleModel extends BaseModel {
description: 'Current version number of this resource.',
})
version;
}
+3 -4
View File
@@ -5,12 +5,12 @@ import { attr } from '@ember-data/model';
*
*/
export default class GeneratedScopeModel extends BaseModel {
// =attributes
@attr('string', {
description: 'The type of the resource'
}) type;
description: 'The type of the resource',
})
type;
@attr('string', {
description: 'Optional name for identification purposes',
@@ -38,5 +38,4 @@ export default class GeneratedScopeModel extends BaseModel {
description: 'Current version number of this resource.',
})
version;
}
+18 -13
View File
@@ -5,34 +5,39 @@ import { attr } from '@ember-data/model';
* Target
*/
export default class GeneratedTargetModel extends BaseModel {
// =attributes
@attr('string', {
description: 'The type of the resource, to help differentiate schemas'
}) type;
description: 'The type of the resource, to help differentiate schemas',
})
type;
@attr('string', {
description: 'Optional name for identification purposes'
}) name;
description: 'Optional name for identification purposes',
})
name;
@attr('string', {
description: 'Optional user-set description for identification purposes'
}) description;
description: 'Optional user-set description for identification purposes',
})
description;
@attr('date', {
description: 'The time this resource was created\nOutput only.',
readOnly: true
}) created_time;
readOnly: true,
})
created_time;
@attr('date', {
description: 'The time this resource was last updated\nOutput only.',
readOnly: true
}) updated_time;
readOnly: true,
})
updated_time;
@attr('boolean', {
description: 'Whether the catalog is disabled'
}) disabled;
description: 'Whether the catalog is disabled',
})
disabled;
@attr('number', {
description: 'Current version number of this resource.',
+1 -1
View File
@@ -3,7 +3,7 @@ import { attr } from '@ember-data/model';
/**
* User contains all fields related to a user resource
*/
*/
export default class GeneratedUserModel extends BaseModel {
// =attributes
+1 -3
View File
@@ -13,7 +13,6 @@ import { get } from '@ember/object';
* uses this mixin to alter generated URLs.
*/
export default Mixin.create({
// =methods
/**
@@ -162,6 +161,5 @@ export default Mixin.create({
*/
urlForDeleteRecord(id, modelName, snapshot) {
return this._buildURL(modelName, id, snapshot);
}
},
});
+4 -6
View File
@@ -2,7 +2,6 @@ import GeneratedAccountModel from '../generated/models/account';
import { fragment } from 'ember-data-model-fragments/attributes';
export default class AccountModel extends GeneratedAccountModel {
/**
* Attributes of this resource, if any, represented as a JSON fragment.
* @type {FragmentAccountAttributesModel}
@@ -19,18 +18,17 @@ export default class AccountModel extends GeneratedAccountModel {
* @param {object} options.adapterOptions
* @return {Promise}
*/
setPassword(password, options={ adapterOptions: {} }) {
setPassword(password, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'set-password',
password
password,
};
return this.save({
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions
}
...options.adapterOptions,
},
});
}
}
-2
View File
@@ -26,7 +26,6 @@ import { get } from '@ember/object';
* 2) Or as an ID: `record.scopeID`.
*/
export default class BaseModel extends Model {
// =relationships
/**
@@ -83,5 +82,4 @@ export default class BaseModel extends Model {
get cannotSave() {
return !this.canSave;
}
}
@@ -2,9 +2,8 @@ import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentAccountAttributesModel extends Fragment {
@attr('string', {
description: 'The account login name'
}) login_name;
description: 'The account login name',
})
login_name;
}
@@ -2,9 +2,8 @@ import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentHostAttributesModel extends Fragment {
@attr('string', {
description: 'The address (DNS or IP name) used to reach the host'
}) address;
description: 'The address (DNS or IP name) used to reach the host',
})
address;
}
+6 -6
View File
@@ -2,15 +2,15 @@ import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentHostSetModel extends Fragment {
// =attributes
@attr('string', {
description: 'ID of the related host set'
}) host_set_id;
description: 'ID of the related host set',
})
host_set_id;
@attr('string', {
description: 'ID of the catalog to which the host set belongs'
}) host_catalog_id;
description: 'ID of the catalog to which the host set belongs',
})
host_catalog_id;
}
@@ -2,19 +2,20 @@ import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentPrincipal extends Fragment {
// =attributes
@attr('string', {
description: 'ID of the related scope'
}) scope_id;
description: 'ID of the related scope',
})
scope_id;
@attr('string', {
description: 'ID of the related principal (user or group)'
}) principal_id;
description: 'ID of the related principal (user or group)',
})
principal_id;
@attr('string', {
description: 'Type of the related principal (user or group)'
}) type;
description: 'Type of the related principal (user or group)',
})
type;
}
+15 -9
View File
@@ -4,33 +4,39 @@ import { attr } from '@ember-data/model';
import { scopeTypes } from './scope';
export default class FragmentScope extends Fragment {
// =attributes
@attr('string', {
description: 'ID of the related scope'
}) scope_id;
description: 'ID of the related scope',
})
scope_id;
@attr('string', {
description: 'The type of the resource'
}) type;
description: 'The type of the resource',
})
type;
/**
* @type {boolean}
*/
@computed('type')
get isGlobal() { return this.type === scopeTypes.global; }
get isGlobal() {
return this.type === scopeTypes.global;
}
/**
* @type {boolean}
*/
@computed('type')
get isOrg() { return this.type === scopeTypes.org; }
get isOrg() {
return this.type === scopeTypes.org;
}
/**
* @type {boolean}
*/
@computed('type')
get isProject() { return this.type === scopeTypes.project; }
get isProject() {
return this.type === scopeTypes.project;
}
}
+1 -3
View File
@@ -5,12 +5,10 @@ import { attr } from '@ember-data/model';
* Represents an item in an array of strings.
*/
export default class FragmentStringModel extends Fragment {
// =attributes
@attr('string', {
description: 'The value of the string.'
description: 'The value of the string.',
})
value;
}
@@ -2,9 +2,8 @@ import Fragment from 'ember-data-model-fragments/fragment';
import { attr } from '@ember-data/model';
export default class FragmentTargetAttributesModel extends Fragment {
@attr('number', {
description: 'The default port a target should use if present.'
}) default_port;
description: 'The default port a target should use if present.',
})
default_port;
}
+12 -13
View File
@@ -4,7 +4,6 @@ import { computed } from '@ember/object';
import { A } from '@ember/array';
export default class GroupModel extends GeneratedGroupModel {
// =attributes
/**
@@ -14,8 +13,9 @@ export default class GroupModel extends GeneratedGroupModel {
@attr({
readOnly: true,
defaultValue: () => A(),
emptyArrayIfMissing: true
}) member_ids;
emptyArrayIfMissing: true,
})
member_ids;
/**
* An array of resolved user instances.
@@ -26,7 +26,7 @@ export default class GroupModel extends GeneratedGroupModel {
@computed('member_ids.[]')
get members() {
return this.member_ids
.map(id => this.store.peekRecord('user', id))
.map((id) => this.store.peekRecord('user', id))
.filter(Boolean);
}
@@ -40,10 +40,10 @@ export default class GroupModel extends GeneratedGroupModel {
* @param {object} options.adapterOptions
* @return {Promise}
*/
addMembers(memberIDs, options={ adapterOptions: {} }) {
addMembers(memberIDs, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'add-members',
memberIDs
memberIDs,
};
// There is no "deep merge" in ES.
// All of this nonsense is here to ensure we get
@@ -52,8 +52,8 @@ export default class GroupModel extends GeneratedGroupModel {
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions
}
...options.adapterOptions,
},
});
}
@@ -65,10 +65,10 @@ export default class GroupModel extends GeneratedGroupModel {
* @param {object} options.adapterOptions
* @return {Promise}
*/
removeMembers(memberIDs, options={ adapterOptions: {} }) {
removeMembers(memberIDs, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'remove-members',
memberIDs
memberIDs,
};
// There is no "deep merge" in ES.
// All of this nonsense is here to ensure we get
@@ -77,8 +77,8 @@ export default class GroupModel extends GeneratedGroupModel {
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions
}
...options.adapterOptions,
},
});
}
@@ -91,5 +91,4 @@ export default class GroupModel extends GeneratedGroupModel {
removeMember(memberID, options) {
return this.removeMembers([memberID], options);
}
}
+11 -11
View File
@@ -2,7 +2,6 @@ import GeneratedHostSetModel from '../generated/models/host-set';
import { fragmentArray } from 'ember-data-model-fragments/attributes';
export default class HostSetModel extends GeneratedHostSetModel {
// =attributes
/**
@@ -11,8 +10,9 @@ export default class HostSetModel extends GeneratedHostSetModel {
*/
@fragmentArray('fragment-string', {
readOnly: true,
emptyArrayIfMissing: true
}) host_ids;
emptyArrayIfMissing: true,
})
host_ids;
// =methods
@@ -24,17 +24,17 @@ export default class HostSetModel extends GeneratedHostSetModel {
* @param {object} options.adapterOptions
* @return {Promise}
*/
addHosts(hostIDs, options={ adapterOptions: {} }) {
addHosts(hostIDs, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'add-hosts',
hostIDs
hostIDs,
};
return this.save({
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions
}
...options.adapterOptions,
},
});
}
@@ -46,17 +46,17 @@ export default class HostSetModel extends GeneratedHostSetModel {
* @param {object} options.adapterOptions
* @return {Promise}
*/
removeHosts(hostIDs, options={ adapterOptions: {} }) {
removeHosts(hostIDs, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'remove-hosts',
hostIDs
hostIDs,
};
return this.save({
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions
}
...options.adapterOptions,
},
});
}
-2
View File
@@ -2,11 +2,9 @@ import GeneratedHostModel from '../generated/models/host';
import { fragment } from 'ember-data-model-fragments/attributes';
export default class HostModel extends GeneratedHostModel {
/**
* Attributes of this resource, if any, represented as a JSON fragment.
* @type {FragmentHostAttributesModel}
*/
@fragment('fragment-host-attributes', { defaultValue: {} }) attributes;
}
+14 -15
View File
@@ -2,7 +2,6 @@ import GeneratedRoleModel from '../generated/models/role';
import { fragmentArray } from 'ember-data-model-fragments/attributes';
export default class RoleModel extends GeneratedRoleModel {
// =attributes
/**
@@ -14,14 +13,15 @@ export default class RoleModel extends GeneratedRoleModel {
*/
@fragmentArray('fragment-principal', {
readOnly: true,
emptyArrayIfMissing: true
}) principals;
emptyArrayIfMissing: true,
})
principals;
/**
* Grants is read-only _most_ under normal circumstances. But grants can
* be persisted via a dedicated call to `saveGrants()`.
*/
@fragmentArray('fragment-string', {readOnly: true}) grants;
@fragmentArray('fragment-string', { readOnly: true }) grants;
// =methods
@@ -34,8 +34,8 @@ export default class RoleModel extends GeneratedRoleModel {
return this.save({
adapterOptions: {
method: 'set-grants',
serializeGrants: true
}
serializeGrants: true,
},
});
}
@@ -47,10 +47,10 @@ export default class RoleModel extends GeneratedRoleModel {
* @param {object} options.adapterOptions
* @return {Promise}
*/
addPrincipals(principalIDs, options={ adapterOptions: {} }) {
addPrincipals(principalIDs, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'add-principals',
principalIDs
principalIDs,
};
// There is no "deep merge" in ES.
// All of this nonsense is here to ensure we get
@@ -59,8 +59,8 @@ export default class RoleModel extends GeneratedRoleModel {
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions
}
...options.adapterOptions,
},
});
}
@@ -72,10 +72,10 @@ export default class RoleModel extends GeneratedRoleModel {
* @param {object} options.adapterOptions
* @return {Promise}
*/
removePrincipals(principalIDs, options={ adapterOptions: {} }) {
removePrincipals(principalIDs, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'remove-principals',
principalIDs
principalIDs,
};
// There is no "deep merge" in ES.
// All of this nonsense is here to ensure we get
@@ -84,8 +84,8 @@ export default class RoleModel extends GeneratedRoleModel {
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions
}
...options.adapterOptions,
},
});
}
@@ -98,5 +98,4 @@ export default class RoleModel extends GeneratedRoleModel {
removePrincipal(principalID, options) {
return this.removePrincipals([principalID], options);
}
}
+1 -3
View File
@@ -4,11 +4,10 @@ import { computed } from '@ember/object';
export const scopeTypes = {
global: 'global',
org: 'org',
project: 'project'
project: 'project',
};
export default class ScopeModel extends GeneratedScopeModel {
// =attributes
/**
@@ -42,5 +41,4 @@ export default class ScopeModel extends GeneratedScopeModel {
set isProject(value) {
if (value) this.type = scopeTypes.project;
}
}
+13 -14
View File
@@ -3,7 +3,6 @@ import { fragment, fragmentArray } from 'ember-data-model-fragments/attributes';
import { computed } from '@ember/object';
export default class TargetModel extends GeneratedTargetModel {
// =attributes
/**
@@ -17,8 +16,9 @@ export default class TargetModel extends GeneratedTargetModel {
*/
@fragmentArray('fragment-host-set', {
readOnly: true,
emptyArrayIfMissing: true
}) host_sets;
emptyArrayIfMissing: true,
})
host_sets;
/**
* An array of resolved host set and host catalog instances. Model instances
@@ -31,9 +31,9 @@ export default class TargetModel extends GeneratedTargetModel {
return this.host_sets
.map(({ host_set_id, host_catalog_id }) => ({
model: this.store.peekRecord('host-set', host_set_id),
hostCatalog: this.store.peekRecord('host-catalog', host_catalog_id)
hostCatalog: this.store.peekRecord('host-catalog', host_catalog_id),
}))
.filter(hostSetRef => hostSetRef.model !== null);
.filter((hostSetRef) => hostSetRef.model !== null);
}
// =methods
@@ -46,10 +46,10 @@ export default class TargetModel extends GeneratedTargetModel {
* @param {object} options.adapterOptions
* @return {Promise}
*/
addHostSets(hostSetIDs, options={ adapterOptions: {} }) {
addHostSets(hostSetIDs, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'add-host-sets',
hostSetIDs
hostSetIDs,
};
// There is no "deep merge" in ES.
// All of this nonsense is here to ensure we get
@@ -58,8 +58,8 @@ export default class TargetModel extends GeneratedTargetModel {
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions
}
...options.adapterOptions,
},
});
}
@@ -71,10 +71,10 @@ export default class TargetModel extends GeneratedTargetModel {
* @param {object} options.adapterOptions
* @return {Promise}
*/
removeHostSets(hostSetIDs, options={ adapterOptions: {} }) {
removeHostSets(hostSetIDs, options = { adapterOptions: {} }) {
const defaultAdapterOptions = {
method: 'remove-host-sets',
hostSetIDs
hostSetIDs,
};
// There is no "deep merge" in ES.
// All of this nonsense is here to ensure we get
@@ -83,8 +83,8 @@ export default class TargetModel extends GeneratedTargetModel {
...options,
adapterOptions: {
...defaultAdapterOptions,
...options.adapterOptions
}
...options.adapterOptions,
},
});
}
@@ -97,5 +97,4 @@ export default class TargetModel extends GeneratedTargetModel {
removeHostSet(hostSetID, options) {
return this.removeHostSets([hostSetID], options);
}
}
+2 -3
View File
@@ -1,7 +1,6 @@
import ApplicationSerializer from './application';
export default class AccountSerializer extends ApplicationSerializer {
// =methods
/**
@@ -16,7 +15,8 @@ export default class AccountSerializer extends ApplicationSerializer {
serialize(snapshot) {
const password = snapshot?.adapterOptions?.password;
let serialized = super.serialize(...arguments);
if (password && snapshot?.record?.isNew) serialized.attributes.password = password;
if (password && snapshot?.record?.isNew)
serialized.attributes.password = password;
if (snapshot?.adapterOptions?.method === 'set-password') {
serialized = this.serializeForSetPassword(snapshot, password);
}
@@ -35,5 +35,4 @@ export default class AccountSerializer extends ApplicationSerializer {
password,
};
}
}
+4 -4
View File
@@ -7,7 +7,6 @@ import { copy } from 'ember-copy';
* Manages serialization/normalization of data to/from the API.
*/
export default class ApplicationSerializer extends RESTSerializer {
// =methods
/**
@@ -160,9 +159,11 @@ export default class ApplicationSerializer extends RESTSerializer {
* @return {object}
*/
normalizeMissingArrays(store, primaryModelClass, payload) {
const attrDefs = store._attributesDefinitionFor(primaryModelClass.modelName);
const attrDefs = store._attributesDefinitionFor(
primaryModelClass.modelName
);
if (attrDefs) {
Object.keys(attrDefs).forEach(key => {
Object.keys(attrDefs).forEach((key) => {
if (!payload[key] && attrDefs[key]?.options?.emptyArrayIfMissing) {
payload[key] = [];
}
@@ -187,5 +188,4 @@ export default class ApplicationSerializer extends RESTSerializer {
if (scopeID) normalizedHash.scope.scope_id = scopeID;
return super.normalize(typeClass, normalizedHash);
}
}
@@ -1,7 +1,6 @@
import JSONSerializer from '@ember-data/serializer/json';
export default class FragmentHostSetSerializer extends JSONSerializer {
// =methods
/**
@@ -14,5 +13,4 @@ export default class FragmentHostSetSerializer extends JSONSerializer {
normalize(typeClass, { id: host_set_id, ...obj }) {
return super.normalize(typeClass, { host_set_id, ...obj });
}
}
@@ -1,7 +1,6 @@
import JSONSerializer from '@ember-data/serializer/json';
export default class FragmentPrincipalSerializer extends JSONSerializer {
// =methods
/**
@@ -14,5 +13,4 @@ export default class FragmentPrincipalSerializer extends JSONSerializer {
normalize(typeClass, { id: principal_id, ...obj }) {
return super.normalize(typeClass, { principal_id, ...obj });
}
}
+1 -3
View File
@@ -1,7 +1,6 @@
import ApplicationSerializer from './application';
export default class GroupSerializer extends ApplicationSerializer {
// =methods
/**
@@ -27,8 +26,7 @@ export default class GroupSerializer extends ApplicationSerializer {
serializewithMembers(snapshot, memberIDs) {
return {
version: snapshot.attr('version'),
member_ids: memberIDs
member_ids: memberIDs,
};
}
}
+1 -4
View File
@@ -1,7 +1,6 @@
import ApplicationSerializer from './application';
export default class HostSetSerializer extends ApplicationSerializer {
// =methods
/**
@@ -44,10 +43,8 @@ export default class HostSetSerializer extends ApplicationSerializer {
// TODO: can fragment string normalization be handled generically?
// TODO: host_ids might actually be attributes.host_ids
if (resourceHash.host_ids) {
resourceHash.host_ids =
resourceHash.host_ids.map(value => ({ value }));
resourceHash.host_ids = resourceHash.host_ids.map((value) => ({ value }));
}
return super.normalize(modelClass, resourceHash);
}
}
+9 -8
View File
@@ -2,7 +2,6 @@ import ApplicationSerializer from './application';
import { get } from '@ember/object';
export default class RoleSerializer extends ApplicationSerializer {
// =methods
/**
@@ -20,8 +19,8 @@ export default class RoleSerializer extends ApplicationSerializer {
let serialized = super.serialize(...arguments);
if (serializeGrants) serialized = this.serializeWithGrants(snapshot);
const principalIDs = snapshot?.adapterOptions?.principalIDs;
if (principalIDs) serialized =
this.serializewithPrincipals(snapshot, principalIDs);
if (principalIDs)
serialized = this.serializewithPrincipals(snapshot, principalIDs);
return serialized;
}
@@ -33,7 +32,9 @@ export default class RoleSerializer extends ApplicationSerializer {
serializeWithGrants(snapshot) {
return {
version: snapshot.attr('version'),
grant_strings: snapshot.attr('grants').map(grant => grant.attr('value'))
grant_strings: snapshot
.attr('grants')
.map((grant) => grant.attr('value')),
};
}
@@ -47,7 +48,7 @@ export default class RoleSerializer extends ApplicationSerializer {
serializewithPrincipals(snapshot, principalIDs) {
return {
version: snapshot.attr('version'),
principal_ids: principalIDs
principal_ids: principalIDs,
};
}
@@ -62,10 +63,10 @@ export default class RoleSerializer extends ApplicationSerializer {
normalize(modelClass, resourceHash) {
// TODO: can fragment string normalization be handled generically?
if (resourceHash.grant_strings) {
resourceHash.grants =
resourceHash.grant_strings.map(value => ({ value }));
resourceHash.grants = resourceHash.grant_strings.map((value) => ({
value,
}));
}
return super.normalize(modelClass, resourceHash);
}
}
+3 -5
View File
@@ -1,7 +1,6 @@
import ApplicationSerializer from './application';
export default class TargetSerializer extends ApplicationSerializer {
// =methods
/**
@@ -15,8 +14,8 @@ export default class TargetSerializer extends ApplicationSerializer {
serialize(snapshot) {
let serialized = super.serialize(...arguments);
const hostSetIDs = snapshot?.adapterOptions?.hostSetIDs;
if (hostSetIDs) serialized =
this.serializeWithHostSets(snapshot, hostSetIDs);
if (hostSetIDs)
serialized = this.serializeWithHostSets(snapshot, hostSetIDs);
return serialized;
}
@@ -30,8 +29,7 @@ export default class TargetSerializer extends ApplicationSerializer {
serializeWithHostSets(snapshot, hostSetIDs) {
return {
version: snapshot.attr('version'),
host_set_ids: hostSetIDs
host_set_ids: hostSetIDs,
};
}
}
+1 -5
View File
@@ -1,17 +1,13 @@
export default function() {
export default function () {
// These comments are here to help you get started. Feel free to delete them.
/*
Config (with defaults).
Note: these only affect routes defined *after* them!
*/
// this.urlPrefix = ''; // make this `http://localhost:8080`, for example, if your API is on a different server
// this.namespace = ''; // make this `/api`, for example, if your API is namespaced
// this.timing = 400; // delay for each request, automatically set to 0 during testing
/*
Shorthand cheatsheet:
@@ -1,9 +1,7 @@
export default function(/* server */) {
export default function (/* server */) {
/*
Seed your development database using your factories.
This data will not be loaded in your tests.
*/
// server.createList('post', 10);
}
@@ -1,4 +1,3 @@
import { JSONAPISerializer } from 'ember-cli-mirage';
export default JSONAPISerializer.extend({
});
export default JSONAPISerializer.extend({});
@@ -35,7 +35,7 @@ module('Unit | Adapter | application', function (hooks) {
const method = 'set-something';
const adapter = this.owner.lookup('adapter:application');
const suffix = adapter.urlSuffix(null, null, {
adapterOptions: { method }
adapterOptions: { method },
});
assert.ok(config.api.namespace);
assert.equal(suffix, ':set-something');
@@ -48,31 +48,56 @@ module('Unit | Adapter | application', function (hooks) {
const mockSnapshot = {
adapterOptions: {
scopeID,
method
}
method,
},
};
const adapter = this.owner.lookup('adapter:application');
// test URL generation for each request type...
const findRecordURL = adapter.buildURL('user', '1', mockSnapshot, 'findRecord');
const findRecordURL = adapter.buildURL(
'user',
'1',
mockSnapshot,
'findRecord'
);
assert.equal(findRecordURL, '/v1/users/1:my-custom-method');
const findAllURL = adapter.buildURL('user', null, mockSnapshot, 'findAll');
assert.equal(findAllURL, '/v1/users:my-custom-method');
const findBelongsToURL = adapter.buildURL('user', '2', mockSnapshot, 'findBelongsTo');
const findBelongsToURL = adapter.buildURL(
'user',
'2',
mockSnapshot,
'findBelongsTo'
);
assert.equal(findBelongsToURL, '/v1/users/2:my-custom-method');
const createRecordURL = adapter.buildURL('user', null, mockSnapshot, 'createRecord');
const createRecordURL = adapter.buildURL(
'user',
null,
mockSnapshot,
'createRecord'
);
assert.equal(createRecordURL, '/v1/users:my-custom-method');
const updateRecordURL = adapter.buildURL('user', '3', mockSnapshot, 'updateRecord');
const updateRecordURL = adapter.buildURL(
'user',
'3',
mockSnapshot,
'updateRecord'
);
assert.equal(updateRecordURL, '/v1/users/3:my-custom-method');
const deleteRecordURL = adapter.buildURL('user', '4', mockSnapshot, 'deleteRecord');
const deleteRecordURL = adapter.buildURL(
'user',
'4',
mockSnapshot,
'deleteRecord'
);
assert.equal(deleteRecordURL, '/v1/users/4:my-custom-method');
});
test('it can request records through the store from a specified scope', async function (assert) {
assert.expect(1);
const store = this.owner.lookup('service:store');
this.server.get('/v1/groups', (_, { queryParams: { scope_id }}) => {
this.server.get('/v1/groups', (_, { queryParams: { scope_id } }) => {
assert.equal(scope_id, 'p_456', 'Scoped resource URL was requested.');
return {items: []};
return { items: [] };
});
await store.query('group', { scope_id: 'p_456' });
});
@@ -95,15 +120,15 @@ module('Unit | Adapter | application', function (hooks) {
const store = this.owner.lookup('service:store');
const snapshot = store.createRecord('role', {})._createSnapshot();
snapshot.adapterOptions = {
method: 'custom-method'
}
method: 'custom-method',
};
// TODO this is icky, should be changed to a spy or stub
const originalAjax = RESTAdapter.prototype.ajax;
RESTAdapter.prototype.ajax = (url, type) => {
assert.equal(type, 'POST');
RESTAdapter.prototype.ajax = originalAjax;
};
adapter.updateRecord(store, {modelName: 'user'}, snapshot);
adapter.updateRecord(store, { modelName: 'user' }, snapshot);
});
test('it prenormalizes "empty" responses into a form that the fetch-manager will not reject', async function (assert) {
@@ -111,8 +136,13 @@ module('Unit | Adapter | application', function (hooks) {
const adapter = this.owner.lookup('adapter:application');
const store = this.owner.lookup('service:store');
this.server.get('/v1/users', () => new Response({}));
const prenormalized = await adapter.findAll(store, {modelName: 'user'}, null, []);
assert.deepEqual(prenormalized, {items: []});
const prenormalized = await adapter.findAll(
store,
{ modelName: 'user' },
null,
[]
);
assert.deepEqual(prenormalized, { items: [] });
});
test('it correctly identifies 400 responses as invalid', function (assert) {
@@ -3,7 +3,7 @@ import AdapterBuildURLMixin from 'api/mixins/adapter-build-url';
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Mixin | build-url', function(hooks) {
module('Unit | Mixin | build-url', function (hooks) {
setupTest(hooks);
test('it does not interfere with basic URLs', function (assert) {
@@ -18,7 +18,7 @@ module('Unit | Mixin | build-url', function(hooks) {
test('it does not interfere with namespaced URLs', function (assert) {
assert.expect(1);
const Adapter = RESTAdapter.extend(AdapterBuildURLMixin, {
namespace: 'api/v1'
namespace: 'api/v1',
});
this.owner.register('adapter:adapter', Adapter);
const adapter = this.owner.lookup('adapter:adapter');
@@ -30,8 +30,8 @@ module('Unit | Mixin | build-url', function(hooks) {
assert.expect(1);
const Adapter = RESTAdapter.extend(AdapterBuildURLMixin, {
urlPrefix() {
return '/foo/bars'
}
return '/foo/bars';
},
});
this.owner.register('adapter:adapter', Adapter);
const adapter = this.owner.lookup('adapter:adapter');
@@ -43,13 +43,12 @@ module('Unit | Mixin | build-url', function(hooks) {
assert.expect(1);
const Adapter = RESTAdapter.extend(AdapterBuildURLMixin, {
urlSuffix() {
return ':method'
}
return ':method';
},
});
this.owner.register('adapter:adapter', Adapter);
const adapter = this.owner.lookup('adapter:adapter');
const url = adapter._buildURL('model', 1);
assert.equal(url, '/models/1:method');
});
});
+2 -3
View File
@@ -1,13 +1,12 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Model | account', function(hooks) {
module('Unit | Model | account', function (hooks) {
setupTest(hooks);
test('it exists', function(assert) {
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('account', {});
assert.ok(model);
});
});
@@ -1,11 +1,11 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Model | auth method', function(hooks) {
module('Unit | Model | auth method', function (hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('it exists', function(assert) {
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('auth-method', {});
assert.ok(model);
+20 -20
View File
@@ -19,8 +19,8 @@ module('Unit | Model | base', function (hooks) {
store.push({
data: {
id: 'o_1',
type: 'scope'
}
type: 'scope',
},
});
store.push({
data: {
@@ -29,10 +29,10 @@ module('Unit | Model | base', function (hooks) {
attributes: {
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const scope = store.peekRecord('scope', 'o_1');
const model = store.peekRecord('user', '123abc');
@@ -42,7 +42,7 @@ module('Unit | Model | base', function (hooks) {
test('it may accept a `scopeModel` for convenience, instead of a fragment', function (assert) {
assert.expect(3);
const store = this.owner.lookup('service:store');
const scope = store.createRecord('scope', {id: 'o_1', type: 'org'});
const scope = store.createRecord('scope', { id: 'o_1', type: 'org' });
const model = store.createRecord('user', '123abc');
assert.notEqual(model.scopeID, scope.id);
model.scopeModel = scope;
@@ -98,17 +98,17 @@ module('Unit | Model | base', function (hooks) {
const store = this.owner.lookup('service:store');
const model = store.createRecord('user', { scopeID: 'o_123' });
this.server.post('/v1/users', () => {
assert.ok(true, 'Correctly scoped create record URL was requested.')
assert.ok(true, 'Correctly scoped create record URL was requested.');
return {};
});
await model.save();
this.server.patch('/v1/users', () => {
assert.ok(true, 'Correctly scoped update record URL was requested.')
assert.ok(true, 'Correctly scoped update record URL was requested.');
return {};
});
await model.save();
this.server.delete('/v1/users', () => {
assert.ok(true, 'Correctly scoped delete record URL was requested.')
assert.ok(true, 'Correctly scoped delete record URL was requested.');
return {};
});
await model.destroyRecord();
@@ -118,35 +118,35 @@ module('Unit | Model | base', function (hooks) {
assert.expect(3);
const store = this.owner.lookup('service:store');
const customScopeID = 'global';
const scope = {scope_id: 'o_123'};
const scope = { scope_id: 'o_123' };
const model = store.createRecord('user', { scope });
this.server.post('/v1/users', () => {
assert.ok(true, 'Correctly scoped create record URL was requested.')
assert.ok(true, 'Correctly scoped create record URL was requested.');
return {};
});
await model.save({adapterOptions: {scopeID: customScopeID}});
await model.save({ adapterOptions: { scopeID: customScopeID } });
this.server.patch('/v1/users', () => {
assert.ok(true, 'Correctly scoped update record URL was requested.')
assert.ok(true, 'Correctly scoped update record URL was requested.');
return {};
});
await model.save({adapterOptions: {scopeID: customScopeID}});
await model.save({ adapterOptions: { scopeID: customScopeID } });
this.server.delete('/v1/users', () => {
assert.ok(true, 'Correctly scoped delete record URL was requested.')
assert.ok(true, 'Correctly scoped delete record URL was requested.');
return {};
});
await model.destroyRecord({adapterOptions: {scopeID: customScopeID}});
await model.destroyRecord({ adapterOptions: { scopeID: customScopeID } });
});
test('it saves records to a URL with a custom method if requested', async function (assert) {
assert.expect(1);
const store = this.owner.lookup('service:store');
const method = 'my-custom-method';
const scope = {scope_id: 'o_123'};
const scope = { scope_id: 'o_123' };
const model = store.createRecord('user', { scope });
this.server.post(`/v1/users:${method}`, () => {
assert.ok(true, 'Correctly scoped create record URL was requested.')
assert.ok(true, 'Correctly scoped create record URL was requested.');
return {};
});
await model.save({adapterOptions: {method}});
await model.save({ adapterOptions: { method } });
});
});
@@ -1,11 +1,11 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Model | fragment host set', function(hooks) {
module('Unit | Model | fragment host set', function (hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('it exists', function(assert) {
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('fragment-host-set', {});
assert.ok(model);
@@ -1,11 +1,11 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Model | fragment principal', function(hooks) {
module('Unit | Model | fragment principal', function (hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('it exists', function(assert) {
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('fragment-principal', {});
assert.ok(model);
@@ -1,11 +1,11 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Model | fragment string', function(hooks) {
module('Unit | Model | fragment string', function (hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('it exists', function(assert) {
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('fragment-string', {});
assert.ok(model);
+50 -34
View File
@@ -2,11 +2,11 @@ import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
module('Unit | Model | group', function(hooks) {
module('Unit | Model | group', function (hooks) {
setupTest(hooks);
setupMirage(hooks);
test('it has a `members` array of resolved model instances (if those instances are already in the store)', function(assert) {
test('it has a `members` array of resolved model instances (if those instances are already in the store)', function (assert) {
assert.expect(4);
const store = this.owner.lookup('service:store');
store.push({
@@ -14,30 +14,42 @@ module('Unit | Model | group', function(hooks) {
id: 'group_123',
type: 'group',
attributes: {
member_ids: [ '1', '2', ]
}
}
member_ids: ['1', '2'],
},
},
});
const group = store.peekRecord('group', 'group_123');
assert.equal(group.member_ids.length, 2, 'Group has two entires in member_ids');
assert.equal(group.members.length, 0, 'Group has no resolved members because they are not loaded yet');
assert.equal(
group.member_ids.length,
2,
'Group has two entires in member_ids'
);
assert.equal(
group.members.length,
0,
'Group has no resolved members because they are not loaded yet'
);
store.push({
data: {
id: '1',
type: 'user',
attributes: {}
}
attributes: {},
},
});
store.push({
data: {
id: '2',
type: 'user',
attributes: {}
}
attributes: {},
},
});
// eslint-disable-next-line no-self-assign
group.member_ids = [...group.member_ids];
assert.equal(group.member_ids.length, 2, 'Group has two entires in member_ids');
assert.equal(
group.member_ids.length,
2,
'Group has two entires in member_ids'
);
assert.equal(group.members.length, 2, 'Group has two resolved members');
});
@@ -47,7 +59,7 @@ module('Unit | Model | group', function(hooks) {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
member_ids: ['123_abc', 'foobar'],
version: 1
version: 1,
});
});
const store = this.owner.lookup('service:store');
@@ -58,14 +70,14 @@ module('Unit | Model | group', function(hooks) {
attributes: {
name: 'Group',
description: 'Description',
member_ids: [ '1', '2' ],
member_ids: ['1', '2'],
version: 1,
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const model = store.peekRecord('group', '123abc');
await model.addMembers(['123_abc', 'foobar']);
@@ -77,7 +89,7 @@ module('Unit | Model | group', function(hooks) {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
member_ids: ['1', '3'],
version: 1
version: 1,
});
});
const store = this.owner.lookup('service:store');
@@ -88,14 +100,14 @@ module('Unit | Model | group', function(hooks) {
attributes: {
name: 'group',
description: 'Description',
member_ids: [ '4', '5' ],
member_ids: ['4', '5'],
version: 1,
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const model = store.peekRecord('group', '123abc');
await model.removeMembers(['1', '3']);
@@ -107,7 +119,7 @@ module('Unit | Model | group', function(hooks) {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
member_ids: ['3'],
version: 1
version: 1,
});
});
const store = this.owner.lookup('service:store');
@@ -118,29 +130,33 @@ module('Unit | Model | group', function(hooks) {
attributes: {
name: 'group',
description: 'Description',
member_ids: [ '1', '3' ],
member_ids: ['1', '3'],
version: 1,
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const model = store.peekRecord('group', '123abc');
await model.removeMember('3');
});
test('it defaults `members_ids` to an empty array when model instance does not define it', function(assert) {
test('it defaults `members_ids` to an empty array when model instance does not define it', function (assert) {
assert.expect(1);
const store = this.owner.lookup('service:store');
store.push({
data: {
id: 'group_123',
type: 'group'
}
type: 'group',
},
});
const group = store.peekRecord('group', 'group_123');
assert.equal(group.member_ids.length, 0, 'Group has empty member_ids by default');
assert.equal(
group.member_ids.length,
0,
'Group has empty member_ids by default'
);
});
});
@@ -1,10 +1,10 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Model | host catalog', function(hooks) {
module('Unit | Model | host catalog', function (hooks) {
setupTest(hooks);
test('it exists', function(assert) {
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('host-catalog', {});
assert.ok(model);
@@ -1,11 +1,11 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Model | host set', function(hooks) {
module('Unit | Model | host set', function (hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('it exists', function(assert) {
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('host-set', {});
assert.ok(model);
+5 -5
View File
@@ -1,23 +1,23 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Model | host', function(hooks) {
module('Unit | Model | host', function (hooks) {
setupTest(hooks);
// Replace this with your real tests.
test('it exists', function(assert) {
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('host', {});
assert.ok(model);
});
test('it contains attributes', function(assert) {
test('it contains attributes', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('host', {
type: 'static',
attributes: {
address: '127.0.0.1'
}
address: '127.0.0.1',
},
});
assert.equal(model.attributes.address, '127.0.0.1');
});
+43 -37
View File
@@ -6,7 +6,7 @@ module('Unit | Model | role', function (hooks) {
setupTest(hooks);
setupMirage(hooks);
test('it exists', function(assert) {
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('role', {});
assert.ok(model);
@@ -18,7 +18,7 @@ module('Unit | Model | role', function (hooks) {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
grant_strings: ['grant1', 'grant2'],
version: 1
version: 1,
});
});
const store = this.owner.lookup('service:store');
@@ -29,14 +29,14 @@ module('Unit | Model | role', function (hooks) {
attributes: {
name: 'Role',
description: 'Description',
grants: [{value: 'grant1'}, {value: 'grant2'}],
grants: [{ value: 'grant1' }, { value: 'grant2' }],
version: 1,
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const model = store.peekRecord('role', '123abc');
await model.saveGrants();
@@ -48,7 +48,7 @@ module('Unit | Model | role', function (hooks) {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
principal_ids: ['123_abc', 'foobar'],
version: 1
version: 1,
});
});
const store = this.owner.lookup('service:store');
@@ -61,15 +61,15 @@ module('Unit | Model | role', function (hooks) {
description: 'Description',
principals: [
{ id: '1', type: 'user' },
{ id: '3', type: 'group' }
{ id: '3', type: 'group' },
],
version: 1,
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const model = store.peekRecord('role', '123abc');
await model.addPrincipals(['123_abc', 'foobar']);
@@ -77,13 +77,16 @@ module('Unit | Model | role', function (hooks) {
test('it has a `removePrincipals` method that targets a specific POST API endpoint and serialization', async function (assert) {
assert.expect(1);
this.server.post('/v1/roles/123abc:remove-principals', (schema, request) => {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
principal_ids: ['1', '3'],
version: 1
});
});
this.server.post(
'/v1/roles/123abc:remove-principals',
(schema, request) => {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
principal_ids: ['1', '3'],
version: 1,
});
}
);
const store = this.owner.lookup('service:store');
store.push({
data: {
@@ -94,15 +97,15 @@ module('Unit | Model | role', function (hooks) {
description: 'Description',
principals: [
{ id: '1', type: 'user' },
{ id: '3', type: 'group' }
{ id: '3', type: 'group' },
],
version: 1,
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const model = store.peekRecord('role', '123abc');
await model.removePrincipals(['1', '3']);
@@ -110,13 +113,16 @@ module('Unit | Model | role', function (hooks) {
test('it has a `removePrincipal` method that deletes a single principal using `removePrincipals` method', async function (assert) {
assert.expect(1);
this.server.post('/v1/roles/123abc:remove-principals', (schema, request) => {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
principal_ids: ['3'],
version: 1
});
});
this.server.post(
'/v1/roles/123abc:remove-principals',
(schema, request) => {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
principal_ids: ['3'],
version: 1,
});
}
);
const store = this.owner.lookup('service:store');
store.push({
data: {
@@ -127,15 +133,15 @@ module('Unit | Model | role', function (hooks) {
description: 'Description',
principals: [
{ id: '1', type: 'user' },
{ id: '3', type: 'group' }
{ id: '3', type: 'group' },
],
version: 1,
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const model = store.peekRecord('role', '123abc');
await model.removePrincipal('3');
+40 -18
View File
@@ -2,37 +2,60 @@ import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
module('Unit | Model | scope', function(hooks) {
module('Unit | Model | scope', function (hooks) {
setupTest(hooks);
setupMirage(hooks);
test('it may have a scope fragment', async function(assert) {
test('it may have a scope fragment', async function (assert) {
assert.expect(6);
const store = this.owner.lookup('service:store');
this.server.get('/v1/scopes', () => ({
items: [
{id: 'global', type: 'global'},
{id: 'o_1', type: 'org', scope: {scope_id: 'global'}},
{id: 'o_2', type: 'org', scope: {scope_id: 'global'}},
{id: 'p_1', type: 'project', scope: {scope_id: 'o_1'}},
{id: 'p_2', type: 'project', scope: {scope_id: 'o_1'}},
{id: 'p_3', type: 'project', scope: {scope_id: 'o_2'}},
]
{ id: 'global', type: 'global' },
{ id: 'o_1', type: 'org', scope: { scope_id: 'global' } },
{ id: 'o_2', type: 'org', scope: { scope_id: 'global' } },
{ id: 'p_1', type: 'project', scope: { scope_id: 'o_1' } },
{ id: 'p_2', type: 'project', scope: { scope_id: 'o_1' } },
{ id: 'p_3', type: 'project', scope: { scope_id: 'o_2' } },
],
}));
const scopes = await store.findAll('scope');
// check integrity of scope relationships
assert.notOk(await scopes.firstObject.get('scope'), 'Global scope has no parent');
assert.equal(await scopes.objectAt(1).get('scope.scope_id'), 'global', 'Org 1 parent scope is global');
assert.equal(await scopes.objectAt(2).get('scope.scope_id'), 'global', 'Org 2 parent scope is global');
assert.equal(await scopes.objectAt(3).get('scope.scope_id'), 'o_1', 'Project 1 parent scope is org 1');
assert.equal(await scopes.objectAt(4).get('scope.scope_id'), 'o_1', 'Project 2 parent scope is org 1');
assert.equal(await scopes.objectAt(5).get('scope.scope_id'), 'o_2', 'Project 3 parent scope is org 2');
assert.notOk(
await scopes.firstObject.get('scope'),
'Global scope has no parent'
);
assert.equal(
await scopes.objectAt(1).get('scope.scope_id'),
'global',
'Org 1 parent scope is global'
);
assert.equal(
await scopes.objectAt(2).get('scope.scope_id'),
'global',
'Org 2 parent scope is global'
);
assert.equal(
await scopes.objectAt(3).get('scope.scope_id'),
'o_1',
'Project 1 parent scope is org 1'
);
assert.equal(
await scopes.objectAt(4).get('scope.scope_id'),
'o_1',
'Project 2 parent scope is org 1'
);
assert.equal(
await scopes.objectAt(5).get('scope.scope_id'),
'o_2',
'Project 3 parent scope is org 2'
);
});
test('it has isType boolean getters and setters', async function(assert) {
test('it has isType boolean getters and setters', async function (assert) {
assert.expect(9);
const store = this.owner.lookup('service:store');
const model = store.createRecord('scope', {type: 'global'});
const model = store.createRecord('scope', { type: 'global' });
assert.ok(model.isGlobal);
assert.notOk(model.isOrg);
assert.notOk(model.isProject);
@@ -45,5 +68,4 @@ module('Unit | Model | scope', function(hooks) {
assert.notOk(model.isOrg);
assert.ok(model.isProject);
});
});
+66 -45
View File
@@ -6,7 +6,7 @@ module('Unit | Model | target', function (hooks) {
setupTest(hooks);
setupMirage(hooks);
test('it has a `hostSets` array of resolved model instances (if those instances are already in the store)', function(assert) {
test('it has a `hostSets` array of resolved model instances (if those instances are already in the store)', function (assert) {
assert.expect(6);
const store = this.owner.lookup('service:store');
store.push({
@@ -16,41 +16,56 @@ module('Unit | Model | target', function (hooks) {
attributes: {
host_sets: [
{ host_set_id: '1', host_catalog_id: '2' },
{ host_set_id: '3', host_catalog_id: '2' }
]
}
}
{ host_set_id: '3', host_catalog_id: '2' },
],
},
},
});
const target = store.peekRecord('target', '123abc');
assert.equal(target.host_sets.length, 2, 'Target has two entires in host_sets');
assert.equal(target.hostSets.length, 0, 'Target has no resolved hostSets because they are not loaded yet');
assert.equal(
target.host_sets.length,
2,
'Target has two entires in host_sets'
);
assert.equal(
target.hostSets.length,
0,
'Target has no resolved hostSets because they are not loaded yet'
);
store.push({
data: {
id: '1',
type: 'host-set',
attributes: {}
}
attributes: {},
},
});
store.push({
data: {
id: '3',
type: 'host-set',
attributes: {}
}
attributes: {},
},
});
// Since `hostSets` is computed on `host_sets`, not the store itself,
// it's necessary to do this assignment to kick-off the computed update.
// eslint-disable-next-line no-self-assign
target.host_sets = target.host_sets;
assert.equal(target.host_sets.length, 2, 'Target has two entires in host_sets');
assert.equal(
target.host_sets.length,
2,
'Target has two entires in host_sets'
);
assert.equal(target.hostSets.length, 2, 'Target has two resolved hostSets');
assert.notOk(target.hostSets[0].hostCatalog, 'Host catalog was not resolved because it is not loaded yet');
assert.notOk(
target.hostSets[0].hostCatalog,
'Host catalog was not resolved because it is not loaded yet'
);
store.push({
data: {
id: '2',
type: 'host-catalog',
attributes: {}
}
attributes: {},
},
});
// eslint-disable-next-line no-self-assign
target.host_sets = target.host_sets;
@@ -63,7 +78,7 @@ module('Unit | Model | target', function (hooks) {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
host_set_ids: ['123_abc', 'foobar'],
version: 1
version: 1,
});
});
const store = this.owner.lookup('service:store');
@@ -76,15 +91,15 @@ module('Unit | Model | target', function (hooks) {
description: 'Description',
host_sets: [
{ host_set_id: '1', host_catalog_id: '2' },
{ host_set_id: '3', host_catalog_id: '4' }
{ host_set_id: '3', host_catalog_id: '4' },
],
version: 1,
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const model = store.peekRecord('target', '123abc');
await model.addHostSets(['123_abc', 'foobar']);
@@ -92,13 +107,16 @@ module('Unit | Model | target', function (hooks) {
test('it has a `removeHostSets` method that targets a specific POST API endpoint and serialization', async function (assert) {
assert.expect(1);
this.server.post('/v1/targets/123abc:remove-host-sets', (schema, request) => {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
host_set_ids: ['1', '3'],
version: 1
});
});
this.server.post(
'/v1/targets/123abc:remove-host-sets',
(schema, request) => {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
host_set_ids: ['1', '3'],
version: 1,
});
}
);
const store = this.owner.lookup('service:store');
store.push({
data: {
@@ -109,15 +127,15 @@ module('Unit | Model | target', function (hooks) {
description: 'Description',
host_sets: [
{ host_set_id: '1', host_catalog_id: '2' },
{ host_set_id: '3', host_catalog_id: '4' }
{ host_set_id: '3', host_catalog_id: '4' },
],
version: 1,
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const model = store.peekRecord('target', '123abc');
await model.removeHostSets(['1', '3']);
@@ -125,13 +143,16 @@ module('Unit | Model | target', function (hooks) {
test('it has a `removeHostSet` method that deletes a single host set using `removeHostSets` method', async function (assert) {
assert.expect(1);
this.server.post('/v1/targets/123abc:remove-host-sets', (schema, request) => {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
host_set_ids: ['3'],
version: 1
});
});
this.server.post(
'/v1/targets/123abc:remove-host-sets',
(schema, request) => {
const body = JSON.parse(request.requestBody);
assert.deepEqual(body, {
host_set_ids: ['3'],
version: 1,
});
}
);
const store = this.owner.lookup('service:store');
store.push({
data: {
@@ -142,15 +163,15 @@ module('Unit | Model | target', function (hooks) {
description: 'Description',
host_sets: [
{ host_set_id: '1', host_catalog_id: '2' },
{ host_set_id: '3', host_catalog_id: '4' }
{ host_set_id: '3', host_catalog_id: '4' },
],
version: 1,
scope: {
scope_id: 'o_1',
type: 'scope'
}
}
}
type: 'scope',
},
},
},
});
const model = store.peekRecord('target', '123abc');
await model.removeHostSet('3');
+2 -2
View File
@@ -1,10 +1,10 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Model | user', function(hooks) {
module('Unit | Model | user', function (hooks) {
setupTest(hooks);
test('it exists', function(assert) {
test('it exists', function (assert) {
let store = this.owner.lookup('service:store');
let model = store.createRecord('user', {});
assert.ok(model);
@@ -1,7 +1,7 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Serializer | account', function(hooks) {
module('Unit | Serializer | account', function (hooks) {
setupTest(hooks);
test('it serializes normally', function (assert) {
@@ -16,7 +16,7 @@ module('Unit | Serializer | account', function(hooks) {
attributes: {
login_name: 'Login Name',
},
version: 1
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {};
@@ -27,9 +27,9 @@ module('Unit | Serializer | account', function(hooks) {
auth_method_id: '1',
description: 'Description',
attributes: {
login_name: 'Login Name'
login_name: 'Login Name',
},
version: 1
version: 1,
});
});
@@ -45,11 +45,11 @@ module('Unit | Serializer | account', function(hooks) {
attributes: {
login_name: 'Login Name',
},
version: 1
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {
password: 'Password'
password: 'Password',
};
const serializedRecord = serializer.serialize(snapshot);
assert.deepEqual(serializedRecord, {
@@ -59,9 +59,9 @@ module('Unit | Serializer | account', function(hooks) {
description: 'Description',
attributes: {
login_name: 'Login Name',
password: 'Password'
password: 'Password',
},
version: 1
version: 1,
});
});
@@ -78,20 +78,20 @@ module('Unit | Serializer | account', function(hooks) {
name: 'Name',
description: 'Description',
attributes: {
login_name: 'Login Name'
login_name: 'Login Name',
},
auth_method_id: '1',
version: 1
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {
method: 'set-password',
password: 'Password'
password: 'Password',
};
const serializedRecord = serializer.serialize(snapshot);
assert.deepEqual(serializedRecord, {
password: 'Password',
version: 1
version: 1,
});
});
});
@@ -19,14 +19,14 @@ module('Unit | Serializer | application', function (hooks) {
description: 'Description',
scope: {
scope_id: 'global',
type: 'global'
}
type: 'global',
},
});
const serializedRecord = record.serialize();
assert.deepEqual(serializedRecord, {
name: 'User',
description: 'Description',
scope_id: 'global'
scope_id: 'global',
});
});
@@ -38,14 +38,14 @@ module('Unit | Serializer | application', function (hooks) {
description: 'Description',
scope: {
scope_id: 'global',
type: 'global'
}
type: 'global',
},
});
const serializedRecord = record.serialize();
assert.deepEqual(serializedRecord, {
name: 'User',
description: 'Description',
scope_id: 'global'
scope_id: 'global',
});
});
@@ -55,19 +55,19 @@ module('Unit | Serializer | application', function (hooks) {
const record = store.createRecord('user', {
name: 'User',
description: 'Description',
version: null
version: null,
});
let serializedRecord = record.serialize();
assert.deepEqual(serializedRecord, {
name: 'User',
description: 'Description'
description: 'Description',
});
record.version = 1;
serializedRecord = record.serialize();
assert.deepEqual(serializedRecord, {
name: 'User',
description: 'Description',
version: 1
version: 1,
});
});
@@ -121,7 +121,7 @@ module('Unit | Serializer | application', function (hooks) {
const payload = {
id: '1',
name: 'User 1',
scope: { id: 'o_123' }
scope: { id: 'o_123' },
};
const normalized = serializer.normalizeSingleResponse(
store,
@@ -147,7 +147,7 @@ module('Unit | Serializer | application', function (hooks) {
const payload = {
id: '1',
name: 'Target 1',
scope: { id: 'o_123' }
scope: { id: 'o_123' },
};
const normalized = serializer.normalizeSingleResponse(
store,
@@ -162,7 +162,7 @@ module('Unit | Serializer | application', function (hooks) {
attributes: {
name: 'Target 1',
scope: { scope_id: 'o_123' },
host_sets: []
host_sets: [],
},
relationships: {},
},
@@ -2,27 +2,27 @@ import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import FragmentHostSet from 'api/models/fragment-host-set';
module('Unit | Serializer | fragment host set', function(hooks) {
module('Unit | Serializer | fragment host set', function (hooks) {
setupTest(hooks);
test('it normalizes `id` into `host_set_id`', function(assert) {
test('it normalizes `id` into `host_set_id`', function (assert) {
assert.expect(1);
const store = this.owner.lookup('service:store');
const serializer = store.serializerFor('fragment-host-set');
const normalized = serializer.normalize(FragmentHostSet, {
id: '2',
host_catalog_id: '1'
host_catalog_id: '1',
});
assert.deepEqual(normalized, {
data: {
attributes: {
host_set_id: '2',
host_catalog_id: '1'
host_catalog_id: '1',
},
id: null,
relationships: {},
type: 'fragment-host-set'
}
type: 'fragment-host-set',
},
});
});
});
@@ -2,29 +2,29 @@ import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import FragmentPrincipal from 'api/models/fragment-principal';
module('Unit | Serializer | fragment principal', function(hooks) {
module('Unit | Serializer | fragment principal', function (hooks) {
setupTest(hooks);
test('it normalizes `id` into `principal_id`', function(assert) {
test('it normalizes `id` into `principal_id`', function (assert) {
assert.expect(1);
const store = this.owner.lookup('service:store');
const serializer = store.serializerFor('fragment-principal');
const normalized = serializer.normalize(FragmentPrincipal, {
scope_id: '1',
principal_id: '2',
type: 'user'
type: 'user',
});
assert.deepEqual(normalized, {
data: {
attributes: {
scope_id: '1',
principal_id: '2',
type: 'user'
type: 'user',
},
id: null,
relationships: {},
type: 'fragment-principal'
}
type: 'fragment-principal',
},
});
});
});
+10 -11
View File
@@ -1,7 +1,7 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Serializer | group', function(hooks) {
module('Unit | Serializer | group', function (hooks) {
setupTest(hooks);
test('it serializes groups normally, without members', function (assert) {
@@ -11,8 +11,8 @@ module('Unit | Serializer | group', function(hooks) {
const record = store.createRecord('group', {
name: 'Group',
description: 'Description',
member_ids: [ '1', '2', ],
version: 1
member_ids: ['1', '2'],
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {};
@@ -20,7 +20,7 @@ module('Unit | Serializer | group', function(hooks) {
assert.deepEqual(serializedRecord, {
name: 'Group',
description: 'Description',
version: 1
version: 1,
});
});
@@ -31,17 +31,17 @@ module('Unit | Serializer | group', function(hooks) {
const record = store.createRecord('group', {
name: 'Group',
description: 'Description',
member_ids: [ '1', '2', ],
version: 1
member_ids: ['1', '2'],
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {
memberIDs: ['4', '5']
memberIDs: ['4', '5'],
};
const serializedRecord = serializer.serialize(snapshot);
assert.deepEqual(serializedRecord, {
member_ids: ['4', '5'],
version: 1
version: 1,
});
});
@@ -53,7 +53,7 @@ module('Unit | Serializer | group', function(hooks) {
const payload = {
id: '1',
name: 'Group 1',
scope: { id: 'o_123' }
scope: { id: 'o_123' },
};
const normalized = serializer.normalizeSingleResponse(
store,
@@ -68,11 +68,10 @@ module('Unit | Serializer | group', function(hooks) {
attributes: {
name: 'Group 1',
scope: { scope_id: 'o_123' },
member_ids: []
member_ids: [],
},
relationships: {},
},
});
});
});
@@ -1,7 +1,7 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Serializer | host set', function(hooks) {
module('Unit | Serializer | host set', function (hooks) {
setupTest(hooks);
test('it serializes host sets normally, without host_ids', function (assert) {
@@ -12,7 +12,7 @@ module('Unit | Serializer | host set', function(hooks) {
name: 'Host Set 1',
description: 'Description',
host_catalog_id: '123',
version: 1
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {};
@@ -21,7 +21,7 @@ module('Unit | Serializer | host set', function(hooks) {
name: 'Host Set 1',
description: 'Description',
host_catalog_id: '123',
version: 1
version: 1,
});
});
@@ -32,17 +32,17 @@ module('Unit | Serializer | host set', function(hooks) {
const record = store.createRecord('host-set', {
name: 'Host Set 1',
description: 'Description',
host_ids: [{value: '1'}, {value: '2'}, {value: '3'}],
version: 1
host_ids: [{ value: '1' }, { value: '2' }, { value: '3' }],
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {
hostIDs: ['4', '5']
hostIDs: ['4', '5'],
};
const serializedRecord = serializer.serialize(snapshot);
assert.deepEqual(serializedRecord, {
host_ids: ['4', '5'],
version: 1
version: 1,
});
});
@@ -54,7 +54,7 @@ module('Unit | Serializer | host set', function(hooks) {
const payload = {
id: '1',
name: 'Host Set 1',
host_ids: ['1', '2', '3']
host_ids: ['1', '2', '3'],
};
const normalized = serializer.normalizeSingleResponse(
store,
@@ -68,7 +68,7 @@ module('Unit | Serializer | host set', function(hooks) {
type: 'host-set',
attributes: {
name: 'Host Set 1',
host_ids: [{value: '1'}, {value: '2'}, {value: '3'}],
host_ids: [{ value: '1' }, { value: '2' }, { value: '3' }],
},
relationships: {},
},
@@ -83,7 +83,7 @@ module('Unit | Serializer | host set', function(hooks) {
const payload = {
id: '1',
name: 'Host Set 1',
scope: { id: 'o_123' }
scope: { id: 'o_123' },
};
const normalized = serializer.normalizeSingleResponse(
store,
@@ -98,11 +98,10 @@ module('Unit | Serializer | host set', function(hooks) {
attributes: {
name: 'Host Set 1',
scope: { scope_id: 'o_123' },
host_ids: []
host_ids: [],
},
relationships: {},
},
});
});
});
+14 -19
View File
@@ -1,7 +1,7 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Serializer | role', function(hooks) {
module('Unit | Serializer | role', function (hooks) {
setupTest(hooks);
test('it serializes roles normally, without grants', function (assert) {
@@ -11,8 +11,8 @@ module('Unit | Serializer | role', function(hooks) {
const record = store.createRecord('role', {
name: 'User',
description: 'Description',
grants: [{value: 'foo'}, {value: 'bar'}],
version: 1
grants: [{ value: 'foo' }, { value: 'bar' }],
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {};
@@ -20,7 +20,7 @@ module('Unit | Serializer | role', function(hooks) {
assert.deepEqual(serializedRecord, {
name: 'User',
description: 'Description',
version: 1
version: 1,
});
});
@@ -31,17 +31,17 @@ module('Unit | Serializer | role', function(hooks) {
const record = store.createRecord('role', {
name: 'User',
description: 'Description',
grants: [{value: 'foo'}, {value: 'bar'}],
version: 1
grants: [{ value: 'foo' }, { value: 'bar' }],
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {
serializeGrants: true
serializeGrants: true,
};
const serializedRecord = serializer.serialize(snapshot);
assert.deepEqual(serializedRecord, {
grant_strings: ['foo', 'bar'],
version: 1
version: 1,
});
});
@@ -53,7 +53,7 @@ module('Unit | Serializer | role', function(hooks) {
const payload = {
id: '1',
name: 'Role 1',
grant_strings: ['*', '*']
grant_strings: ['*', '*'],
};
const normalized = serializer.normalizeSingleResponse(
store,
@@ -67,8 +67,8 @@ module('Unit | Serializer | role', function(hooks) {
type: 'role',
attributes: {
name: 'Role 1',
grants: [{value: '*'}, {value: '*'}],
principals: []
grants: [{ value: '*' }, { value: '*' }],
principals: [],
},
relationships: {},
},
@@ -83,13 +83,9 @@ module('Unit | Serializer | role', function(hooks) {
const payload = {
id: '1',
name: 'Role 1',
scope: { id: 'o_123' }
scope: { id: 'o_123' },
};
const normalized = serializer.normalizeSingleResponse(
store,
role,
payload
);
const normalized = serializer.normalizeSingleResponse(store, role, payload);
assert.deepEqual(normalized, {
included: [],
data: {
@@ -98,11 +94,10 @@ module('Unit | Serializer | role', function(hooks) {
attributes: {
name: 'Role 1',
scope: { scope_id: 'o_123' },
principals: []
principals: [],
},
relationships: {},
},
});
});
});
@@ -1,7 +1,7 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module('Unit | Serializer | target', function(hooks) {
module('Unit | Serializer | target', function (hooks) {
setupTest(hooks);
test('it serializes targets normally, without host sets', function (assert) {
@@ -13,14 +13,14 @@ module('Unit | Serializer | target', function(hooks) {
description: 'Description',
host_sets: [
{ host_set_id: '1', host_catalog_id: '2' },
{ host_set_id: '3', host_catalog_id: '4' }
{ host_set_id: '3', host_catalog_id: '4' },
],
scope: {
scope_id: 'org_1',
type: 'org'
type: 'org',
},
version: 1,
type: 'tcp'
type: 'tcp',
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {};
@@ -32,10 +32,9 @@ module('Unit | Serializer | target', function(hooks) {
type: 'tcp',
scope_id: 'org_1',
attributes: {
default_port: null
}
default_port: null,
},
});
});
test('it serializes only host sets and version when an `adapterOptions.hostSetIDs` array is passed', function (assert) {
@@ -47,18 +46,18 @@ module('Unit | Serializer | target', function(hooks) {
description: 'Description',
host_sets: [
{ host_set_id: '1', host_catalog_id: '2' },
{ host_set_id: '3', host_catalog_id: '4' }
{ host_set_id: '3', host_catalog_id: '4' },
],
version: 1
version: 1,
});
const snapshot = record._createSnapshot();
snapshot.adapterOptions = {
hostSetIDs: ['4', '5']
hostSetIDs: ['4', '5'],
};
const serializedRecord = serializer.serialize(snapshot);
assert.deepEqual(serializedRecord, {
host_set_ids: ['4', '5'],
version: 1
version: 1,
});
});
@@ -72,8 +71,8 @@ module('Unit | Serializer | target', function(hooks) {
name: 'Target 1',
host_sets: [
{ host_set_id: '1', host_catalog_id: '2' },
{ host_set_id: '3', host_catalog_id: '4' }
]
{ host_set_id: '3', host_catalog_id: '4' },
],
};
const normalized = serializer.normalizeSingleResponse(
store,
@@ -89,8 +88,8 @@ module('Unit | Serializer | target', function(hooks) {
name: 'Target 1',
host_sets: [
{ host_set_id: '1', host_catalog_id: '2' },
{ host_set_id: '3', host_catalog_id: '4' }
]
{ host_set_id: '3', host_catalog_id: '4' },
],
},
relationships: {},
},
@@ -105,7 +104,7 @@ module('Unit | Serializer | target', function(hooks) {
const payload = {
id: '1',
name: 'Target 1',
scope: { id: 'o_123' }
scope: { id: 'o_123' },
};
const normalized = serializer.normalizeSingleResponse(
store,
@@ -120,11 +119,10 @@ module('Unit | Serializer | target', function(hooks) {
attributes: {
name: 'Target 1',
scope: { scope_id: 'o_123' },
host_sets: []
host_sets: [],
},
relationships: {},
},
});
});
});