use File::Temp ();
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';
## TO_JSON
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;
## Role::Store
subtest 'storage' => sub {
if ($^O eq 'MSWin32') {
plan skip_all => 'Temp files fail on some Windows platforms';
}
# save
my $fh = File::Temp->new( UNLINK => 1 );
my $fname = $fh->filename;
ok $recipe->save($fname), 'save ok';
# load
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"
}
};
## Role::Calc
# calc
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';
## exceptions
# PG + VG != 100%
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