diff --git a/addons/api/addon/adapters/application.js b/addons/api/addon/adapters/application.js
index e0d930923..aec4f99fb 100644
--- a/addons/api/addon/adapters/application.js
+++ b/addons/api/addon/adapters/application.js
@@ -291,9 +291,7 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
const errors = fieldErrors.map((error) => ({
detail: error.description,
// Going forward, nested attributes will be hoisted. Thus "attributes."
- // must be stripped from the error name key. Until all models are
- // transitioned away from model fragments, however, both this and the
- // prior error key mappings are necessary.
+ // must be stripped from the error name key.
source: {
pointer: `/data/attributes/${error.name.replace('attributes.', '')}`,
},
diff --git a/addons/api/addon/serializers/host-set.js b/addons/api/addon/serializers/host-set.js
index 6e303ce14..7d1f7b6df 100644
--- a/addons/api/addon/serializers/host-set.js
+++ b/addons/api/addon/serializers/host-set.js
@@ -95,4 +95,18 @@ export default class HostSetSerializer extends ApplicationSerializer {
return super.normalize(typeClass, normalizedHash, ...rest);
}
+
+ /**
+ * Extracts errors from the payload and transforms specific keys if needed.
+ * @override
+ * @return {object}
+ */
+ extractErrors() {
+ const errors = super.extractErrors(...arguments);
+ if (errors?.filter) {
+ errors.filter_string = errors.filter;
+ delete errors.filter;
+ }
+ return errors;
+ }
}
diff --git a/addons/api/addon/serializers/managed-group.js b/addons/api/addon/serializers/managed-group.js
index b21bc6a8f..d543816be 100644
--- a/addons/api/addon/serializers/managed-group.js
+++ b/addons/api/addon/serializers/managed-group.js
@@ -53,4 +53,18 @@ export default class ManagedGroupSerializer extends ApplicationSerializer {
return super.normalize(typeClass, normalizedHash, ...rest);
}
+
+ /**
+ * Extracts errors from the payload and transforms specific keys if needed.
+ * @override
+ * @return {object}
+ */
+ extractErrors() {
+ const errors = super.extractErrors(...arguments);
+ if (errors?.filter) {
+ errors.filter_string = errors.filter;
+ delete errors.filter;
+ }
+ return errors;
+ }
}
diff --git a/addons/api/tests/unit/serializers/host-set-test.js b/addons/api/tests/unit/serializers/host-set-test.js
index 80f7706ff..dcf4c0821 100644
--- a/addons/api/tests/unit/serializers/host-set-test.js
+++ b/addons/api/tests/unit/serializers/host-set-test.js
@@ -208,4 +208,22 @@ module('Unit | Serializer | host set', function (hooks) {
},
});
});
+
+ test('it handles errors correctly', function (assert) {
+ const store = this.owner.lookup('service:store');
+ const serializer = store.serializerFor('host-set');
+ const schema = store.modelFor('host-set');
+
+ const errors = {
+ base: ['Error in provided request.'],
+ filter: ['This field is required.'],
+ };
+
+ const result = serializer.extractErrors(store, schema, errors, null);
+
+ assert.deepEqual(result, {
+ base: ['Error in provided request.'],
+ filter_string: ['This field is required.'],
+ });
+ });
});
diff --git a/addons/api/tests/unit/serializers/managed-group-test.js b/addons/api/tests/unit/serializers/managed-group-test.js
index 6e31c9e07..bde5990e0 100644
--- a/addons/api/tests/unit/serializers/managed-group-test.js
+++ b/addons/api/tests/unit/serializers/managed-group-test.js
@@ -183,7 +183,8 @@ module('Unit | Serializer | Managed group', function (hooks) {
test('it normalizes correctly', function (assert) {
const store = this.owner.lookup('service:store');
const serializer = store.serializerFor('managed-group');
- const hostSetModelClass = store.createRecord('managed-group').constructor;
+ const managedGroupModelClass =
+ store.createRecord('managed-group').constructor;
const payload = {
id: '1',
description: 'Description for the test',
@@ -196,7 +197,7 @@ module('Unit | Serializer | Managed group', function (hooks) {
};
const normalized = serializer.normalizeSingleResponse(
store,
- hostSetModelClass,
+ managedGroupModelClass,
payload,
);
@@ -219,4 +220,22 @@ module('Unit | Serializer | Managed group', function (hooks) {
},
});
});
+
+ test('it handles errors correctly', function (assert) {
+ const store = this.owner.lookup('service:store');
+ const serializer = store.serializerFor('managed-group');
+ const schema = store.modelFor('managed-group');
+
+ const errors = {
+ base: ['Error in provided request.'],
+ filter: ['This field is required.'],
+ };
+
+ const result = serializer.extractErrors(store, schema, errors, null);
+
+ assert.deepEqual(result, {
+ base: ['Error in provided request.'],
+ filter_string: ['This field is required.'],
+ });
+ });
});
diff --git a/ui/admin/app/components/form/managed-group/oidc/index.hbs b/ui/admin/app/components/form/managed-group/oidc/index.hbs
index 31c19dad1..a68b802dc 100644
--- a/ui/admin/app/components/form/managed-group/oidc/index.hbs
+++ b/ui/admin/app/components/form/managed-group/oidc/index.hbs
@@ -66,7 +66,7 @@
{{t 'form.filter.help'}}
{{#if @model.errors.filter_string}}
- {{#each @model.errors.name as |error|}}
+ {{#each @model.errors.filter_string as |error|}}
{{error.message}}
{{/each}}