Skip to content

Commit

Permalink
Add failing test for the case of sideposting with lid
Browse files Browse the repository at this point in the history
  • Loading branch information
andreyfel committed Apr 16, 2020
1 parent bdd96dd commit 67b597d
Showing 1 changed file with 76 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { module, test } from 'qunit';
import { defer } from 'rsvp';
import { defer, resolve } from 'rsvp';

import { setupTest } from 'ember-qunit';

import Adapter from '@ember-data/adapter';
import { RECORD_DATA_STATE } from '@ember-data/canary-features';
import Model, { attr } from '@ember-data/model';
import Model, { attr, belongsTo, hasMany } from '@ember-data/model';
import Serializer from '@ember-data/serializer';
import Store, { recordIdentifierFor } from '@ember-data/store';

Expand Down Expand Up @@ -145,4 +145,78 @@ module('Integration | Identifiers - lid reflection', function(hooks) {

assert.strictEqual(record.name, '@runspired', 'After we finish we use the most recent clean name');
});

test('lid works for sideposting scenario', async function(assert) {
class Ingredient extends Model {
@attr name;
@belongsTo('cake') cake;
}

class Cake extends Model {
@attr name;
@hasMany('ingredient', { async: false }) ingredients;
}

this.owner.register('model:ingredient', Ingredient);
this.owner.register('model:cake', Cake);

class TestSerializer extends Serializer {
normalizeResponse(_, __, payload) {
return payload;
}
}
class TestAdapter extends Adapter {
createRecord(store, ModelClass, snapshot) {
return resolve({
data: {
type: 'cake',
id: '1',
attributes: {
name: 'Cheesecake',
},
relationships: {
ingredients: {
data: [
{
type: 'ingredient',
id: '2',
},
],
},
},
},
included: [
{
type: 'ingredient',
id: '2',
lid: cheeseIdentifier.lid,
attributes: {
name: 'Cheese',
},
relationships: {
cake: {
data: {
type: 'cake',
id: '1',
},
},
},
},
],
});
}
}
this.owner.register('serializer:application', TestSerializer);
this.owner.register('adapter:application', TestAdapter);

const cheese = store.createRecord('ingredient', { name: 'Cheese' });
const cake = store.createRecord('cake', { name: 'Cheesecake', ingredients: [cheese] });

const cheeseIdentifier = recordIdentifierFor(cheese);

await cake.save();

assert.deepEqual(cake.hasMany('ingredients').ids(), ['2']);
assert.equal(cake.ingredients.objectAt(0).name, 'Cheese');
});
});

0 comments on commit 67b597d

Please sign in to comment.