diff --git a/test/controllers/perfiles_controller_test.rb b/test/controllers/perfiles_controller_test.rb index 299fbf36..1ec41a47 100644 --- a/test/controllers/perfiles_controller_test.rb +++ b/test/controllers/perfiles_controller_test.rb @@ -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 } diff --git a/test/factories/analiticos.rb b/test/factories/analiticos.rb index 35a7a14c..7eca2275 100644 --- a/test/factories/analiticos.rb +++ b/test/factories/analiticos.rb @@ -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 } diff --git a/test/factories/horizontes.rb b/test/factories/horizontes.rb index 25b5f2f9..8a0b09c6 100644 --- a/test/factories/horizontes.rb +++ b/test/factories/horizontes.rb @@ -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 diff --git a/test/models/deserializador/deserializador_constructor_test.rb b/test/models/deserializador/deserializador_constructor_test.rb index 8557a959..49bde90b 100644 --- a/test/models/deserializador/deserializador_constructor_test.rb +++ b/test/models/deserializador/deserializador_constructor_test.rb @@ -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 @@ -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| @@ -112,9 +121,12 @@ 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}" @@ -122,7 +134,7 @@ 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 @@ -130,18 +142,25 @@ 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| @@ -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 @@ -162,9 +181,12 @@ 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}" @@ -172,8 +194,16 @@ 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 @@ -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}" diff --git a/test/test_helper.rb b/test/test_helper.rb index 65e9cef1..c5b66354 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -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