3 use Test::More tests => 30;
8 # Number formating depends by default on system environement
9 # See http://search.cpan.org/~wrw/Number-Format/Format.pm
10 use POSIX qw(setlocale LC_NUMERIC);
12 use Koha::Acquisition::Currencies;
13 my $budget_module = Test::MockModule->new('Koha::Acquisition::Currencies');
15 $budget_module->mock( 'get_active', sub { return $currency; } );
16 use_ok('Koha::Number::Price');
18 my $orig_locale = setlocale(LC_NUMERIC);
20 p_cs_precedes => 1, # Force to place the symbol at the beginning
21 p_sep_by_space => 0, # Force to not add a space between the symbol and the number
23 t::lib::Mocks::mock_preference( 'CurrencyFormat', 'US' );
24 $currency = Koha::Acquisition::Currency->new({
31 is( Koha::Number::Price->new->format( $format ), '0.00', 'US: format 0' );
32 is( Koha::Number::Price->new(3)->format( $format ), '3.00', 'US: format 3' );
33 is( Koha::Number::Price->new(1234567890)->format( $format ),
34 '1,234,567,890.00', 'US: format 1234567890' );
36 # FIXME This should be display symbol, but it was the case before the creation of this module
37 is( Koha::Number::Price->new->format( { %$format, with_symbol => 1 } ),
38 '0.00', 'US: format 0 with symbol' );
39 is( Koha::Number::Price->new(3)->format( { %$format, with_symbol => 1 } ),
40 '3.00', 'US: format 3 with symbol' );
42 Koha::Number::Price->new(1234567890)
43 ->format( { %$format, with_symbol => 1 }, 'US: format 1234567890 with symbol' ),
47 is( Koha::Number::Price->new->unformat, '0', 'US: unformat 0' );
48 is( Koha::Number::Price->new(3)->unformat, '3', 'US: unformat 3' );
49 is( Koha::Number::Price->new(1234567890)->unformat,
50 '1234567890', 'US: unformat 1234567890' );
52 # Bug 18900 - Check params are not from system environement
53 setlocale(LC_NUMERIC, "fr_FR.UTF-8");
54 is( Koha::Number::Price->new(12345678.9)->format( { %$format, with_symbol => 1 } ),
55 '12,345,678.90', 'US: format 12,345,678.90 with symbol' );
56 is( Koha::Number::Price->new('12,345,678.90')->unformat,
57 '12345678.9', 'US: unformat 12345678.9' );
58 setlocale(LC_NUMERIC, $orig_locale);
60 t::lib::Mocks::mock_preference( 'CurrencyFormat', 'FR' );
61 $currency = Koha::Acquisition::Currency->new({
68 # Actually,the price formating for France is 3,00€
69 # How put the symbol at the end with Number::Format?
70 is( Koha::Number::Price->new->format( $format ), '0,00', 'FR: format 0' );
71 is( Koha::Number::Price->new(3)->format( $format ), '3,00', 'FR: format 3' );
73 Koha::Number::Price->new(1234567890)->format( $format ),
75 'FR: format 1234567890'
77 is( Koha::Number::Price->new->format( { %$format, with_symbol => 1 } ),
78 '€0,00', 'FR: format 0 with symbol' );
79 is( Koha::Number::Price->new(3)->format( { %$format, with_symbol => 1 } ),
80 '€3,00', 'FR: format 3 with symbol' );
82 Koha::Number::Price->new(1234567890)
83 ->format( { %$format, with_symbol => 1 }, 'FR: format 123567890 with symbol' ),
87 is( Koha::Number::Price->new->unformat, '0', 'FR: unformat 0' );
88 is( Koha::Number::Price->new(3)->unformat, '3', 'FR: unformat 3' );
89 is( Koha::Number::Price->new(1234567890)->unformat,
90 '1234567890', 'FR: unformat 1234567890' );
92 # Price formatting for Switzerland: 1'234'567.89
93 t::lib::Mocks::mock_preference( 'CurrencyFormat', 'CH' );
94 $currency = Koha::Acquisition::Currency->new({
101 is( Koha::Number::Price->new->format( $format ), '0.00', 'CH: format 0' );
102 is( Koha::Number::Price->new(3)->format( $format ), '3.00', 'CH: format 3' );
104 Koha::Number::Price->new(1234567890)->format( $format ),
105 '1\'234\'567\'890.00',
106 'CHF: format 1234567890'
108 is( Koha::Number::Price->new->format( { %$format, with_symbol => 1 } ),
109 'CHF0.00', 'CH: format 0 with symbol' );
110 is( Koha::Number::Price->new(3)->format( { %$format, with_symbol => 1 } ),
111 'CHF3.00', 'CH: format 3 with symbol' );
113 Koha::Number::Price->new(1234567890)
114 ->format( { %$format, with_symbol => 1 }, 'CH: format 123567890 with symbol' ),
115 'CHF1\'234\'567\'890.00'
118 is( Koha::Number::Price->new->unformat, '0', 'CHF: unformat 0' );
119 is( Koha::Number::Price->new(3)->unformat, '3', 'CHF: unformat 3' );
120 is( Koha::Number::Price->new(1234567890)->unformat,
121 '1234567890', 'CHF: unformat 1234567890' );