vendredi 10 juillet 2015

uni in unit test doesn't process json

the serializer in unit test is not processing json at all, but it works as expected in the application. Yeah, I wrote it afterwards, but the question is - why it's not working? I tried also to create it in place, inherit from RESTSerializer, create models in place, but none of that worked.

Maybe someone can give a clue?

Serializer unit test

import DS from 'ember-data';
import { moduleForModel, test } from 'ember-qunit';
import setupStore from 'app/tests/helpers/setup-store';
import Profile from 'app/models/profile';
import Email from 'app/models/email';
import Address from 'app/models/address';
import ProfileSerializer from 'tactup/serializers/profile';


var env;

moduleForModel('profile', 'Unit | Serializer | profile', {
  needs: ['serializer:profile', 'serializer:email', 'serializer:address', 'model:contactable', 'model:email', 'model:address'],

  beforeEach: function () {
    env = setupStore({
      profile: Profile,
      email: Email,
      address: Address
    });
    env.registry.register('serializer:profile', ProfileSerializer);
    env.profileSerializer = env.container.lookup('serializer:profile');
  },
   teardown: function() {
    Ember.run(env.store, 'destroy');
  }
});

test('it converts embedded records attributes', function(assert) {
  // expect(3);
  let payload = {
    id: 1,
    first_name: "Carlo",
    last_name: "Schuppe",
    company: "Metz-Witting",
    birthday: "01-10-1985",
    photo: null,
    emails: [{address: "foo@bar.baz", id: 1, type: "main"}],
    addresses: [{city: "Brooklyn", id: 1,  type: "main"}]
  },
  parsed = {
    "data":
    {
      "id":"1",
      "type":"profile",
      "attributes": { "firstName":"Carlo","lastName":"Schuppe","company":"Metz-Witting","birthday":"01-10-1985","photo":null },
      "relationships": {
        "emails": { "data": [{"id":"1","type":"email"}] },
        "addresses": { "data": [{"id":"1","type":"address"}] }
      }
    },
    "included":[
      {"id":"1","type":"email","attributes":{"address":"foo@bar.baz", "kind": "main"},"relationships":{"contactable":{"data":{"type":"profile","id":"1"}}}},
      {"id":"1","type":"address","attributes":{"city":"Brooklyn", "kind": "main"},"relationships":{"contactable":{"data":{"type":"profile","id":"1"}}}}
    ]
  },
  find, update, findAllRecordsJSON;

  Ember.run(function() {
    find = env.profileSerializer.normalizeResponse(env.store, Profile, payload, '1', 'findRecord');
    // update = env.profileSerializer.normalizeResponse(env.store, Profile, payload, '1', 'updateRecord');
    // findAllRecordsJSON = env.profileSerializer.normalizeResponse(env.store, Profile, payload, '1', 'findAll');
  });

  assert.deepEqual(find, parsed);
  // assert.deepEqual(update, parsed);
  // assert.deepEqual(findAllRecordsJSON, parsed);
});

setup_store.js

import Ember from 'ember';
import DS from 'ember-data';
// import ActiveModelAdapter from 'active-model-adapter';
// import ActiveModelSerializer from 'active-model-adapter/active-model-serializer';

export default function setupStore(options) {
  var container, registry;
  var env = {};
  options = options || {};

  if (Ember.Registry) {
    registry = env.registry = new Ember.Registry();
    container = env.container = registry.container();
  } else {
    container = env.container = new Ember.Container();
    registry = env.registry = container;
  }

  env.replaceContainerNormalize = function replaceContainerNormalize(fn) {
    if (env.registry) {
      env.registry.normalize = fn;
    } else {
      env.container.normalize = fn;
    }
  };

  var adapter = env.adapter = (options.adapter || '-default');
  delete options.adapter;

  if (typeof adapter !== 'string') {
    env.registry.register('adapter:-ember-data-test-custom', adapter);
    adapter = '-ember-data-test-custom';
  }

  for (var prop in options) {
    registry.register('model:' + Ember.String.dasherize(prop), options[prop]);
  }

  registry.register('store:main', DS.Store.extend({
    adapter: adapter
  }));

  registry.optionsForType('serializer', { singleton: false });
  registry.optionsForType('adapter', { singleton: false });
  registry.register('adapter:-default', DS.Adapter);

  registry.register('serializer:-default', DS.JSONSerializer);
  registry.register('serializer:-rest', DS.RESTSerializer);
  registry.register('serializer:-rest-new', DS.RESTSerializer.extend({ isNewSerializerAPI: true }));

  registry.register('adapter:-active-model', DS.ActiveModelAdapter);
  registry.register('serializer:-active-model', DS.ActiveModelSerializer.extend({isNewSerializerAPI: true}));

  registry.register('adapter:-rest', DS.RESTAdapter);

  registry.injection('serializer', 'store', 'store:main');
  registry.register('transform:string', DS.StringTransform);
  registry.register('transform:number', DS.NumberTransform);
  registry.register('transform:date', DS.DateTransform);
  registry.register('transform:main', DS.Transform);

  env.serializer = container.lookup('serializer:-default');
  env.restSerializer = container.lookup('serializer:-rest');
  env.restNewSerializer = container.lookup('serializer:-rest-new');
  env.store = container.lookup('store:main');
  env.adapter = env.store.get('defaultAdapter');

  env.registry.register('serializer:-active-model', DS.ActiveModelSerializer.extend({isNewSerializerAPI: true}));
  env.registry.register('adapter:-active-model', DS.ActiveModelAdapter);
  env.registry.register('serializer:application', DS.ActiveModelSerializer.extend({isNewSerializerAPI: true}));


  return env;
}

output

{
  "data": null,
  "included": []
}

Aucun commentaire:

Enregistrer un commentaire