|
Lines 20-42
use Modern::Perl;
Link Here
|
| 20 |
use Test::More tests => 2; |
20 |
use Test::More tests => 2; |
| 21 |
|
21 |
|
| 22 |
use Test::Mojo; |
22 |
use Test::Mojo; |
| 23 |
use Test::Warn; |
|
|
| 24 |
|
23 |
|
| 25 |
use t::lib::TestBuilder; |
24 |
use t::lib::TestBuilder; |
| 26 |
use t::lib::Mocks; |
25 |
use t::lib::Mocks; |
| 27 |
|
26 |
|
| 28 |
use C4::Auth; |
27 |
use Koha::Account::Lines; |
| 29 |
use Koha::Account::Line; |
|
|
| 30 |
|
28 |
|
| 31 |
my $schema = Koha::Database->new->schema; |
29 |
my $schema = Koha::Database->new->schema; |
| 32 |
my $builder = t::lib::TestBuilder->new; |
30 |
my $builder = t::lib::TestBuilder->new; |
| 33 |
|
31 |
|
| 34 |
# FIXME: sessionStorage defaults to mysql, but it seems to break transaction handling |
32 |
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 ); |
| 35 |
# this affects the other REST api tests |
|
|
| 36 |
t::lib::Mocks::mock_preference( 'SessionStorage', 'tmp' ); |
| 37 |
|
33 |
|
| 38 |
my $remote_address = '127.0.0.1'; |
34 |
my $t = Test::Mojo->new('Koha::REST::V1'); |
| 39 |
my $t = Test::Mojo->new('Koha::REST::V1'); |
|
|
| 40 |
|
35 |
|
| 41 |
subtest 'get_balance() tests' => sub { |
36 |
subtest 'get_balance() tests' => sub { |
| 42 |
|
37 |
|
|
Lines 44-58
subtest 'get_balance() tests' => sub {
Link Here
|
| 44 |
|
39 |
|
| 45 |
$schema->storage->txn_begin; |
40 |
$schema->storage->txn_begin; |
| 46 |
|
41 |
|
| 47 |
my ( $patron, $session_id ) = create_user_and_session({ authorized => 1 }); |
42 |
my $patron = $builder->build_object({ |
|
|
43 |
class => 'Koha::Patrons', |
| 44 |
value => { flags => 1 } |
| 45 |
}); |
| 46 |
my $password = 'thePassword123'; |
| 47 |
$patron->set_password({ password => $password, skip_validation => 1 }); |
| 48 |
my $userid = $patron->userid; |
| 49 |
|
| 48 |
my $library = $builder->build_object({ class => 'Koha::Libraries' }); |
50 |
my $library = $builder->build_object({ class => 'Koha::Libraries' }); |
| 49 |
my $patron_id = $patron->id; |
51 |
my $patron_id = $patron->id; |
| 50 |
my $account = $patron->account; |
52 |
my $account = $patron->account; |
| 51 |
|
53 |
|
| 52 |
my $tx = $t->ua->build_tx(GET => "/api/v1/patrons/$patron_id/account"); |
54 |
$t->get_ok("//$userid:$password@/api/v1/patrons/$patron_id/account") |
| 53 |
$tx->req->cookies({ name => 'CGISESSID', value => $session_id }); |
55 |
->status_is(200) |
| 54 |
$tx->req->env({ REMOTE_ADDR => '127.0.0.1' }); |
56 |
->json_is( |
| 55 |
$t->request_ok($tx)->status_is(200)->json_is( |
|
|
| 56 |
{ balance => 0.00, |
57 |
{ balance => 0.00, |
| 57 |
outstanding_debits => { total => 0, lines => [] }, |
58 |
outstanding_debits => { total => 0, lines => [] }, |
| 58 |
outstanding_credits => { total => 0, lines => [] } |
59 |
outstanding_credits => { total => 0, lines => [] } |
|
Lines 89-98
subtest 'get_balance() tests' => sub {
Link Here
|
| 89 |
)->store(); |
90 |
)->store(); |
| 90 |
$account_line_2->discard_changes; |
91 |
$account_line_2->discard_changes; |
| 91 |
|
92 |
|
| 92 |
$tx = $t->ua->build_tx( GET => "/api/v1/patrons/$patron_id/account" ); |
93 |
$t->get_ok("//$userid:$password@/api/v1/patrons/$patron_id/account") |
| 93 |
$tx->req->cookies( { name => 'CGISESSID', value => $session_id } ); |
94 |
->status_is(200) |
| 94 |
$tx->req->env( { REMOTE_ADDR => '127.0.0.1' } ); |
95 |
->json_is( |
| 95 |
$t->request_ok($tx)->status_is(200)->json_is( |
|
|
| 96 |
{ balance => 100.01, |
96 |
{ balance => 100.01, |
| 97 |
outstanding_debits => { |
97 |
outstanding_debits => { |
| 98 |
total => 100.01, |
98 |
total => 100.01, |
|
Lines 118-127
subtest 'get_balance() tests' => sub {
Link Here
|
| 118 |
} |
118 |
} |
| 119 |
); |
119 |
); |
| 120 |
|
120 |
|
| 121 |
$tx = $t->ua->build_tx( GET => "/api/v1/patrons/$patron_id/account" ); |
121 |
$t->get_ok("//$userid:$password@/api/v1/patrons/$patron_id/account") |
| 122 |
$tx->req->cookies( { name => 'CGISESSID', value => $session_id } ); |
122 |
->status_is(200) |
| 123 |
$tx->req->env( { REMOTE_ADDR => '127.0.0.1' } ); |
123 |
->json_is( |
| 124 |
$t->request_ok($tx)->status_is(200)->json_is( |
|
|
| 125 |
{ balance => 0, |
124 |
{ balance => 0, |
| 126 |
outstanding_debits => { total => 0, lines => [] }, |
125 |
outstanding_debits => { total => 0, lines => [] }, |
| 127 |
outstanding_credits => { total => 0, lines => [] } |
126 |
outstanding_credits => { total => 0, lines => [] } |
|
Lines 133-142
subtest 'get_balance() tests' => sub {
Link Here
|
| 133 |
{ amount => 10, user_id => $patron->id, library_id => $library->id, interface => 'test' } ); |
132 |
{ amount => 10, user_id => $patron->id, library_id => $library->id, interface => 'test' } ); |
| 134 |
# re-read from the DB |
133 |
# re-read from the DB |
| 135 |
$credit_line->discard_changes; |
134 |
$credit_line->discard_changes; |
| 136 |
$tx = $t->ua->build_tx( GET => "/api/v1/patrons/$patron_id/account" ); |
135 |
|
| 137 |
$tx->req->cookies( { name => 'CGISESSID', value => $session_id } ); |
136 |
$t->get_ok("//$userid:$password@/api/v1/patrons/$patron_id/account") |
| 138 |
$tx->req->env( { REMOTE_ADDR => '127.0.0.1' } ); |
137 |
->status_is(200) |
| 139 |
$t->request_ok($tx)->status_is(200)->json_is( |
138 |
->json_is( |
| 140 |
{ balance => -10, |
139 |
{ balance => -10, |
| 141 |
outstanding_debits => { |
140 |
outstanding_debits => { |
| 142 |
total => 0, |
141 |
total => 0, |
|
Lines 165-174
subtest 'get_balance() tests' => sub {
Link Here
|
| 165 |
)->store(); |
164 |
)->store(); |
| 166 |
$account_line_3->discard_changes; |
165 |
$account_line_3->discard_changes; |
| 167 |
|
166 |
|
| 168 |
$tx = $t->ua->build_tx( GET => "/api/v1/patrons/$patron_id/account" ); |
167 |
$t->get_ok("//$userid:$password@/api/v1/patrons/$patron_id/account") |
| 169 |
$tx->req->cookies( { name => 'CGISESSID', value => $session_id } ); |
168 |
->status_is(200) |
| 170 |
$tx->req->env( { REMOTE_ADDR => '127.0.0.1' } ); |
169 |
->json_is( |
| 171 |
$t->request_ok($tx)->status_is(200)->json_is( |
|
|
| 172 |
{ balance => 40.00, |
170 |
{ balance => 40.00, |
| 173 |
outstanding_debits => { |
171 |
outstanding_debits => { |
| 174 |
total => 50.00, |
172 |
total => 50.00, |
|
Lines 192-198
subtest 'add_credit() tests' => sub {
Link Here
|
| 192 |
|
190 |
|
| 193 |
$schema->storage->txn_begin; |
191 |
$schema->storage->txn_begin; |
| 194 |
|
192 |
|
| 195 |
my ( $patron, $session_id ) = create_user_and_session( { authorized => 1 } ); |
193 |
my $patron = $builder->build_object({ |
|
|
194 |
class => 'Koha::Patrons', |
| 195 |
value => { flags => 1 } |
| 196 |
}); |
| 197 |
my $password = 'thePassword123'; |
| 198 |
$patron->set_password({ password => $password, skip_validation => 1 }); |
| 199 |
my $userid = $patron->userid; |
| 200 |
|
| 196 |
my $library = $builder->build_object({ class => 'Koha::Libraries' }); |
201 |
my $library = $builder->build_object({ class => 'Koha::Libraries' }); |
| 197 |
my $patron_id = $patron->id; |
202 |
my $patron_id = $patron->id; |
| 198 |
my $account = $patron->account; |
203 |
my $account = $patron->account; |
|
Lines 202-212
subtest 'add_credit() tests' => sub {
Link Here
|
| 202 |
|
207 |
|
| 203 |
my $credit = { amount => 100 }; |
208 |
my $credit = { amount => 100 }; |
| 204 |
|
209 |
|
| 205 |
my $tx = $t->ua->build_tx( |
210 |
$t->post_ok("//$userid:$password@/api/v1/patrons/$patron_id/account/credits" => json => $credit) |
| 206 |
POST => "/api/v1/patrons/$patron_id/account/credits" => json => $credit ); |
211 |
->status_is(200) |
| 207 |
$tx->req->cookies( { name => 'CGISESSID', value => $session_id } ); |
212 |
->json_has('/account_line_id'); |
| 208 |
$tx->req->env( { REMOTE_ADDR => '127.0.0.1' } ); |
|
|
| 209 |
$t->request_ok($tx)->status_is(200)->json_has('/account_line_id'); |
| 210 |
|
213 |
|
| 211 |
my $outstanding_credits = $account->outstanding_credits; |
214 |
my $outstanding_credits = $account->outstanding_credits; |
| 212 |
is( $outstanding_credits->count, 1 ); |
215 |
is( $outstanding_credits->count, 1 ); |
|
Lines 237-249
subtest 'add_credit() tests' => sub {
Link Here
|
| 237 |
|
240 |
|
| 238 |
is( $account->outstanding_debits->total_outstanding, 25 ); |
241 |
is( $account->outstanding_debits->total_outstanding, 25 ); |
| 239 |
$credit->{library_id} = $library->id; |
242 |
$credit->{library_id} = $library->id; |
| 240 |
$tx = $t->ua->build_tx( |
|
|
| 241 |
POST => "/api/v1/patrons/$patron_id/account/credits" => json => $credit ); |
| 242 |
$tx->req->cookies( { name => 'CGISESSID', value => $session_id } ); |
| 243 |
$tx->req->env( { REMOTE_ADDR => '127.0.0.1' } ); |
| 244 |
$t->request_ok($tx)->status_is(200)->json_has('/account_line_id'); |
| 245 |
|
243 |
|
| 246 |
my $account_line_id = $tx->res->json->{account_line_id}; |
244 |
$t->post_ok("//$userid:$password@/api/v1/patrons/$patron_id/account/credits" => json => $credit) |
|
|
245 |
->status_is(200) |
| 246 |
->json_has('/account_line_id'); |
| 247 |
|
| 248 |
my $account_line_id = $t->tx->res->json->{account_line_id}; |
| 247 |
is( Koha::Account::Lines->find($account_line_id)->branchcode, |
249 |
is( Koha::Account::Lines->find($account_line_id)->branchcode, |
| 248 |
$library->id, 'Library id is sored correctly' ); |
250 |
$library->id, 'Library id is sored correctly' ); |
| 249 |
|
251 |
|
|
Lines 267-277
subtest 'add_credit() tests' => sub {
Link Here
|
| 267 |
account_lines_ids => [ $debit_1->id, $debit_2->id, $debit_3->id ] |
269 |
account_lines_ids => [ $debit_1->id, $debit_2->id, $debit_3->id ] |
| 268 |
}; |
270 |
}; |
| 269 |
|
271 |
|
| 270 |
$tx = $t->ua->build_tx( |
272 |
$t->post_ok("//$userid:$password@/api/v1/patrons/$patron_id/account/credits" => json => $credit) |
| 271 |
POST => "/api/v1/patrons/$patron_id/account/credits" => json => $credit ); |
273 |
->status_is(200) |
| 272 |
$tx->req->cookies( { name => 'CGISESSID', value => $session_id } ); |
274 |
->json_has('/account_line_id'); |
| 273 |
$tx->req->env( { REMOTE_ADDR => '127.0.0.1' } ); |
|
|
| 274 |
$t->request_ok($tx)->status_is(200)->json_has('/account_line_id'); |
| 275 |
|
275 |
|
| 276 |
my $outstanding_debits = $account->outstanding_debits; |
276 |
my $outstanding_debits = $account->outstanding_debits; |
| 277 |
is( $outstanding_debits->total_outstanding, 65 ); |
277 |
is( $outstanding_debits->total_outstanding, 65 ); |
|
Lines 279-306
subtest 'add_credit() tests' => sub {
Link Here
|
| 279 |
|
279 |
|
| 280 |
$schema->storage->txn_rollback; |
280 |
$schema->storage->txn_rollback; |
| 281 |
}; |
281 |
}; |
| 282 |
|
|
|
| 283 |
sub create_user_and_session { |
| 284 |
|
| 285 |
my $args = shift; |
| 286 |
my $flags = ( $args->{authorized} ) ? 1 : 0; |
| 287 |
|
| 288 |
my $patron = $builder->build_object( |
| 289 |
{ |
| 290 |
class => 'Koha::Patrons', |
| 291 |
value => { |
| 292 |
flags => $flags |
| 293 |
} |
| 294 |
} |
| 295 |
); |
| 296 |
|
| 297 |
# Create a session for the authorized user |
| 298 |
my $session = C4::Auth::get_session(''); |
| 299 |
$session->param( 'number', $patron->id ); |
| 300 |
$session->param( 'id', $patron->userid ); |
| 301 |
$session->param( 'ip', '127.0.0.1' ); |
| 302 |
$session->param( 'lasttime', time() ); |
| 303 |
$session->flush; |
| 304 |
|
| 305 |
return ( $patron, $session->id ); |
| 306 |
} |
| 307 |
- |