diff options
| author | Teddy Wing | 2017-11-17 17:05:57 +0100 |
|---|---|---|
| committer | Teddy Wing | 2017-11-17 17:05:57 +0100 |
| commit | fbb667fd728aea64f58b6f4e68e180afa169cb2b (patch) | |
| tree | ec2aa98fc555f48055f4e2540f02af04b3b9d365 | |
| parent | 021b3ede34b9f17a3cd6ad27f9bde55b01ef2012 (diff) | |
| download | chouette-core-fbb667fd728aea64f58b6f4e68e180afa169cb2b.tar.bz2 | |
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
| -rw-r--r-- | app/models/netex_import.rb | 2 | ||||
| -rw-r--r-- | spec/models/netex_import_spec.rb | 11 |
2 files changed, 12 insertions, 1 deletions
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 |
