From cf00195c32d005615b00a67568a19be3fec41817 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Tue, 16 Aug 2016 16:54:19 +0200 Subject: [PATCH] =?utf8?q?SL::DB::Part:=20Setter=20f=C3=BCr=20type=3Dassem?= =?utf8?q?bly=20bzgl.=20inventory=5Faccno=5Fid=20fixen?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit inventory_accno_id muss für Typ »assembly« immer auf undef stehen. Das testet auch der Testcase. »type« hat allerdings das Falsche gemacht, wofür im Testcase versucht wurde, ein Workaround zu implementieren, indem »inventory_accno_id« explizit überschrieben werden. Leider schlug der Test manchmal fehl, trotz des Workarounds: je nachdem, ob beim Anlegen (»new_assembly«) zuerst der Parameter für »type« oder der für »inventory_accno_id« ausgeführt wurde. Die Reihenfolge der Ausführung ist deswegen nicht deterministisch, weil in Perl das Iterieren über Hashes gewollt nichtdeterministisch ist, um Sicherheitsproblemen vorzubeugen. Wir wandeln Funktionsparameter beim Anlegen von Rose-Objekten explizit von Listen in Hashes (SL::DB::Object::assign_attributes); anschließend wird über das Hash iteriert. Im konkreten Fall enthält das Hash sowohl »type« als auch »inventory_accno_id«, und je Perls internem Seed bzgl. der Hashiteration wurde mal die eine, mal die andere Setter-Funktion zuerst ausgeführt. --- SL/DB/Part.pm | 2 +- t/part/assembly.t | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/SL/DB/Part.pm b/SL/DB/Part.pm index 57f0f31ab..a83e9bd75 100644 --- a/SL/DB/Part.pm +++ b/SL/DB/Part.pm @@ -70,7 +70,7 @@ sub type { if (@_ > 1) { die 'invalid type' unless $type =~ /^(?:part|service|assembly)$/; $self->assembly( $type eq 'assembly' ? 1 : 0); - $self->inventory_accno_id($type ne 'service' ? 1 : undef); + $self->inventory_accno_id($type eq 'part' ? 1 : undef); } return 'assembly' if $self->assembly; diff --git a/t/part/assembly.t b/t/part/assembly.t index ccef0122d..d7da36cca 100644 --- a/t/part/assembly.t +++ b/t/part/assembly.t @@ -54,7 +54,6 @@ sub reset_state { $assembly_part = SL::DB::Part->new_assembly(partnumber => 'as1', description => 'assembly', unit => $unit->name, - inventory_accno_id => undef, # override ); $assembly_1 = SL::DB::Assembly->new(parts_id => $part1->id, qty => 3, bom => 1); $assembly_2 = SL::DB::Assembly->new(parts_id => $part2->id, qty => 3, bom => 1); -- 2.20.1