LP#1533329: bail out of live Perl test if opt-in not enabled
[Evergreen.git] / Open-ILS / src / perlmods / live_t / 12-lp1533329-opt-in.t
1 #!perl
2
3 use Test::More tests => 12;
4
5 diag("Test checking for, creating, and restricting patron opt-in.");
6
7 use constant WORKSTATION_NAME => 'BR1-test-12-lp1533329-opt-in.t';
8 use constant WORKSTATION_LIB => 4; # BR1, a branch of SYS1
9 use constant PATRON_LIB => 6; # BR3, a branch of SYS2
10 use constant PATRON_SYS => 3; # SYS2
11 use constant SYS_DEPTH => 1; # depth of "System" org type
12 use constant PATRON_BARCODE => '99999359616';
13
14 use strict; use warnings;
15
16 use OpenILS::Utils::TestUtils;
17 use OpenILS::Utils::CStoreEditor qw/:funcs/;
18 use OpenILS::Utils::Fieldmapper;
19
20 my $script = OpenILS::Utils::TestUtils->new();
21 $script->bootstrap;
22
23 our $U = "OpenILS::Application::AppUtils";
24
25 my $e = new_editor(xact => 1);
26 $e->init;
27
28 # initialize a new aous object for insertion into the db
29 sub new_org_setting {
30     my ($org_unit, $name, $value) = @_;
31     my $set = Fieldmapper::actor::org_unit_setting->new();
32     $set->org_unit($org_unit);
33     $set->name($name);
34     $set->value($value);
35     return $set;
36 }
37
38 sub opt_in_enabled {
39     my $resp = $U->simplereq(
40         'open-ils.actor',
41         'open-ils.actor.user.org_unit_opt_in.enabled'
42     );
43     return $resp;
44 }
45
46 # do an opt-in check
47 sub opt_in_check {
48     my ($authtoken, $usr_id) = @_;
49     my $resp = $U->simplereq(
50         'open-ils.actor',
51         'open-ils.actor.user.org_unit_opt_in.check',
52         $authtoken, $usr_id);
53     return $resp;
54 }
55
56 unless(opt_in_enabled()) {
57     BAIL_OUT('cannot test opt-in unless enabled in opensrf.xml');
58 }
59
60 #----------------------------------------------------------------
61 # 1. Login, register workstation, get authtoken.
62 #----------------------------------------------------------------
63 $script->authenticate({
64     username => 'admin',
65     password => 'demo123',
66     type => 'staff'});
67 ok(
68     $script->authtoken,
69     'Have an authtoken'
70 );
71 my $ws = $script->register_workstation(WORKSTATION_NAME,WORKSTATION_LIB);
72 ok(
73     ! ref $ws,
74     'Registered a new workstation'
75 );
76 $script->logout();
77 $script->authenticate({
78     username => 'admin',
79     password => 'demo123',
80     type => 'staff',
81     workstation => WORKSTATION_NAME});
82 ok(
83     $script->authtoken,
84     'Have an authtoken associated with the workstation'
85 );
86
87 #----------------------------------------------------------------
88 # 2. Set org.patron_opt_boundary for SYS2, so that BR1 is outside
89 # the boundary.
90 #----------------------------------------------------------------
91 $e->xact_begin;
92 my $boundary = new_org_setting(PATRON_SYS, 'org.patron_opt_boundary', SYS_DEPTH);
93 my $boundary_stat = $e->create_actor_org_unit_setting($boundary);
94 ok($boundary_stat, 'Opt boundary setting created successfully');
95 $e->xact_commit;
96
97 #----------------------------------------------------------------
98 # 3. Check opt-in for test patron.  It should return 0.
99 #----------------------------------------------------------------
100 my $patron = $U->fetch_user_by_barcode(PATRON_BARCODE);
101 is(
102     opt_in_check($script->authtoken, $patron->id),
103     '0',
104     'Opt-in check for non-opted-in patron correctly returned 0'
105 );
106
107 #----------------------------------------------------------------
108 # 4. Set org.restrict_opt_to_depth at SYS2, so that BR1 is
109 # outside SYS2's section of the tree at the specified depth (thus
110 # preventing opt-in).
111 #----------------------------------------------------------------
112 $e->xact_begin;
113 my $restrict = new_org_setting(PATRON_SYS, 'org.restrict_opt_to_depth', SYS_DEPTH);
114 my $restrict_stat = $e->create_actor_org_unit_setting($restrict);
115 ok($restrict_stat, 'Opt restrict depth setting created successfully');
116 $e->xact_commit;
117
118 #----------------------------------------------------------------
119 # 5. Check opt-in for test patron.  It should return 2.
120 #----------------------------------------------------------------
121 is(
122     opt_in_check($script->authtoken, $patron->id),
123     '2',
124     'Opt-in check for patron at restricted opt-in library correctly returned 2'
125 );
126
127 #----------------------------------------------------------------
128 # 6. Remove the org.restrict_opt_to_depth setting for SYS2.
129 #----------------------------------------------------------------
130 $e->xact_begin;
131 my $delete_restrict_stat = $e->delete_actor_org_unit_setting($restrict);
132 ok($delete_restrict_stat, 'Opt restrict depth setting deleted successfully');
133 $e->xact_commit;
134
135 #----------------------------------------------------------------
136 # 7. Create opt-in for test patron.
137 #----------------------------------------------------------------
138 my $opt_id = $U->simplereq(
139     'open-ils.actor',
140     'open-ils.actor.user.org_unit_opt_in.create',
141     $script->authtoken, $patron->id, WORKSTATION_LIB);
142 ok($opt_id, 'Patron successfully opted in');
143
144 #----------------------------------------------------------------
145 # 8. Check opt-in for test patron.  It should return 1.
146 #----------------------------------------------------------------
147 is(
148     opt_in_check($script->authtoken, $patron->id),
149     '1',
150     'Opt-in check for opted-in patron correctly returned 1'
151 );
152
153 #----------------------------------------------------------------
154 # 9. Delete opt-in.
155 #----------------------------------------------------------------
156 my $opt = $U->simplereq(
157     'open-ils.cstore',
158     'open-ils.cstore.direct.actor.usr_org_unit_opt_in.retrieve',
159     $opt_id
160 );
161 $e->xact_begin;
162 my $delete_opt_stat = $e->delete_actor_usr_org_unit_opt_in($opt);
163 ok($delete_opt_stat, 'Opt-in deleted successfully');
164 $e->xact_commit;
165
166 #----------------------------------------------------------------
167 # 10. Remove opt boundary setting.
168 #----------------------------------------------------------------
169 $e->xact_begin;
170 my $delete_setting_stat = $e->delete_actor_org_unit_setting($boundary);
171 ok($delete_setting_stat, 'Opt boundary setting deleted successfully');
172 $e->xact_commit;
173
174