require 'spec_helper' describe Encore::Entity::Output::JSON do describe :InstanceMethods do describe :as_json do context 'for simple entity' do before do # Create a model spawn_model :User # Create an entity spawn_entity :UserEntity do expose :name end run_migration do create_table(:users, force: true) do |t| t.string :name end end end let(:user) { User.create(name: 'Art Vandelay') } let(:entity) { UserEntity.new(user) } let(:json) { entity.as_json } it { expect(json.keys).to include :id, :name } it { expect(json[:id]).to eql user.id } it { expect(json[:name]).to eql 'Art Vandelay' } end context 'for entity with associations' do before do # Create a model spawn_model :User do has_many :comments end # Create a model spawn_model :Comment # Create an entity spawn_entity :UserEntity do expose :name expose_many :comments end run_migration do create_table(:users, force: true) do |t| t.string :name end create_table(:comments, force: true) do |t| t.text :body t.integer :user_id end end end let(:user) do User.create(name: 'Art Vandelay').tap do |user| user.comments << Comment.create(body: 'Test 1') user.comments << Comment.create(body: 'Test 2') end end let(:entity) { UserEntity.new(user) } let(:json) { entity.as_json } it { expect(json.keys).to include :id, :name, :comments } it { expect(json[:comments]).to be_instance_of Array } it { expect(json[:comments]).to include *Comment.pluck(:id) } end end end end