diff --git a/addons/api/addon/models/role.js b/addons/api/addon/models/role.js index dd7e8bb2b..83d1a99a7 100644 --- a/addons/api/addon/models/role.js +++ b/addons/api/addon/models/role.js @@ -12,7 +12,10 @@ export default class RoleModel extends GeneratedRoleModel { * see obvious. Instead, the application layer is expected to load referenced * users and groups as needed. */ - @fragmentArray('fragment-principal', {readOnly: true}) principals; + @fragmentArray('fragment-principal', { + readOnly: true, + emptyArrayIfMissing: true + }) principals; /** * Grants is read-only _most_ under normal circumstances. But grants can diff --git a/addons/api/tests/unit/serializers/application-test.js b/addons/api/tests/unit/serializers/application-test.js index f1962477b..094e0ffb3 100644 --- a/addons/api/tests/unit/serializers/application-test.js +++ b/addons/api/tests/unit/serializers/application-test.js @@ -140,7 +140,7 @@ module('Unit | Serializer | application', function (hooks) { }); test('it normalizes missing arrays in single responses if annotated in model attributes', function (assert) { - assert.expect(2); + assert.expect(1); const store = this.owner.lookup('service:store'); const serializer = store.serializerFor('target'); const target = store.createRecord('target').constructor; @@ -154,7 +154,6 @@ module('Unit | Serializer | application', function (hooks) { target, payload ); - assert.notOk(payload.bogusArrayField); assert.deepEqual(normalized, { included: [], data: { diff --git a/addons/api/tests/unit/serializers/host-set-test.js b/addons/api/tests/unit/serializers/host-set-test.js index 41d5505fd..be9d51436 100644 --- a/addons/api/tests/unit/serializers/host-set-test.js +++ b/addons/api/tests/unit/serializers/host-set-test.js @@ -76,7 +76,7 @@ module('Unit | Serializer | host set', function(hooks) { }); test('it normalizes missing host_ids to empty array', function (assert) { - assert.expect(2); + assert.expect(1); const store = this.owner.lookup('service:store'); const serializer = store.serializerFor('host-set'); const hostSet = store.createRecord('host-set').constructor; @@ -90,7 +90,6 @@ module('Unit | Serializer | host set', function(hooks) { hostSet, payload ); - assert.notOk(payload.bogusArrayField); assert.deepEqual(normalized, { included: [], data: { diff --git a/addons/api/tests/unit/serializers/role-test.js b/addons/api/tests/unit/serializers/role-test.js index 1293d28b4..7a3d6e59d 100644 --- a/addons/api/tests/unit/serializers/role-test.js +++ b/addons/api/tests/unit/serializers/role-test.js @@ -68,6 +68,37 @@ module('Unit | Serializer | role', function(hooks) { attributes: { name: 'Role 1', grants: [{value: '*'}, {value: '*'}], + principals: [] + }, + relationships: {}, + }, + }); + }); + + test('it normalizes missing principals to empty array', function (assert) { + assert.expect(1); + const store = this.owner.lookup('service:store'); + const serializer = store.serializerFor('role'); + const role = store.createRecord('role').constructor; + const payload = { + id: '1', + name: 'Role 1', + scope: { id: 'o_123' } + }; + const normalized = serializer.normalizeSingleResponse( + store, + role, + payload + ); + assert.deepEqual(normalized, { + included: [], + data: { + id: '1', + type: 'role', + attributes: { + name: 'Role 1', + scope: { scope_id: 'o_123' }, + principals: [] }, relationships: {}, }, diff --git a/addons/api/tests/unit/serializers/target-test.js b/addons/api/tests/unit/serializers/target-test.js index ab1a07635..94cab05e5 100644 --- a/addons/api/tests/unit/serializers/target-test.js +++ b/addons/api/tests/unit/serializers/target-test.js @@ -95,7 +95,7 @@ module('Unit | Serializer | target', function(hooks) { }); test('it normalizes missing host_sets to empty array', function (assert) { - assert.expect(2); + assert.expect(1); const store = this.owner.lookup('service:store'); const serializer = store.serializerFor('target'); const target = store.createRecord('target').constructor; @@ -109,7 +109,6 @@ module('Unit | Serializer | target', function(hooks) { target, payload ); - assert.notOk(payload.bogusArrayField); assert.deepEqual(normalized, { included: [], data: { diff --git a/ui/core/mirage/serializers/role.js b/ui/core/mirage/serializers/role.js index 159bdc56c..06009a6f3 100644 --- a/ui/core/mirage/serializers/role.js +++ b/ui/core/mirage/serializers/role.js @@ -16,6 +16,7 @@ export default ApplicationSerializer.extend({ type: 'group' })); json.principals = [ ...serializedUsers, ...serializedGroups ]; + if (!json.principals.length) delete json.principals; return json; } });