X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=t%2Fdb_helper%2Fattr_duration.t;h=0b023b66d707d064e038741e2de501dd94fdb7a3;hb=f24cf1f5ab8428ced545a382d0f0179ae6f40a81;hp=da05a32114024ba3cd9108a163682cbdde275d26;hpb=6395006f1bb009faaf6762f9d21949bbc2f6a0ff;p=kivitendo-erp.git diff --git a/t/db_helper/attr_duration.t b/t/db_helper/attr_duration.t index da05a3211..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 => 91; +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'); @@ -165,4 +175,67 @@ 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();