JSONApi progress
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Users::ListSerializer, type: :serializer do
|
||||
it "does not perform extra queries" do
|
||||
l = create :list
|
||||
o1 = create :order, list: l
|
||||
create :product_order, order: o1
|
||||
create :product_order, order: o1
|
||||
o2 = create :order, list: l
|
||||
create :product_order, order: o2
|
||||
create :product_order, order: o2
|
||||
l.add_user create :user
|
||||
l.add_user create :user
|
||||
list = List.find(l.id)
|
||||
[list].include_relations(:users)
|
||||
result = nil
|
||||
#result = expect{ JSONAPI::Serializer.serialize(list, serializer: described_class) }.not_to perform_any_queries
|
||||
expect{ result = JSONAPI::Serializer.serialize(list, serializer: described_class, include: %w[supplier users]) }.not_to exceed_query_limit 1 # supplier
|
||||
binding.pry
|
||||
|
||||
|
||||
#expect{ object_as_json orders }.not_to exceed_query_limit 0
|
||||
#expect{ object_as_json list }.not_to exceed_query_limit 0
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1,7 +1,6 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Users::OrderSerializer do
|
||||
let(:adapter){ ActiveModel::Serializer.config.adapter }
|
||||
describe Users::OrderSerializer, type: :serializer do
|
||||
it "does not perform extra queries" do
|
||||
l = create :list
|
||||
o1 = create :order, list: l
|
||||
@@ -13,18 +12,10 @@ describe Users::OrderSerializer do
|
||||
list = List.find(l.id)
|
||||
orders = list.orders.include_relation(:product_orders)
|
||||
#expect{ object_as_json orders }.not_to exceed_query_limit 0
|
||||
expect{ object_as_json orders }.not_to perform_any_queries
|
||||
result = object_as_json(orders)
|
||||
result = nil
|
||||
expect{ result = JSONAPI::Serializer.serialize(orders, serializer: described_class, include: 'product_orders', is_collection: true)}.not_to perform_any_queries
|
||||
binding.pry
|
||||
#result[:included].size.should eq 4
|
||||
result[:included].size.should eq 4
|
||||
end
|
||||
|
||||
def object_as_json(obj)
|
||||
serializer = if obj.is_a?(Array)
|
||||
ActiveModel::Serializer::ArraySerializer.new(obj, serializer: described_class, add_included: true)
|
||||
else
|
||||
serializer = described_class.new(obj)
|
||||
end
|
||||
adapter.new(serializer, include: %w[product_orders]).as_json
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe Users::TableSerializer, type: :serializer do
|
||||
it "does not perform extra queries" do
|
||||
table = create :table
|
||||
result = object_as_json(table)
|
||||
binding.pry
|
||||
result[:included].size.should eq 4
|
||||
end
|
||||
|
||||
end
|
||||
+3
-2
@@ -1,6 +1,6 @@
|
||||
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
||||
require 'simplecov'
|
||||
SimpleCov.start 'rails'
|
||||
#require 'simplecov'
|
||||
#SimpleCov.start 'rails'
|
||||
ENV["RAILS_ENV"] ||= 'test'
|
||||
require File.expand_path("../config/environment", File.dirname(__FILE__))
|
||||
require 'rspec/rails'
|
||||
@@ -102,6 +102,7 @@ RSpec.configure do |config|
|
||||
config.include Features::BasicHelpers, type: :feature
|
||||
config.include SpecRouteHelpers, type: :feature
|
||||
config.include SpecEmberHelpers, type: :feature
|
||||
config.include SerializersTestHelpers, type: :serializer
|
||||
#config.use_transactional_fixtures = true
|
||||
config.infer_base_class_for_anonymous_controllers = true
|
||||
config.filter_run_excluding broken: true
|
||||
|
||||
@@ -28,7 +28,7 @@ RSpec::Matchers.define :exceed_query_limit do |expected|
|
||||
begin
|
||||
record = CouchRest.get(q)
|
||||
if record.is_a?(SimplyStored::Couch)
|
||||
info += " #{record.class.name}"
|
||||
info = "#{record.class.name.ljust(20)} => #{q.last(32)}"
|
||||
end
|
||||
rescue
|
||||
end
|
||||
@@ -64,7 +64,7 @@ RSpec::Matchers.define :perform_any_queries do |expected|
|
||||
begin
|
||||
record = CouchRest.get(q)
|
||||
if record.is_a?(SimplyStored::Couch)
|
||||
info += " #{record.class.name}"
|
||||
info = "#{record.class.name.ljust(20)} => #{q.last(32)}"
|
||||
end
|
||||
rescue
|
||||
end
|
||||
@@ -0,0 +1,14 @@
|
||||
module SerializersTestHelpers
|
||||
|
||||
def object_as_json(obj)
|
||||
serializer = if obj.is_a?(Array)
|
||||
ActiveModel::Serializer::ArraySerializer.new(obj, serializer: described_class, add_included: true)
|
||||
else
|
||||
serializer = described_class.new(obj)
|
||||
end
|
||||
adapter.new(serializer, include: %w[product_orders]).as_json
|
||||
end
|
||||
def adapter
|
||||
@active_model_adapter = ActiveModel::Serializer.config.adapter
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user