View | Details | Raw Unified | Return to bug 39345
Collapse All | Expand All

(-)a/t/db_dependent/api/v1/erm_custom_reports.t (-3 / +365 lines)
Lines 20-26 Link Here
20
use Modern::Perl;
20
use Modern::Perl;
21
21
22
use Test::NoWarnings;
22
use Test::NoWarnings;
23
use Test::More tests => 5;
23
use Test::More tests => 9;
24
use Test::Mojo;
24
use Test::Mojo;
25
25
26
use t::lib::TestBuilder;
26
use t::lib::TestBuilder;
Lines 41-47 my $builder = t::lib::TestBuilder->new; Link Here
41
my $t = Test::Mojo->new('Koha::REST::V1');
41
my $t = Test::Mojo->new('Koha::REST::V1');
42
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 );
42
t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 );
43
43
44
my $sushi_response_file_TR_J1      = dirname(__FILE__) . "/../../data/erm/eusage/TR_J1.json";
44
my $sushi_response_file_TR_J1      = dirname(__FILE__) . "/../../data/erm/eusage/COUNTER_5/TR_J1.json";
45
my $sushi_counter_5_response_TR_J1 = decode_json( read_file($sushi_response_file_TR_J1) );
45
my $sushi_counter_5_response_TR_J1 = decode_json( read_file($sushi_response_file_TR_J1) );
46
my $report_items                   = $sushi_counter_5_response_TR_J1->{Report_Items};
46
my $report_items                   = $sushi_counter_5_response_TR_J1->{Report_Items};
47
my $sushi_counter_TR_J1 = Koha::ERM::EUsage::SushiCounter->new( { response => $sushi_counter_5_response_TR_J1 } );
47
my $sushi_counter_TR_J1 = Koha::ERM::EUsage::SushiCounter->new( { response => $sushi_counter_5_response_TR_J1 } );
Lines 404-406 subtest "provider_rollup_report" => sub { Link Here
404
404
405
    $schema->storage->txn_rollback;
405
    $schema->storage->txn_rollback;
406
};
406
};
407
- 
407
408
my $sushi_response_file_51_TR_J1    = dirname(__FILE__) . "/../../data/erm/eusage/COUNTER_5.1/TR_J1.json";
409
my $sushi_counter_51_response_TR_J1 = decode_json( read_file($sushi_response_file_51_TR_J1) );
410
my $sushi_counter_51_TR_J1 = Koha::ERM::EUsage::SushiCounter->new( { response => $sushi_counter_51_response_TR_J1 } );
411
412
subtest "5.1 monthly_report" => sub {
413
    plan tests => 17;
414
415
    $schema->storage->txn_begin;
416
417
    my $librarian = $builder->build_object(
418
        {
419
            class => 'Koha::Patrons',
420
            value => { flags => 2**28 }
421
        }
422
    );
423
    my $password = 'thePassword123';
424
    $librarian->set_password( { password => $password, skip_validation => 1 } );
425
    my $userid = $librarian->userid;
426
    t::lib::Mocks::mock_userenv( { number => $userid } );
427
428
    my $patron = $builder->build_object(
429
        {
430
            class => 'Koha::Patrons',
431
            value => { flags => 0 }
432
        }
433
    );
434
435
    $patron->set_password( { password => $password, skip_validation => 1 } );
436
    my $unauth_userid = $patron->userid;
437
438
    # Run a harvest to populate the database with data
439
    my $usage_data_provider = $builder->build_object( { class => 'Koha::ERM::EUsage::UsageDataProviders' } );
440
    my $counter_file        = $sushi_counter_51_TR_J1->get_COUNTER_from_SUSHI;
441
442
    $usage_data_provider->counter_files(
443
        [
444
            {
445
                usage_data_provider_id => $usage_data_provider->erm_usage_data_provider_id,
446
                file_content           => $counter_file,
447
                filename               => "Test_TR_J1",
448
            }
449
        ]
450
    );
451
452
    # Unauthorized access
453
    $t->get_ok("//$unauth_userid:$password@/api/v1/erm/eUsage/monthly_report/title")->status_is(403);
454
455
    # Authorised access
456
    my $query_string_with_no_results = 'q=[
457
        {
458
            "erm_usage_muses.year":2023,
459
            "erm_usage_muses.report_type":"TR_J1",
460
            "erm_usage_muses.month":[1,2,3,4,5,6,7,8,9,10,11,12],
461
            "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
462
        }
463
    ]';
