my
%defaults
= (
target_quantity
=> 30,
base_nic_per_ml
=> 36,
target_nic_per_ml
=> 12,
target_pg
=> 65,
target_vg
=> 35,
flavor_array
=> [
+{
tag
=>
'hpno'
,
percentage
=> 20 }
],
);
my
$recipe
= App::vaporcalc::Recipe->new(
%defaults
);
ok
$recipe
->flavor_array->has_any(
sub
{
$_
->isa(
'App::vaporcalc::Flavor'
) }),
'flavor_array autovivication ok'
;
ok
$recipe
->notes->count == 0,
'notes default ok'
;
my
$hash
=
$recipe
->TO_JSON;
is_deeply
$hash
,
+{
target_quantity
=> 30,
base_nic_per_ml
=> 36,
base_nic_type
=>
'PG'
,
target_nic_per_ml
=> 12,
target_pg
=> 65,
target_vg
=> 35,
notes
=> [],
flavor_array
=> [
+{
tag
=>
'hpno'
,
percentage
=> 20,
type
=>
'PG'
},
],
},
'TO_JSON ok'
or diag explain
$hash
;
subtest
'storage'
=>
sub
{
if
($^O eq
'MSWin32'
) {
plan
skip_all
=>
'Temp files fail on some Windows platforms'
;
}
my
$fh
= File::Temp->new(
UNLINK
=> 1 );
my
$fname
=
$fh
->filename;
ok
$recipe
->save(
$fname
),
'save ok'
;
my
$loaded
= App::vaporcalc::Recipe->load(
$fname
);
isa_ok
$loaded
,
'App::vaporcalc::Recipe'
;
for
my
$key
(
keys
%defaults
) {
next
if
$key
eq
'flavor_array'
;
ok
$loaded
->
$key
eq
$defaults
{
$key
},
"$key loaded ok"
}
};
my
$result
=
$recipe
->calc;
ok
$result
->flavor_total == 6,
'6ml flavor_total'
or diag explain
$result
;
ok
$result
->total == 30,
'30ml total'
;
ok
$result
->flavors->
keys
->count == 1,
'1 flavor listed'
;
ok
$result
->pg == 3.5,
'3.5ml pg'
;
ok
$result
->vg == 10.5,
'10.5ml vg'
;
ok
$result
->nic == 10,
'10ml nic'
;
my
%badratio
=
%defaults
;
$badratio
{target_pg} = 30;
$badratio
{target_vg} = 40;
like exception {; App::vaporcalc::Recipe->new(
%badratio
) },
qr/target_vg/
,
'bad PG-VG ratio dies'
;
done_testing