Ware/Erzeugnis/Dienstleistung per parts.part_type unterscheiden 2
[kivitendo-erp.git] / t / part / assembly.t
1 use strict;
2 use Test::More;
3
4 use lib 't';
5 use Support::TestSetup;
6 use Test::Exception;
7 use SL::DB::Unit;
8 use SL::DB::Part;
9 use SL::DB::Assembly;
10
11 Support::TestSetup::login();
12
13 clear_up();
14 reset_state();
15
16 is( SL::DB::Manager::Part->get_all_count(), 3,  "total number of parts created is 3");
17
18 my $assembly_part      = SL::DB::Manager::Part->find_by( partnumber => 'as1' );
19 my $assembly_item_part = SL::DB::Manager::Part->find_by( partnumber => '19000' );
20
21 is($assembly_part->inventory_accno_id, undef, "assembly doesn't have an inventory accno id");
22
23 is($assembly_part->part_type, 'assembly', 'assembly has correct type');
24 is( scalar @{$assembly_part->assemblies}, 2, 'assembly consists of two parts' );
25
26 # fetch assembly item corresponding to partnumber 19000
27 my $assembly_items = $assembly_part->find_assemblies( { parts_id => $assembly_item_part->id } ) || die "can't find assembly_item";
28 my $assembly_item = $assembly_items->[0];
29 is($assembly_item->part->partnumber, '19000', 'assembly part part relation works');
30 is($assembly_item->assembly_part->partnumber, 'as1', 'assembly part assembly part relation works');
31
32 clear_up();
33 done_testing;
34
35 sub clear_up {
36   SL::DB::Manager::Assembly->delete_all(all => 1);
37   SL::DB::Manager::Part->delete_all(    all => 1);
38 };
39
40 sub reset_state {
41   my %params = @_;
42
43   # create an assembly that consists of two parts
44   my ($part1, $part2, $unit, $assembly_part, $assembly_1, $assembly_2);
45   $unit = SL::DB::Manager::Unit->find_by(name => 'Stck') || die "Can't find unit 'Stck'";
46
47   $part1 = SL::DB::Part->new_part(partnumber => '19000',
48                                   unit       => $unit->name,
49                                   part_type  => 'part',
50                                  )->save;
51   $part2 = $part1->clone_and_reset($part1);
52   $part2->partnumber($part1->partnumber + 1);
53   $part2->save;
54
55   $assembly_part = SL::DB::Part->new_assembly(partnumber         => 'as1',
56                                                  description        => 'assembly',
57                                                  unit               => $unit->name,
58                                                 );
59   $assembly_1 = SL::DB::Assembly->new(parts_id => $part1->id, qty => 3, bom => 1);
60   $assembly_2 = SL::DB::Assembly->new(parts_id => $part2->id, qty => 3, bom => 1);
61   $assembly_part->add_assemblies($assembly_1, $assembly_2);
62   $assembly_part->save;
63 };
64
65 1;