3 use Test::More tests => 12;
5 diag("Test checking for, creating, and restricting patron opt-in.");
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';
14 use strict; use warnings;
16 use OpenILS::Utils::TestUtils;
17 use OpenILS::Utils::CStoreEditor qw/:funcs/;
18 use OpenILS::Utils::Fieldmapper;
20 my $script = OpenILS::Utils::TestUtils->new();
23 our $U = "OpenILS::Application::AppUtils";
25 my $e = new_editor(xact => 1);
28 # initialize a new aous object for insertion into the db
30 my ($org_unit, $name, $value) = @_;
31 my $set = Fieldmapper::actor::org_unit_setting->new();
32 $set->org_unit($org_unit);
39 my $resp = $U->simplereq(
41 'open-ils.actor.user.org_unit_opt_in.enabled'
48 my ($authtoken, $usr_id) = @_;
49 my $resp = $U->simplereq(
51 'open-ils.actor.user.org_unit_opt_in.check',
57 skip 'cannot test opt-in unless enabled in opensrf.xml', 12 unless(opt_in_enabled());
59 #----------------------------------------------------------------
60 # 1. Login, register workstation, get authtoken.
61 #----------------------------------------------------------------
62 $script->authenticate({
64 password => 'demo123',
70 my $ws = $script->register_workstation(WORKSTATION_NAME,WORKSTATION_LIB);
73 'Registered a new workstation'
76 $script->authenticate({
78 password => 'demo123',
80 workstation => WORKSTATION_NAME});
83 'Have an authtoken associated with the workstation'
86 #----------------------------------------------------------------
87 # 2. Set org.patron_opt_boundary for SYS2, so that BR1 is outside
89 #----------------------------------------------------------------
91 my $boundary = new_org_setting(PATRON_SYS, 'org.patron_opt_boundary', SYS_DEPTH);
92 my $boundary_stat = $e->create_actor_org_unit_setting($boundary);
93 ok($boundary_stat, 'Opt boundary setting created successfully');
96 #----------------------------------------------------------------
97 # 3. Check opt-in for test patron. It should return 0.
98 #----------------------------------------------------------------
99 my $patron = $U->fetch_user_by_barcode(PATRON_BARCODE);
101 opt_in_check($script->authtoken, $patron->id),
103 'Opt-in check for non-opted-in patron correctly returned 0'
106 #----------------------------------------------------------------
107 # 4. Set org.restrict_opt_to_depth at SYS2, so that BR1 is
108 # outside SYS2's section of the tree at the specified depth (thus
109 # preventing opt-in).
110 #----------------------------------------------------------------
112 my $restrict = new_org_setting(PATRON_SYS, 'org.restrict_opt_to_depth', SYS_DEPTH);
113 my $restrict_stat = $e->create_actor_org_unit_setting($restrict);
114 ok($restrict_stat, 'Opt restrict depth setting created successfully');
117 #----------------------------------------------------------------
118 # 5. Check opt-in for test patron. It should return 2.
119 #----------------------------------------------------------------
121 opt_in_check($script->authtoken, $patron->id),
123 'Opt-in check for patron at restricted opt-in library correctly returned 2'
126 #----------------------------------------------------------------
127 # 6. Remove the org.restrict_opt_to_depth setting for SYS2.
128 #----------------------------------------------------------------
130 my $delete_restrict_stat = $e->delete_actor_org_unit_setting($restrict);
131 ok($delete_restrict_stat, 'Opt restrict depth setting deleted successfully');
134 #----------------------------------------------------------------
135 # 7. Create opt-in for test patron.
136 #----------------------------------------------------------------
137 my $opt_id = $U->simplereq(
139 'open-ils.actor.user.org_unit_opt_in.create',
140 $script->authtoken, $patron->id, WORKSTATION_LIB);
141 ok($opt_id, 'Patron successfully opted in');
143 #----------------------------------------------------------------
144 # 8. Check opt-in for test patron. It should return 1.
145 #----------------------------------------------------------------
147 opt_in_check($script->authtoken, $patron->id),
149 'Opt-in check for opted-in patron correctly returned 1'
152 #----------------------------------------------------------------
154 #----------------------------------------------------------------
155 my $opt = $U->simplereq(
157 'open-ils.cstore.direct.actor.usr_org_unit_opt_in.retrieve',
161 my $delete_opt_stat = $e->delete_actor_usr_org_unit_opt_in($opt);
162 ok($delete_opt_stat, 'Opt-in deleted successfully');
165 #----------------------------------------------------------------
166 # 10. Remove opt boundary setting.
167 #----------------------------------------------------------------
169 my $delete_setting_stat = $e->delete_actor_org_unit_setting($boundary);
170 ok($delete_setting_stat, 'Opt boundary setting deleted successfully');