464
465
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/monthly_report/title?$query_string_with_no_results" =>
466
            { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200)->json_is( [] );
467
468
    my $query_string = 'q=[
469
        {
470
            "erm_usage_muses.year":2022,
471
            "erm_usage_muses.report_type":"TR_J1",
472
            "erm_usage_muses.month":[6],
473
            "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
474
        }
475
    ]';
476
    my $expected_results1 = 2;    # One title, with one row for each metric type
477
478
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/monthly_report/title?$query_string" =>
479
            { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200)
480
        ->json_has( '/' . ( $expected_results1 - 2 ) . '/title_id' )
481
        ->json_has( '/' . ( $expected_results1 - 1 ) . '/title_id' )
482
        ->json_hasnt( '/' . ($expected_results1) . '/title_id' );
483
484
    my $query_string_with_multiple_years = 'q=[
485
        {
486
            "erm_usage_muses.year":2022,
487
            "erm_usage_muses.report_type":"TR_J1",
488
            "erm_usage_muses.month":[1,6,7,8],
489
            "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
490
        },
491
        {
492
            "erm_usage_muses.year":2021,
493
            "erm_usage_muses.report_type":"TR_J1",
494
            "erm_usage_muses.month":[1,2,3],
495
            "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
496
        }
497
    ]';
498
    my $expected_results2 = 4;    # Two titles this time
499
500
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/monthly_report/title?$query_string_with_multiple_years" =>
501
            { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200)
502
        ->json_has( '/' . ( $expected_results2 - 4 ) . '/title_id' )
503
        ->json_has( '/' . ( $expected_results2 - 3 ) . '/title_id' )
504
        ->json_has( '/' . ( $expected_results2 - 2 ) . '/title_id' )
505
        ->json_has( '/' . ( $expected_results2 - 1 ) . '/title_id' )
506
        ->json_hasnt( '/' . ($expected_results2) . '/title_id' );
507
508
    $schema->storage->txn_rollback;
509
};
510
511
subtest "5.1 yearly_report" => sub {
512
    plan tests => 17;
513
514
    $schema->storage->txn_begin;
515
516
    my $librarian = $builder->build_object(
517
        {
518
            class => 'Koha::Patrons',
519
            value => { flags => 2**28 }
520
        }
521
    );
522
    my $password = 'thePassword123';
523
    $librarian->set_password( { password => $password, skip_validation => 1 } );
524
    my $userid = $librarian->userid;
525
    t::lib::Mocks::mock_userenv( { number => $userid } );
526
527
    my $patron = $builder->build_object(
528
        {
529
            class => 'Koha::Patrons',
530
            value => { flags => 0 }
531
        }
532
    );
533
534
    $patron->set_password( { password => $password, skip_validation => 1 } );
535
    my $unauth_userid = $patron->userid;
536
537
    # Run a harvest to populate the database with data
538
    my $usage_data_provider = $builder->build_object( { class => 'Koha::ERM::EUsage::UsageDataProviders' } );
539
    my $counter_file        = $sushi_counter_51_TR_J1->get_COUNTER_from_SUSHI;
540
541
    $usage_data_provider->counter_files(
542
        [
543
            {
544
                usage_data_provider_id => $usage_data_provider->erm_usage_data_provider_id,
545
                file_content           => $counter_file,
546
                filename               => "Test_TR_J1",
547
            }
548
        ]
549
    );
550
551
    # Unauthorized access
552
    $t->get_ok("//$unauth_userid:$password@/api/v1/erm/eUsage/yearly_report/title")->status_is(403);
553
554
    # Authorised access
555
    my $query_string_with_no_results = 'q=
556
        {
557
            "erm_usage_yuses.year":[2023],
558
            "erm_usage_yuses.report_type":"TR_J1",
559
            "erm_usage_yuses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
560
        }
561
    ';
562
563
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/yearly_report/title?$query_string_with_no_results" =>
564
            { 'x-koha-embed' => 'erm_usage_yuses' } )->status_is(200)->json_is( [] );
565
566
    my $query_string = 'q=
