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/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/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); + }); }); 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); + }); });