X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fdb_helper%2Fattr_duration.t;h=0b023b66d707d064e038741e2de501dd94fdb7a3;hb=5bfe4005e836dc3a91a590c9846fdb1b26a22426;hp=3af72968748ced8796e1b9bc6eb4fd67c3457c45;hpb=4180aaea33e9ff3bb35f3fa6cf91651a6225f7ad;p=kivitendo-erp.git diff --git a/t/db_helper/attr_duration.t b/t/db_helper/attr_duration.t index 3af729687..0b023b66d 100644 --- a/t/db_helper/attr_duration.t +++ b/t/db_helper/attr_duration.t @@ -4,16 +4,21 @@ use base qw(SL::DB::Object); __PACKAGE__->meta->setup( table => 'dummy', - columns => [ dummy => { type => 'numeric', precision => 2, scale => 12 }, ] + columns => [ + dummy => { type => 'numeric', precision => 2, scale => 12 }, + inty => { type => 'integer' }, + miny => { type => 'integer' }, + ] ); use SL::DB::Helper::AttrDuration; __PACKAGE__->attr_duration('dummy'); +__PACKAGE__->attr_duration_minutes('inty', 'miny'); package main; -use Test::More tests => 83; +use Test::More tests => 130; use Test::Exception; use strict; @@ -23,6 +28,7 @@ use utf8; use Data::Dumper; use Support::TestSetup; +use SL::Locale; sub new_item { return AttrDurationTestDummy->new(@_); @@ -31,6 +37,10 @@ sub new_item { Support::TestSetup::login(); my $item; +$::locale = Locale->new('en'); + +### attr_duration + # Wenn das Attribut undef ist: is(new_item->dummy, undef, 'uninitialized: raw'); is(new_item->dummy_as_hours, 0, 'uninitialized: as_hours'); @@ -147,10 +157,85 @@ is(new_item->assign_attributes('dummy_as_man_days_unit', 'h', 'dummy_as_ma is(new_item->assign_attributes('dummy_as_man_days', 3, 'dummy_as_man_days_unit', 'man_day')->dummy, 24, 'assign_attributes array 3man_day'); is(new_item->assign_attributes('dummy_as_man_days_unit', 'man_day', 'dummy_as_man_days', 3 )->dummy, 24, 'assign_attributes array man_day3'); +is(new_item->assign_attributes(dummy_as_man_days_string => '5,25', dummy_as_man_days_unit => 'h' )->dummy, 5.25, 'assign_attributes hash string 5,25h'); +is(new_item->assign_attributes(dummy_as_man_days_unit => 'h', dummy_as_man_days_string => '5,25')->dummy, 5.25, 'assign_attributes hash string h5,25'); + +is(new_item->assign_attributes(dummy_as_man_days_string => '5,25', dummy_as_man_days_unit => 'man_day')->dummy, 42, 'assign_attributes hash string 5,25man_day'); +is(new_item->assign_attributes(dummy_as_man_days_unit => 'man_day', dummy_as_man_days_string => '5,25' )->dummy, 42, 'assign_attributes hash string man_day5,25'); + +is(new_item->assign_attributes('dummy_as_man_days_string', '5,25', 'dummy_as_man_days_unit', 'h' )->dummy, 5.25, 'assign_attributes array 5,25h'); +is(new_item->assign_attributes('dummy_as_man_days_unit', 'h', 'dummy_as_man_days_string', '5,25')->dummy, 5.25, 'assign_attributes array h5,25'); + +is(new_item->assign_attributes('dummy_as_man_days_string', '5,25', 'dummy_as_man_days_unit', 'man_day')->dummy, 42, 'assign_attributes array 5,25man_day'); +is(new_item->assign_attributes('dummy_as_man_days_unit', 'man_day', 'dummy_as_man_days_string', '5,25' )->dummy, 42, 'assign_attributes array man_day5,25'); + # Parametervalidierung throws_ok { new_item()->dummy_as_man_days_unit('invalid') } qr/unknown.*unit/i, 'unknown unit'; lives_ok { new_item()->dummy_as_man_days_unit('h') } 'known unit h'; lives_ok { new_item()->dummy_as_man_days_unit('hour') } 'known unit hour'; lives_ok { new_item()->dummy_as_man_days_unit('man_day') } 'known unit man_day'; +### attr_duration_minutes + +# Wenn das Attribut undef ist: +is(new_item->inty, undef, 'uninitialized: raw'); +is(new_item->inty_as_hours, 0, 'uninitialized: as_hours'); +is(new_item->inty_as_minutes, 0, 'uninitialized: as_minutes'); +is(new_item->inty_as_duration_string, undef, 'uninitialized: as_duration_string'); + +# Auslesen kleiner 60 Minuten: +is(new_item(inty => 37)->inty, 37, 'initialized < 60: raw'); +is(new_item(inty => 37)->inty_as_hours, 0, 'initialized < 60: as_hours'); +is(new_item(inty => 37)->inty_as_minutes, 37, 'initialized < 60: as_minutes'); +is(new_item(inty => 37)->inty_as_duration_string, '0:37', 'initialized < 60: as_duration_string'); + +# Auslesen größer 60 Minuten: +is(new_item(inty => 145)->inty, 145, 'initialized > 60: raw'); +is(new_item(inty => 145)->inty_as_hours, 2, 'initialized > 60: as_hours'); +is(new_item(inty => 145)->inty_as_minutes, 25, 'initialized > 60: as_minutes'); +is(new_item(inty => 145)->inty_as_duration_string, '2:25', 'initialized > 60: as_duration_string'); + +$item = new_item(inty => 145); $item->inty_as_duration_string(undef); +is($item->inty, undef, 'write as_duration_string undef read raw'); +is($item->inty_as_minutes, 0, 'write as_duration_string undef read as_minutes'); +is($item->inty_as_hours, 0, 'write as_duration_string undef read as_hours'); +is($item->inty_as_duration_string, undef, 'write as_duration_string undef read as_duration_string'); + +$item = new_item(inty => 145); $item->inty_as_duration_string(''); +is($item->inty, undef, 'write as_duration_string "" read raw'); +is($item->inty_as_minutes, 0, 'write as_duration_string "" read as_minutes'); +is($item->inty_as_hours, 0, 'write as_duration_string "" read as_hours'); +is($item->inty_as_duration_string, undef, 'write as_duration_string "" read as_duration_string'); + +$item = new_item(inty => 145); $item->inty_as_duration_string("3:21"); +is($item->inty, 201, 'write as_duration_string 3:21 read raw'); +is($item->inty_as_minutes, 21, 'write as_duration_string 3:21 read as_minutes'); +is($item->inty_as_hours, 3, 'write as_duration_string 3:21 read as_hours'); +is($item->inty_as_duration_string, "3:21", 'write as_duration_string 3:21 read as_duration_string'); + +$item = new_item(inty => 145); $item->inty_as_duration_string("03:1"); +is($item->inty, 181, 'write as_duration_string 03:1 read raw'); +is($item->inty_as_minutes, 1, 'write as_duration_string 03:1 read as_minutes'); +is($item->inty_as_hours, 3, 'write as_duration_string 03:1 read as_hours'); +is($item->inty_as_duration_string, "3:01", 'write as_duration_string 03:1 read as_duration_string'); + +local %::myconfig = (numberformat => "1.000,00"); + +$item = new_item(miny_in_hours => 2.5); +is($item->miny, 150, 'write in_hours 2.5 read raw'); +is($item->miny_as_minutes, 30, 'write in_hours 2.5 read as_minutes'); +is($item->miny_as_hours, 2, 'write in_hours 2.5 read as_hours'); +is($item->miny_in_hours, 2.5, 'write in_hours 2.5 read in_hours'); +is($item->miny_in_hours_as_number, '2,50', 'write in_hours 2.5 read in_hours_as_number'); + +$item = new_item(miny_in_hours_as_number => '4,25'); +is($item->miny, 255, 'write in_hours_as_number 4,25 read raw'); +is($item->miny_as_minutes, 15, 'write in_hours_as_number 4,25 read as_minutes'); +is($item->miny_as_hours, 4, 'write in_hours_as_number 4,25 read as_hours'); +is($item->miny_in_hours, 4.25, 'write in_hours_as_number 4,25 read in_hours'); +is($item->miny_in_hours_as_number, '4,25', 'write in_hours_as_number 4,25 read in_hours_as_number'); + +# Parametervalidierung +throws_ok { new_item()->inty_as_duration_string('invalid') } qr/invalid.*format/i, 'invalid duration format'; + done_testing();