require 'spec_helper' describe Encore::Serializer do let(:serializer) { Encore::Serializer::Instance } let(:objects) { User.all } let(:serialized) { serializer.new(objects, include: include).as_json } before do run_migrations! spawn_objects! create_records! end let(:run_migrations!) do run_migration do create_table(:users, force: true) do |t| t.string :name, default: nil t.integer :project_id t.integer :event_result_id end create_table(:projects, force: true) do |t| t.string :name, default: nil t.integer :user_id end create_table(:event_results, force: true) do |t| t.string :score, default: nil t.integer :user_id end end end context 'underscore route name' do let(:spawn_objects!) do spawn_model('User') do has_many :event_results end spawn_serializer('UserSerializer') do attributes :name, :links def can_include %i(event_results) end end spawn_model('EventResult') do belongs_to :user end spawn_serializer('EventResultSerializer') do attributes :score end end let(:create_records!) do User.create name: 'Allan' User.create name: 'Doe' EventResult.create score: 'p1', user_id: 1 EventResult.create score: 'p2', user_id: 1 end let(:include) { '' } let(:expected_event_results) do { href: '/event_results?user_id=1', type: 'event_results' } end it { expect(serialized[:users][0][:links][:event_results]).to eq(expected_event_results) } end context 'underscore id' do let(:spawn_objects!) do spawn_model('User') spawn_serializer('UserSerializer') do attributes :name, :links end spawn_model('EventResult') do has_many :users end spawn_serializer('EventResultSerializer') do attributes :score def can_include %i(users) end end end let(:create_records!) do EventResult.create score: 'p1' EventResult.create score: 'p2' User.create name: 'Allan', event_result_id: 1 User.create name: 'Doe', event_result_id: 1 end let(:objects) { EventResult.all } let(:include) { '' } let(:expected_users) do { href: '/users?event_result_id=1', type: 'users' } end it { expect(serialized[:event_results][0][:links][:users]).to eq(expected_users) } end end