From fbb667fd728aea64f58b6f4e68e180afa169cb2b Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Fri, 17 Nov 2017 17:05:57 +0100 Subject: NetexImport: Don't destroy non-existent Referentials Luc discovered this error in my method that destroys associated non-ready `Referential`s: > WorkbenchImport.destroy_all WorkbenchImport Load (3.0ms) SELECT "public"."imports".* FROM "public"."imports" WHERE "public"."imports"."type" IN ('WorkbenchImport') (1.5ms) BEGIN ImportMessage Load (2.7ms) SELECT "public"."import_messages".* FROM "public"."import_messages" WHERE "public"."import_messages"."import_id" = $1 [["import_id", 58]] ImportResource Load (1.9ms) SELECT "public"."import_resources".* FROM "public"."import_resources" WHERE "public"."import_resources"."import_id" = $1 [["import_id", 58]] Import Load (0.3ms) SELECT "public"."imports".* FROM "public"."imports" WHERE "public"."imports"."parent_id" = $1 [["parent_id", 58]] ImportMessage Load (0.5ms) SELECT "public"."import_messages".* FROM "public"."import_messages" WHERE "public"."import_messages"."import_id" = $1 [["import_id", 59]] ImportResource Load (4.8ms) SELECT "public"."import_resources".* FROM "public"."import_resources" WHERE "public"."import_resources"."import_id" = $1 [["import_id", 59]] SQL (1.3ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 636]] SQL (0.3ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 635]] SQL (0.2ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 634]] SQL (0.2ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 633]] SQL (0.2ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 632]] SQL (0.2ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 631]] SQL (0.2ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 630]] SQL (0.1ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 629]] SQL (0.2ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 628]] SQL (0.1ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 627]] SQL (0.1ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 626]] SQL (0.3ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 625]] SQL (0.3ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 624]] SQL (0.2ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 623]] SQL (0.2ms) DELETE FROM "public"."import_resources" WHERE "public"."import_resources"."id" = $1 [["id", 622]] Import Load (0.3ms) SELECT "public"."imports".* FROM "public"."imports" WHERE "public"."imports"."parent_id" = $1 [["parent_id", 59]] Referential Load (0.6ms) SELECT "public"."referentials".* FROM "public"."referentials" WHERE "public"."referentials"."id" = $1 LIMIT 1 [["id", 18]] (0.2ms) ROLLBACK NoMethodError: undefined method `ready' for nil:NilClass from .../stif-boiv/app/models/netex_import.rb:20:in `destroy_non_ready_referential' Since `referential` is not a required attribute, it can be nil. That was causing this to break because I tried to destroy a `Referential` that doesn't exist. Check that there's an associated `Referential` before trying to destroy it. Refs #4991 --- app/models/netex_import.rb | 2 +- spec/models/netex_import_spec.rb | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/models/netex_import.rb b/app/models/netex_import.rb index 535ca58f3..a7a5bb9b8 100644 --- a/app/models/netex_import.rb +++ b/app/models/netex_import.rb @@ -17,7 +17,7 @@ class NetexImport < Import private def destroy_non_ready_referential - unless referential.ready + if referential && !referential.ready referential.destroy end end diff --git a/spec/models/netex_import_spec.rb b/spec/models/netex_import_spec.rb index d52d475cc..c6051a869 100644 --- a/spec/models/netex_import_spec.rb +++ b/spec/models/netex_import_spec.rb @@ -24,5 +24,16 @@ RSpec.describe NetexImport, type: :model do Referential.where(id: referential_ready_true.id).exists? ).to be true end + + it "doesn't try to destroy nil referentials" do + workbench_import = create(:workbench_import) + create( + :netex_import, + parent: workbench_import, + referential: nil + ) + + expect { workbench_import.destroy }.not_to raise_error + end end end -- cgit v1.2.3