567
        {
568
            "erm_usage_yuses.year":[2022],
569
            "erm_usage_yuses.report_type":"TR_J1",
570
            "erm_usage_yuses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
571
        }
572
    ';
573
    my $expected_results1 = 4;    # Two titles, with one row for each metric type
574
575
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/yearly_report/title?$query_string" =>
576
            { 'x-koha-embed' => 'erm_usage_yuses' } )->status_is(200)
577
        ->json_has( '/' . ( $expected_results1 - 2 ) . '/title_id' )
578
        ->json_has( '/' . ( $expected_results1 - 1 ) . '/title_id' )
579
        ->json_hasnt( '/' . ($expected_results1) . '/title_id' );
580
581
    my $query_string_with_multiple_years = 'q=
582
        {
583
            "erm_usage_yuses.year":[2021,2022],
584
            "erm_usage_yuses.report_type":"TR_J1",
585
            "erm_usage_yuses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
586
        }
587
    ';
588
    my $expected_results2 = 4;    # Two titles this time
589
590
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/yearly_report/title?$query_string_with_multiple_years" =>
591
            { 'x-koha-embed' => 'erm_usage_yuses' } )->status_is(200)
592
        ->json_has( '/' . ( $expected_results2 - 4 ) . '/title_id' )
593
        ->json_has( '/' . ( $expected_results2 - 3 ) . '/title_id' )
594
        ->json_has( '/' . ( $expected_results2 - 2 ) . '/title_id' )
595
        ->json_has( '/' . ( $expected_results2 - 1 ) . '/title_id' )
596
        ->json_hasnt( '/' . ($expected_results2) . '/title_id' );
597
598
    $schema->storage->txn_rollback;
599
};
600
601
subtest "5.1 metric_types_report" => sub {
602
    plan tests => 14;
603
604
    $schema->storage->txn_begin;
605
606
    my $librarian = $builder->build_object(
607
        {
608
            class => 'Koha::Patrons',
609
            value => { flags => 2**28 }
610
        }
611
    );
612
    my $password = 'thePassword123';
613
    $librarian->set_password( { password => $password, skip_validation => 1 } );
614
    my $userid = $librarian->userid;
615
    t::lib::Mocks::mock_userenv( { number => $userid } );
616
617
    my $patron = $builder->build_object(
618
        {
619
            class => 'Koha::Patrons',
620
            value => { flags => 0 }
621
        }
622
    );
623
624
    $patron->set_password( { password => $password, skip_validation => 1 } );
625
    my $unauth_userid = $patron->userid;
626
627
    # Run a harvest to populate the database with data
628
    my $usage_data_provider = $builder->build_object( { class => 'Koha::ERM::EUsage::UsageDataProviders' } );
629
    my $counter_file        = $sushi_counter_51_TR_J1->get_COUNTER_from_SUSHI;
630
631
    $usage_data_provider->counter_files(
632
        [
633
            {
634
                usage_data_provider_id => $usage_data_provider->erm_usage_data_provider_id,
635
                file_content           => $counter_file,
636
                filename               => "Test_TR_J1",
637
            }
638
        ]
639
    );
640
641
    # Unauthorized access
642
    $t->get_ok("//$unauth_userid:$password@/api/v1/erm/eUsage/metric_types_report/title")->status_is(403);
643
644
    # Authorised access
645
    my $query_string_with_no_results = 'q=[
646
        {
647
            "erm_usage_muses.year":2023,
648
            "erm_usage_muses.report_type":"TR_J1",
649
            "erm_usage_muses.month":[1,2,3,4,5,6,7,8,9,10,11,12],
650
            "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
651
        }
652
    ]';
653
654
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/metric_types_report/title?$query_string_with_no_results" =>
655
            { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200)->json_is( [] );
656
657
    my $query_string = 'q=[
658
        {
659
            "erm_usage_muses.year":2022,
660
            "erm_usage_muses.report_type":"TR_J1",
661
            "erm_usage_muses.month":[6],
662
            "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
663
        }
664
    ]';
665
    my $expected_results1 = 1;    # One title
666
667
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/metric_types_report/title?$query_string" =>
668
            { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200)
669
        ->json_has( '/' . ( $expected_results1 - 1 ) . '/title_id' )
670
        ->json_hasnt( '/' . ($expected_results1) . '/title_id' );
