X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fpart%2Fassembly.t;h=6500dfa5c65420bb9da03c27eced85cda00caaa8;hb=991369b17d679e2855f4d5086d0b9769dc2ae1aa;hp=ccef0122d0bdc38046a2a377b978d3fa11293886;hpb=2fe91d5d526677004e48bad825ab7a9568a96b16;p=kivitendo-erp.git diff --git a/t/part/assembly.t b/t/part/assembly.t index ccef0122d..6500dfa5c 100644 --- a/t/part/assembly.t +++ b/t/part/assembly.t @@ -7,27 +7,79 @@ use Test::Exception; use SL::DB::Unit; use SL::DB::Part; use SL::DB::Assembly; +use SL::Dev::Part qw(new_assembly); +use SL::DB::Helper::ValidateAssembly; Support::TestSetup::login(); +$::locale = Locale->new("en"); clear_up(); reset_state(); -is( SL::DB::Manager::Part->get_all_count(), 3, "total number of parts created is 3"); +is( SL::DB::Manager::Part->get_all_count(), 4, "total number of parts created by reset_state() is 4"); -my $assembly_part = SL::DB::Manager::Part->find_by( partnumber => 'as1' ); -my $assembly_item_part = SL::DB::Manager::Part->find_by( partnumber => '19000' ); +my $assembly_part = SL::DB::Manager::Part->find_by( partnumber => '19000' ) || die "Can't find assembly 19000"; +my $assembly_item_part = SL::DB::Manager::Part->find_by( partnumber => '19000 1' ) || die "Can't find assembly item part '19000 1'"; -is($assembly_part->inventory_accno_id, undef, "assembly doesn't have an inventory accno id"); - -is($assembly_part->type, 'assembly', 'assembly has correct type'); -is( scalar @{$assembly_part->assemblies}, 2, 'assembly consists of two parts' ); +is($assembly_part->part_type, 'assembly', 'assembly has correct type'); +is( scalar @{$assembly_part->assemblies}, 3, 'assembly consists of three parts' ); # fetch assembly item corresponding to partnumber 19000 my $assembly_items = $assembly_part->find_assemblies( { parts_id => $assembly_item_part->id } ) || die "can't find assembly_item"; my $assembly_item = $assembly_items->[0]; -is($assembly_item->part->partnumber, '19000', 'assembly part part relation works'); -is($assembly_item->assembly_part->partnumber, 'as1', 'assembly part assembly part relation works'); +is($assembly_item->part->partnumber, '19000 1', 'assembly part part relation works'); +is($assembly_item->assembly_part->partnumber, '19000', 'assembly part assembly part relation works'); + + + +my $assembly2_part = new_assembly( partnumber => '20000', assnumber => 'as2' )->save; +my $retval = validate_assembly($assembly_part,$assembly2_part); +ok(!defined $retval, 'assembly 19000 can be child of assembly 20000' ); +$assembly2_part->add_assemblies(SL::DB::Assembly->new(parts_id => $assembly_part->id, qty => 3, bom => 1)); +$assembly2_part->save; + +my $assembly3_part = new_assembly( partnumber => '30000', assnumber => 'as3' )->save; +$retval = validate_assembly($assembly3_part,$assembly_part); +ok(!defined $retval, 'assembly 30000 can be child of assembly 19000' ); + +$retval = validate_assembly($assembly3_part,$assembly2_part); +ok(!defined $retval, 'assembly 30000 can be child of assembly 20000' ); + +$assembly_part->add_assemblies(SL::DB::Assembly->new(parts_id => $assembly3_part->id, qty => 4, bom => 1)); +$assembly_part->save; + +$retval = validate_assembly($assembly3_part,$assembly2_part); +ok(!defined $retval, 'assembly 30000 can be child of assembly 20000' ); + +$assembly2_part->add_assemblies(SL::DB::Assembly->new(parts_id => $assembly3_part->id, qty => 5, bom => 1)); +$assembly2_part->save; + +# fetch assembly item corresponding to partnumber 20000 +my $assembly2_items = $assembly2_part->find_assemblies() || die "can't find assembly_item"; +is( scalar @{$assembly2_items}, 5, 'assembly2 consists of ive parts' ); +my $assembly2_item = $assembly2_items->[3]; +is($assembly2_item->qty, 3, 'qty of 3rd assembly item is 3' ); +is($assembly2_item->part->part_type, 'assembly', '3rd assembly item \'' . $assembly2_item->part->partnumber . '\' is also an assembly'); +my $assembly3_items = $assembly2_item->part->find_assemblies() || die "can't find assembly_item"; +is( scalar @{$assembly3_items}, 4, 'assembly3 consists of four parts' ); + + + +# check loop to itself +$retval = validate_assembly($assembly_part,$assembly_part); +is( $retval,"The assembly '19000' cannot be a part from itself.", 'assembly loops to itself' ); +if (!$retval && $assembly_part->add_assemblies( SL::DB::Assembly->new(parts_id => $assembly_part->id, qty => 8, bom => 1))) { + $assembly_part->save; +} +is( scalar @{$assembly_part->assemblies}, 4, 'assembly consists of four parts' ); + +# check indirekt loop +$retval = validate_assembly($assembly2_part,$assembly_part); +ok( $retval, 'assembly indirect loop' ); +if (!$retval && $assembly_part->add_assemblies( SL::DB::Assembly->new(parts_id => $assembly2_part->id, qty => 9, bom => 1))) { + $assembly_part->save; +} +is( scalar @{$assembly_part->assemblies}, 4, 'assembly consists of four parts' ); clear_up(); done_testing; @@ -40,26 +92,7 @@ sub clear_up { sub reset_state { my %params = @_; - # create an assembly that consists of two parts - my ($part1, $part2, $unit, $assembly_part, $assembly_1, $assembly_2); - $unit = SL::DB::Manager::Unit->find_by(name => 'Stck') || die "Can't find unit 'Stck'"; - - $part1 = SL::DB::Part->new_part(partnumber => '19000', - unit => $unit->name, - )->save; - $part2 = $part1->clone_and_reset($part1); - $part2->partnumber($part1->partnumber + 1); - $part2->save; - - $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); - $assembly_part->add_assemblies($assembly_1, $assembly_2); - $assembly_part->save; + my $assembly = new_assembly( assnumber => '19000', partnumber => '19000' )->save; }; 1;