File: user_recently_visited.t

package info (click to toggle)
request-tracker5 5.0.3%2Bdfsg-3~deb12u3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 77,648 kB
  • sloc: javascript: 187,930; perl: 79,061; sh: 1,302; makefile: 471; python: 37; php: 15
file content (100 lines) | stat: -rw-r--r-- 3,070 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
use strict;
use warnings;

# test the RecentlyViewedTickets method

use RT::Test::Shredder tests => undef;
my $test = "RT::Test::Shredder";

{
    my $user = RT::Test->load_or_create_user( Name => 'tester' );
    ok( $user && $user->Id, 'created user' );

    # need ShowTicket to visit, ModifyTicket to merge
    ok( RT::Test->add_rights(
            {   Principal => $user,
                Right => [qw( SeeQueue CreateTicket ShowTicket ModifyTicket )]
            }
        ),
        'granting rights'
      );

    is( visited_nb( $user ), 0, 'init: empty RecentlyViewedTickets' );

    my %ticket;
    foreach my $ticket_code ( 'a' .. 't' ) {
        my $new_ticket = RT::Test->create_ticket(
            Subject => $ticket_code,
            Queue   => 'General'
        );
        my $id = $new_ticket->id;
        ok( $new_ticket, "ticket '$ticket_code' created" );
        $ticket{$ticket_code}
            = { ticket => $new_ticket, id => $id, subject => $ticket_code };
        $new_ticket->ApplyTransactionBatch
            ;    # needed for the tests with shredder to work
    }

    is( visited_nb( $user ), 0,
        'tickets created: empty RecentlyViewedTickets'
    );

    # using reverse on the list so it's easier to read later (last visited is first in RecentlyViewedTicket)
    foreach my $viewed ( reverse qw( c q p b e d c b a ) ) {
        $user->AddRecentlyViewedTicket( $ticket{$viewed}->{ticket} );
    }

    is( visited( $user ), 'c,q,p,b,e,d,a',
        'visited tickets after inital visits'
    );

    my $shredder = $test->shredder_new();

    $shredder->PutObjects( Objects => $ticket{m}->{ticket} );
    $shredder->WipeoutAll;
    is( visited( $user ), 'c,q,p,b,e,d,a',
        'visited tickets after shredding an unvisited ticket'
    );

    $shredder->PutObjects( Objects => $ticket{p}->{ticket} );
    $shredder->PutObjects( Objects => $ticket{d}->{ticket} );
    $shredder->WipeoutAll;
    is( visited( $user ), 'c,q,b,e,a',
        'visited tickets after shredding 2 visited tickets'
    );

    my ( $ok, $msg ) = $ticket{b}->{ticket}->MergeInto( $ticket{j}->{id} );
    if ( !$ok ) { die "error merging: $msg\n"; }
    is( visited( $user ), 'c,q,j,e,a',
        'visited tickets after merging into a ticket that was NOT on the list'
    );

    $ticket{c}->{ticket}->MergeInto( $ticket{a}->{id} );
    is( visited( $user ), 'a,q,j,e',
        'visited tickets after merging into a ticket that was on the list'
    );

    $ticket{e}->{ticket}->MergeInto( $ticket{j}->{id} );
    is( visited( $user ), 'a,q,j',
        'visited tickets after merging into a ticket that was on the list (merged)'
    );

    foreach my $viewed ( reverse qw( r j a h k a q a k i s t f g d ) ) {
        $user->AddRecentlyViewedTicket( $ticket{$viewed}->{ticket} );
    }

    is( visited( $user ), 'r,j,a,h,k,q,i,s,t,f',
        'visited more than 10 tickets'
    );

}

done_testing();

sub visited_nb {
    return scalar shift->RecentlyViewedTickets;
}

sub visited {
    return join ',', map { $_->{subject} } shift->RecentlyViewedTickets;
}