671
672
    my $query_string_with_multiple_years = 'q=[
673
        {
674
            "erm_usage_muses.year":2022,
675
            "erm_usage_muses.report_type":"TR_J1",
676
            "erm_usage_muses.month":[1,2,3,6,7,8],
677
            "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
678
        },
679
        {
680
            "erm_usage_muses.year":2021,
681
            "erm_usage_muses.report_type":"TR_J1",
682
            "erm_usage_muses.month":[1,2,3],
683
            "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
684
        }
685
    ]';
686
    my $expected_results2 = 2;    # Two titles this time
687
688
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/metric_types_report/title?$query_string_with_multiple_years" =>
689
            { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200)
690
        ->json_has( '/' . ( $expected_results2 - 2 ) . '/title_id' )
691
        ->json_has( '/' . ( $expected_results2 - 1 ) . '/title_id' )
692
        ->json_hasnt( '/' . ($expected_results2) . '/title_id' );
693
694
    $schema->storage->txn_rollback;
695
};
696
697
subtest "5.1 provider_rollup_report" => sub {
698
    plan tests => 9;
699
700
    $schema->storage->txn_begin;
701
702
    my $librarian = $builder->build_object(
703
        {
704
            class => 'Koha::Patrons',
705
            value => { flags => 2**28 }
706
        }
707
    );
708
    my $password = 'thePassword123';
709
    $librarian->set_password( { password => $password, skip_validation => 1 } );
710
    my $userid = $librarian->userid;
711
    t::lib::Mocks::mock_userenv( { number => $userid } );
712
713
    my $patron = $builder->build_object(
714
        {
715
            class => 'Koha::Patrons',
716
            value => { flags => 0 }
717
        }
718
    );
719
720
    $patron->set_password( { password => $password, skip_validation => 1 } );
721
    my $unauth_userid = $patron->userid;
722
723
    # Run a harvest to populate the database with data
724
    my $usage_data_provider = $builder->build_object( { class => 'Koha::ERM::EUsage::UsageDataProviders' } );
725
    my $counter_file        = $sushi_counter_51_TR_J1->get_COUNTER_from_SUSHI;
726
727
    $usage_data_provider->counter_files(
728
        [
729
            {
730
                usage_data_provider_id => $usage_data_provider->erm_usage_data_provider_id,
731
                file_content           => $counter_file,
732
                filename               => "Test_TR_J1",
733
            }
734
        ]
735
    );
736
737
    # Unauthorized access
738
    $t->get_ok("//$unauth_userid:$password@/api/v1/erm/eUsage/provider_rollup_report/title")->status_is(403);
739
740
    # Authorised access
741
    my $query_string_with_no_results = 'q=[
742
        {
743
            "erm_usage_titles.erm_usage_muses.year":2023,
744
            "erm_usage_titles.erm_usage_muses.report_type":"TR_J1",
745
            "erm_usage_titles.erm_usage_muses.month":[1,2,3,4,5,6,7,8,9,10,11,12],
746
            "erm_usage_titles.erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
747
        }
748
    ]';
749
750
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/provider_rollup_report/title?$query_string_with_no_results" =>
751
            { 'x-koha-embed' => 'erm_usage_titles.erm_usage_muses' } )->status_is(200)->json_is( [] );
752
753
    my $query_string = 'q=[
754
        {
755
            "erm_usage_titles.erm_usage_muses.year":2022,
756
            "erm_usage_titles.erm_usage_muses.report_type":"TR_J1",
757
            "erm_usage_titles.erm_usage_muses.month":[1,6],
758
            "erm_usage_titles.erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"]
759
        }
760
    ]';
761
    my $expected_results1 = 2;    # One provider repeated once for each metric type
762
763
    $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/provider_rollup_report/title?$query_string" =>
764
            { 'x-koha-embed' => 'erm_usage_titles.erm_usage_muses' } )->status_is(200)
765
        ->json_is( '/' . ( $expected_results1 - 2 ) . '/provider_rollup_total' => 528, 'Total is correct' )
766
        ->json_is( '/' . ( $expected_results1 - 1 ) . '/provider_rollup_total' => 228, 'Total is correct' );
767
768
    $schema->storage->txn_rollback;
769
};

Return to bug 39345