From 7f81b01d88d7298e8c4467246d63b21944015e0a Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Tue, 19 May 2026 15:23:06 +0800 Subject: [PATCH 1/2] make `order_config` relationship async: false --- addon/models/order.js | 2 +- tests/unit/models/order-test.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/addon/models/order.js b/addon/models/order.js index a33f1dd..a444b72 100644 --- a/addon/models/order.js +++ b/addon/models/order.js @@ -32,7 +32,7 @@ export default class OrderModel extends Model { /** @relationships */ @belongsTo('company') company; - @belongsTo('order-config') order_config; + @belongsTo('order-config', { async: false }) order_config; @belongsTo('customer', { polymorphic: true, async: false }) customer; @belongsTo('facilitator', { polymorphic: true, async: false }) facilitator; @belongsTo('transaction', { async: false }) transaction; diff --git a/tests/unit/models/order-test.js b/tests/unit/models/order-test.js index 5592973..4084264 100644 --- a/tests/unit/models/order-test.js +++ b/tests/unit/models/order-test.js @@ -11,4 +11,11 @@ module('Unit | Model | order', function (hooks) { let model = store.createRecord('order', {}); assert.ok(model); }); + + test('order config is embedded synchronously', function (assert) { + let store = this.owner.lookup('service:store'); + let relationship = store.modelFor('order').relationshipsByName.get('order_config'); + + assert.strictEqual(relationship.options.async, false); + }); }); From 6b291880022e59169c15c88446916ed402173971 Mon Sep 17 00:00:00 2001 From: "Ronald A. Richardson" Date: Tue, 19 May 2026 17:48:19 +0800 Subject: [PATCH 2/2] fix order_config serialization --- addon/serializers/order.js | 10 ++++++++ tests/unit/serializers/order-test.js | 35 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/addon/serializers/order.js b/addon/serializers/order.js index d74b467..d8f41f2 100644 --- a/addon/serializers/order.js +++ b/addon/serializers/order.js @@ -36,6 +36,8 @@ export default class OrderSerializer extends ApplicationSerializer.extend(Embedd */ serialize(snapshot, options) { const json = super.serialize(snapshot, options); + const selectedOrderConfigUuid = snapshot.attr('order_config_uuid'); + const selectedType = snapshot.attr('type'); const unshiftAttributes = [ 'order_config', 'driver_name', @@ -59,6 +61,14 @@ export default class OrderSerializer extends ApplicationSerializer.extend(Embedd delete json[attr]; }); + if (!isBlank(selectedOrderConfigUuid)) { + json.order_config_uuid = selectedOrderConfigUuid; + } + + if (!isBlank(selectedType)) { + json.type = selectedType; + } + return json; } diff --git a/tests/unit/serializers/order-test.js b/tests/unit/serializers/order-test.js index 30a23f2..808ddca 100644 --- a/tests/unit/serializers/order-test.js +++ b/tests/unit/serializers/order-test.js @@ -20,4 +20,39 @@ module('Unit | Serializer | order', function (hooks) { assert.ok(serializedRecord); }); + + test('selected order config scalar fields win over a stale relationship snapshot', function (assert) { + let store = this.owner.lookup('service:store'); + let transport = store.push({ + data: { + type: 'order-config', + id: 'transport-config-uuid', + attributes: { + key: 'transport', + name: 'Transport', + }, + }, + }); + let haulage = store.push({ + data: { + type: 'order-config', + id: 'haulage-config-uuid', + attributes: { + key: 'haulage', + name: 'Haulage', + }, + }, + }); + let record = store.createRecord('order', { + order_config: transport, + order_config_uuid: haulage.id, + type: haulage.key, + }); + + let serializedRecord = record.serialize(); + + assert.strictEqual(serializedRecord.order_config_uuid, haulage.id); + assert.strictEqual(serializedRecord.type, haulage.key); + assert.notOk(serializedRecord.order_config); + }); });