t/part/assortment.t
[kivitendo-erp.git] / t / part / assortment.t
1 use strict;
2 use Test::More;
3
4 use lib 't';
5 use Support::TestSetup;
6 use Carp;
7 use Test::Exception;
8 use SL::DB::Unit;
9 use SL::DB::Part;
10 use Data::Dumper;
11
12 Support::TestSetup::login();
13
14 clear_up();
15 reset_state();
16
17 is( SL::DB::Manager::Part->get_all_count(), 3,  "total number of parts created is 3");
18
19 my $assortment = SL::DB::Manager::Part->find_by( partnumber => 'as1' );
20
21 is($assortment->part_type,                  'assortment', 'assortment has correct part_type');
22 is(scalar @{$assortment->assortment_items},  2,           'assortment has two parts');
23 is($assortment->items_sellprice_sum,        19.98,        'assortment sellprice sum ok');
24 is($assortment->items_lastcost_sum,         13.32,        'assortment lastcost sum ok');
25
26 my $assortment_item = $assortment->assortment_items->[0];
27 is( $assortment_item->assortment->partnumber, 'as1', "assortment_item links back to correct assortment");
28
29 clear_up();
30 done_testing;
31
32 sub reset_state {
33   my %params = @_;
34
35   # SL::DB::Manager::AssortmentItem->delete_all(all => 1);
36   # SL::DB::Manager::Part->delete_all(all => 1);
37   my ($part1, $part2, $unit, $assortment_part, $assortment_1, $assortment_2);
38
39   $unit = SL::DB::Manager::Unit->find_by(name => 'Stck') || die "Can't find unit 'Stck'";
40   $part1 = SL::DB::Part->new_part( partnumber         => '7777',
41                                    description        => "assortment part 1",
42                                    unit               => $unit->name,
43                                    sellprice          => '3.33',
44                                    lastcost           => '2.22',
45                                  )->save;
46   $part2 = $part1->clone_and_reset($part1);
47   $part2->partnumber( $part1->partnumber + 1 );
48   $part2->description( "assortment part 2" );
49   $part2->save;
50
51   $assortment_part = SL::DB::Part->new_assortment( partnumber         => 'as1',
52                                                    description        => 'assortment',
53                                                    sellprice          => '0',
54                                                    unit               => $unit->name);
55   $assortment_1 = SL::DB::AssortmentItem->new( parts_id => $part1->id, qty => 3, unit => $part1->unit, position => 1);
56   $assortment_2 = SL::DB::AssortmentItem->new( parts_id => $part2->id, qty => 3, unit => $part2->unit, position => 2);
57   $assortment_part->add_assortment_items($assortment_1, $assortment_2);
58   $assortment_part->save or die "Couldn't save assortment";
59
60 };
61
62 sub clear_up {
63   SL::DB::Manager::AssortmentItem->delete_all(all => 1);
64   SL::DB::Manager::Part->delete_all(          all => 1);
65 };
66
67
68 1;