X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=t%2FPrices.t;h=b7e2aa0d206f7737cd733fd5997c99f8e24be0e4;hb=f1f9c6dc746db9c58ce4eaca10ee9a4a7137c6f4;hp=c5c744f7bbef283400cdb282c0bc743fe47b2566;hpb=7e89301ab2eca57aa13256f9ed4c8351834476e3;p=koha-ffzg.git diff --git a/t/Prices.t b/t/Prices.t old mode 100644 new mode 100755 index c5c744f7bb..b7e2aa0d20 --- a/t/Prices.t +++ b/t/Prices.t @@ -8,73 +8,69 @@ use Module::Load::Conditional qw/check_install/; BEGIN { if ( check_install( module => 'Test::DBIx::Class' ) ) { - plan tests => 17; + plan tests => 16; } else { plan skip_all => "Need Test::DBIx::Class" } } use_ok('C4::Acquisition'); -use_ok('C4::Bookseller'); use_ok('C4::Context'); use_ok('Koha::Number::Price'); t::lib::Mocks::mock_preference( 'gist', '0.02|0.05|0.196' ); -use Test::DBIx::Class { - schema_class => 'Koha::Schema', - connect_info => ['dbi:SQLite:dbname=:memory:','',''], - connect_opts => { name_sep => '.', quote_char => '`', }, - fixture_class => '::Populate', -}, 'Currency' ; +use Test::DBIx::Class; my $db = Test::MockModule->new('Koha::Database'); $db->mock( _new_schema => sub { return Schema(); } ); +Koha::Database::flush_schema_cache(); fixtures_ok [ Currency => [ [ qw/ currency symbol rate active / ], - [[ 'my_cur', '€', 1, 1, ]], + [ 'my_cur', '€', 1, 1, ], + ], + Aqbookseller => [ + [ qw/ id name listincgst invoiceincgst / ], + [ 1, '0 0', 0, 0 ], + [ 2, '0 1', 0, 1 ], + [ 3, '1 0', 1, 0 ], + [ 4, '1 1', 1, 1 ], ], ], 'add currency fixtures'; my $bookseller_module = Test::MockModule->new('Koha::Acquisition::Bookseller'); -my ( $basketno_0_0, $basketno_1_1, $basketno_1_0, $basketno_0_1 ); -my ( $invoiceid_0_0, $invoiceid_1_1, $invoiceid_1_0, $invoiceid_0_1 ); +my ( $basketno_0_0, $basketno_1_1 ); +my ( $invoiceid_0_0, $invoiceid_1_1 ); my $today; for my $currency_format ( qw( US FR ) ) { t::lib::Mocks::mock_preference( 'CurrencyFormat', $currency_format ); - subtest 'Configuration 1: 0 0' => sub { + subtest 'Configuration 1: 0 0 (Vendor List prices do not include tax / Invoice prices do not include tax)' => sub { plan tests => 8; - $bookseller_module->mock( - 'fetch', - sub { - return { listincgst => 0, invoiceincgst => 0 }; - } - ); my $biblionumber_0_0 = 42; my $order_0_0 = { biblionumber => $biblionumber_0_0, quantity => 2, - listprice => 82.000000, - unitprice => 73.80000, + listprice => 82, + unitprice => 73.80, quantityreceived => 2, basketno => $basketno_0_0, invoiceid => $invoiceid_0_0, rrp => 82.00, ecost => 73.80, tax_rate => 0.0500, - discount => 10.0000, + discount => 10, datereceived => $today }; $order_0_0 = C4::Acquisition::populate_order_with_prices( { order => $order_0_0, - booksellerid => 'just_something', + booksellerid => 1, ordering => 1, } ); @@ -113,7 +109,7 @@ for my $currency_format ( qw( US FR ) ) { ); compare( { - got => $order_0_0->{tax_value}, + got => $order_0_0->{tax_value_on_ordering}, expected => 7.38, conf => '0 0', field => 'tax_value' @@ -123,7 +119,7 @@ for my $currency_format ( qw( US FR ) ) { $order_0_0 = C4::Acquisition::populate_order_with_prices( { order => $order_0_0, - booksellerid => 'just_something', + booksellerid => 1, receiving => 1, } ); @@ -146,7 +142,7 @@ for my $currency_format ( qw( US FR ) ) { ); compare( { - got => $order_0_0->{tax_value}, + got => $order_0_0->{tax_value_on_receiving}, expected => 7.38, conf => '0 0', field => 'tax_value' @@ -154,35 +150,29 @@ for my $currency_format ( qw( US FR ) ) { ); }; - subtest 'Configuration 1: 1 1' => sub { - plan tests => 8; - $bookseller_module->mock( - 'fetch', - sub { - return { listincgst => 1, invoiceincgst => 1 }; - } - ); + subtest 'Configuration 1: 1 1 (Vendor List prices do include tax / Invoice prices include tax)' => sub { + plan tests => 11; my $biblionumber_1_1 = 43; my $order_1_1 = { biblionumber => $biblionumber_1_1, quantity => 2, - listprice => 82.000000, - unitprice => 73.800000, + listprice => 82, + unitprice => 73.80, quantityreceived => 2, basketno => $basketno_1_1, invoiceid => $invoiceid_1_1, rrp => 82.00, ecost => 73.80, tax_rate => 0.0500, - discount => 10.0000, + discount => 10, datereceived => $today }; $order_1_1 = C4::Acquisition::populate_order_with_prices( { order => $order_1_1, - booksellerid => 'just_something', + booksellerid => 4, ordering => 1, } ); @@ -221,7 +211,7 @@ for my $currency_format ( qw( US FR ) ) { ); compare( { - got => $order_1_1->{tax_value}, + got => $order_1_1->{tax_value_on_ordering}, expected => 7.03, conf => '1 1', field => 'tax_value' @@ -231,7 +221,7 @@ for my $currency_format ( qw( US FR ) ) { $order_1_1 = C4::Acquisition::populate_order_with_prices( { order => $order_1_1, - booksellerid => 'just_something', + booksellerid => 4, receiving => 1, } ); @@ -254,43 +244,86 @@ for my $currency_format ( qw( US FR ) ) { ); compare( { - got => $order_1_1->{tax_value}, + got => $order_1_1->{tax_value_on_receiving}, expected => 7.03, conf => '1 1', field => 'tax_value' } ); - }; - subtest 'Configuration 1: 1 0' => sub { - plan tests => 8; - $bookseller_module->mock( - 'fetch', - sub { - return { listincgst => 1, invoiceincgst => 0 }; + # When unitprice is 0.00 C4::Acquisition->populate_order_with_prices() falls back to using ecost_tax_included and ecost_tax_excluded + $order_1_1 = { + biblionumber => $biblionumber_1_1, + quantity => 1, + listprice => 10, + unitprice => '0.00', + quantityreceived => 1, + basketno => $basketno_1_1, + invoiceid => $invoiceid_1_1, + rrp => 10.00, + ecost => 10.00, + tax_rate => 0.1500, + discount => 0, + datereceived => $today + }; + + $order_1_1 = C4::Acquisition::populate_order_with_prices( + { + order => $order_1_1, + booksellerid => 4, + ordering => 1, } ); + compare( + { + got => $order_1_1->{ecost_tax_included}, + expected => 10.00, + conf => '1 1', + field => 'ecost_tax_included' + } + ); + compare( + { + got => $order_1_1->{ecost_tax_excluded}, + expected => 8.70, + conf => '1 1', + field => 'ecost_tax_excluded' + } + ); + compare( + { + got => $order_1_1->{tax_value_on_ordering}, + expected => 1.30, + conf => '1 1', + field => 'tax_value' + } + ); + }; + + subtest 'Configuration 1: 1 0 (Vendor List prices include tax / Invoice prices do not include tax)' => sub { + plan tests => 9; + my $biblionumber_1_0 = 44; my $order_1_0 = { biblionumber => $biblionumber_1_0, quantity => 2, - listprice => 82.000000, - unitprice => 70.290000, + listprice => 82, + unitprice => 0, quantityreceived => 2, basketno => $basketno_1_1, invoiceid => $invoiceid_1_1, rrp => 82.00, ecost => 73.80, tax_rate => 0.0500, - discount => 10.0000, + discount => 10, datereceived => $today }; $order_1_0 = C4::Acquisition::populate_order_with_prices( { order => $order_1_0, - booksellerid => 'just_something', + booksellerid => 3, ordering => 1, } ); @@ -327,19 +360,38 @@ for my $currency_format ( qw( US FR ) ) { field => 'ecost_tax_excluded' } ); + # If we order with unitprice = 0, tax is calculated from the ecost + # (note that in addorder.pl and addorderiso2709 the unitprice may/will be set to the ecost compare( { - got => $order_1_0->{tax_value}, + got => $order_1_0->{tax_value_on_ordering}, expected => 7.03, conf => '1 0', field => 'tax_value' } ); + $order_1_0->{unitprice} = 70.29; + $order_1_0 = C4::Acquisition::populate_order_with_prices( + { + order => $order_1_0, + booksellerid => 3, + ordering => 1, + } + ); + # If a unitprice is provided at ordering, we calculate the tax from that + compare( + { + got => $order_1_0->{tax_value_on_ordering}, + expected => 6.69, + conf => '1 0', + field => 'tax_value' + } + ); $order_1_0 = C4::Acquisition::populate_order_with_prices( { order => $order_1_0, - booksellerid => 'just_something', + booksellerid => 3, receiving => 1, } ); @@ -362,7 +414,7 @@ for my $currency_format ( qw( US FR ) ) { ); compare( { - got => $order_1_0->{tax_value}, + got => $order_1_0->{tax_value_on_receiving}, expected => 7.03, conf => '1 0', field => 'tax_value' @@ -370,35 +422,29 @@ for my $currency_format ( qw( US FR ) ) { ); }; - subtest 'Configuration 1: 0 1' => sub { - plan tests => 8; - $bookseller_module->mock( - 'fetch', - sub { - return { listincgst => 0, invoiceincgst => 1 }; - } - ); + subtest 'Configuration 1: 0 1 (Vendor List prices do not include tax / Invoice prices include tax)' => sub { + plan tests => 9; my $biblionumber_0_1 = 45; my $order_0_1 = { biblionumber => $biblionumber_0_1, quantity => 2, - listprice => 82.000000, - unitprice => 77.490000, + listprice => 82, + unitprice => 0, quantityreceived => 2, basketno => $basketno_1_1, invoiceid => $invoiceid_1_1, rrp => 82.00, ecost => 73.80, tax_rate => 0.0500, - discount => 10.0000, + discount => 10, datereceived => $today }; $order_0_1 = C4::Acquisition::populate_order_with_prices( { order => $order_0_1, - booksellerid => 'just_something', + booksellerid => 2, ordering => 1, } ); @@ -435,19 +481,37 @@ for my $currency_format ( qw( US FR ) ) { field => 'ecost_tax_excluded' } ); + # If we order with unitprice = 0, tax is calculated from the ecost + # (note that in addorder.pl and addorderiso2709 the unitprice may/will be set to the ecost compare( { - got => $order_0_1->{tax_value}, + got => $order_0_1->{tax_value_on_ordering}, expected => 7.38, conf => '0 1', field => 'tax_value' } ); - + $order_0_1->{unitprice} = 77.490000; $order_0_1 = C4::Acquisition::populate_order_with_prices( { order => $order_0_1, - booksellerid => 'just_something', + booksellerid => 2, + ordering => 1, + } + ); + # If a unitprice is provided at ordering, we calculate the tax from that + compare( + { + got => $order_0_1->{tax_value_on_ordering}, + expected => 7.75, + conf => '0 1', + field => 'tax_value' + } + ); + $order_0_1 = C4::Acquisition::populate_order_with_prices( + { + order => $order_0_1, + booksellerid => 2, receiving => 1, } ); @@ -470,13 +534,14 @@ for my $currency_format ( qw( US FR ) ) { ); compare( { - got => $order_0_1->{tax_value}, + got => $order_0_1->{tax_value_on_receiving}, expected => 7.38, conf => '0 1', field => 'tax_value' } ); }; + } sub compare {