Skip to content

Commit

Permalink
Probar que se genere la cantidad de objetos correcta
Browse files Browse the repository at this point in the history
  • Loading branch information
mauriciopasquier committed Oct 20, 2015
1 parent 7979bf8 commit d568cf4
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 24 deletions.
2 changes: 1 addition & 1 deletion test/controllers/perfiles_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ class PerfilesControllerTest < ActionController::TestCase
usuario = loguearse_como 'Autorizado'
perfil = create(:perfil, usuario: usuario)
perfil.horizontes.create(attributes_for(:horizonte))
analitico = attributes_for(:analitico_completo, id: perfil.analiticos.first.id)
analitico = attributes_for(:analitico, :con_datos, id: perfil.analiticos.first.id)

put :update_analiticos, id: perfil.to_param, perfil: {
analiticos_attributes: { '0' => analitico }
Expand Down
6 changes: 4 additions & 2 deletions test/factories/analiticos.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# encoding: utf-8
FactoryGirl.define do
factory :analitico do
horizonte
trait :con_horizonte do
horizonte
end

factory :analitico_completo do
trait :con_datos do
registro { rand(100) }
humedad { generate(:porcentaje).round 2 }
s { generate :porcentaje }
Expand Down
2 changes: 1 addition & 1 deletion test/factories/horizontes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
ph 1.5

factory :horizonte_completo do
association :analitico, factory: :analitico_completo
association :analitico, :con_datos, strategy: :build
limite
consistencia
estructura
Expand Down
73 changes: 53 additions & 20 deletions test/models/deserializador/deserializador_constructor_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@
end

let(:csv) { perfil_a_csv perfil_nuevo }
let(:constructor_actualizado) do
let(:constructor_creador) do
Deserializador::Constructor.new(csv)
end
let(:constructor_actualizador) do
Deserializador::Constructor.new(perfil_a_csv(perfil_cambiado), actualizar: true)
end

Expand Down Expand Up @@ -82,28 +85,34 @@

describe '#actualizar?' do
it 'crea los datos por omisión' do
Deserializador::Constructor.new(csv).actualizar?.must_equal false
constructor_creador.actualizar?.must_equal false
end

it 'registra si hay que actualizar' do
constructor_actualizado.actualizar?.must_equal true
constructor_actualizador.actualizar?.must_equal true
end
end

describe '#construir_perfil' do
it 'es nuevo por omisión' do
Deserializador::Constructor.new(csv).construir_perfil.wont_be :persisted?
constructor_creador.construir_perfil.wont_be :persisted?
end

it 'crea el perfil' do
lambda do
constructor_creador.construir_perfil.save.must_equal true
end.must_change 'Perfil.count'
end

it 'si hay que actualizar carga el existente' do
perfil = constructor_actualizado.construir_perfil
perfil = constructor_actualizador.construir_perfil

perfil.must_be :persisted?
perfil.must_equal perfil_existente
end

it 'carga un perfil con datos cambiados' do
perfil = constructor_actualizado.construir
perfil = constructor_actualizador.construir

perfil.must_be :changed?
atributos_de_perfil.each do |atributo|
Expand All @@ -112,36 +121,46 @@
end

it 'actualiza el perfil' do
perfil = constructor_actualizado.construir
perfil = constructor_actualizador.construir

lambda do
perfil.save.must_equal true
end.must_change 'Perfil.count', 0

perfil.save.must_equal true
perfil_existente.reload
atributos_de_perfil.each do |atributo|
perfil_existente.send(atributo).must_equal perfil_cambiado.send(atributo), "Falla #{atributo}"
end
end

it 'no actualiza el usuario' do
perfil = constructor_actualizado.construir
perfil = constructor_actualizador.construir

perfil.usuario_id.wont_equal perfil_cambiado.usuario_id
perfil.usuario_id.must_equal perfil_existente.usuario_id
end
end

describe '#construir_horizontes' do
let(:perfil_creado) { Deserializador::Constructor.new(csv).construir }

it 'son nuevos si el perfil es nuevo' do
perfil_creado.horizontes.any?.must_equal true
perfil = constructor_creador.construir

perfil_creado.horizontes.each do |horizonte|
perfil.horizontes.any?.must_equal true
perfil.horizontes.each do |horizonte|
horizonte.wont_be :persisted?
end
end

it 'crea el perfil y sus horizontes' do
perfil = constructor_creador.construir

lambda do
perfil.save.must_equal true
end.must_change 'Horizonte.count'
end

it 'son existentes si estamos actualizando' do
perfil = constructor_actualizado.construir
perfil = constructor_actualizador.construir

perfil.horizontes.any?.must_equal true
perfil.horizontes.each do |horizonte|
Expand All @@ -150,7 +169,7 @@
end

it 'carga horizontes con datos actualizados' do
perfil = constructor_actualizado.construir
perfil = constructor_actualizador.construir

perfil.must_be :changed?
perfil.horizontes.size.must_equal perfil_existente.horizontes.size
Expand All @@ -162,18 +181,29 @@
end

it 'actualiza los horizontes' do
perfil = constructor_actualizado.construir
perfil = constructor_actualizador.construir

lambda do
perfil.save.must_equal true
end.must_change 'Horizonte.count', 0

perfil.save.must_equal true
perfil_existente.reload.horizontes.each do |h|
atributos_de_horizonte.each do |atributo|
h.send(atributo).must_equal perfil_cambiado.horizontes.find(h.id).send(atributo), "Falla #{atributo}"
end
end
end

it 'crea los analíticos' do
perfil = constructor_creador.construir

lambda do
perfil.save.must_equal true
end.must_change 'Analitico.count'
end

it 'carga analíticos con datos actualizados' do
perfil = constructor_actualizado.construir
perfil = constructor_actualizador.construir

perfil.must_be :changed?
perfil.analiticos.size.must_equal perfil_existente.horizontes.size
Expand All @@ -185,9 +215,12 @@
end

it 'actualiza los analíticos' do
perfil = constructor_actualizado.construir
perfil = constructor_actualizador.construir

lambda do
perfil.save.must_equal true
end.must_change 'Analitico.count', 0

perfil.save.must_equal true
perfil_existente.reload.analiticos.each do |a|
atributos_de_analitico.each do |atributo|
a.send(atributo).must_equal perfil_cambiado.analiticos.find(a.id).send(atributo), "Falla #{atributo}"
Expand Down
4 changes: 4 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ class MiniTest::Unit::TestCase
# build_stubbed, create, attributes_for, y los *_list)
include FactoryGirl::Syntax::Methods

# Incluye assert_difference
# TODO sacar después de actualizar a rails 4.1?
include ActiveSupport::Testing::Assertions

def setup
DatabaseCleaner.start
end
Expand Down

0 comments on commit d568cf4

Please sign in to comment.