1c296b059557400fe3a7fee01366460b6aad2770
[srvgit] / t / lib / Koha / Plugin / Test.pm
1 package Koha::Plugin::Test;
2
3 ## It's good practice to use Modern::Perl
4 use Modern::Perl;
5
6 use Koha::Exceptions::Exception;
7 use Koha::Plugins::Tab;
8
9 use Mojo::JSON qw(decode_json);
10
11 ## Required for all plugins
12 use base qw(Koha::Plugins::Base);
13
14 our $VERSION = 1.01;
15 our $metadata = {
16     name            => 'Test Plugin',
17     author          => 'Kyle M Hall',
18     description     => 'Test plugin',
19     date_authored   => '2013-01-14',
20     date_updated    => '2013-01-14',
21     minimum_version => '3.11',
22     maximum_version => undef,
23     version         => $VERSION,
24     my_example_tag  => 'find_me',
25 };
26
27 ## This is the minimum code required for a plugin's 'new' method
28 ## More can be added, but none should be removed
29 sub new {
30     my ( $class, $args ) = @_;
31     $args->{'metadata'} = $metadata;
32     my $self = $class->SUPER::new($args);
33     return $self;
34 }
35
36 sub report {
37     my ( $self, $args ) = @_;
38     return "Koha::Plugin::Test::report";
39 }
40
41 sub tool {
42     my ( $self, $args ) = @_;
43     return "Koha::Plugin::Test::tool";
44 }
45
46 sub to_marc {
47     my ( $self, $args ) = @_;
48     return "Koha::Plugin::Test::to_marc";
49 }
50
51 sub intranet_catalog_biblio_enhancements_toolbar_button {
52     my ( $self, $args ) = @_;
53     return "Koha::Plugin::Test::intranet_catalog_biblio_enhancements_toolbar_button";
54 }
55
56 sub intranet_catalog_biblio_enhancements {
57     my ( $self, $args ) = @_;
58     return "Koha::Plugin::Test::intranet_catalog_biblio_enhancements";
59 }
60
61 sub opac_online_payment {
62     my ( $self, $args ) = @_;
63     return "Koha::Plugin::Test::opac_online_payment";
64 }
65
66 sub opac_online_payment_begin {
67     my ( $self, $args ) = @_;
68     return "Koha::Plugin::Test::opac_online_payment_begin";
69 }
70
71 sub opac_online_payment_end {
72     my ( $self, $args ) = @_;
73     return "Koha::Plugin::Test::opac_online_payment_end";
74 }
75
76 sub opac_head {
77     my ( $self, $args ) = @_;
78     return "Koha::Plugin::Test::opac_head";
79 }
80
81 sub opac_js {
82     my ( $self, $args ) = @_;
83     return "Koha::Plugin::Test::opac_js";
84 }
85
86 sub intranet_head {
87     my ( $self, $args ) = @_;
88     return "Koha::Plugin::Test::intranet_head";
89 }
90
91 sub intranet_js {
92     my ( $self, $args ) = @_;
93     return "Koha::Plugin::Test::intranet_js";
94 }
95
96 sub configure {
97     my ( $self, $args ) = @_;
98     return "Koha::Plugin::Test::configure";;
99 }
100
101 sub install {
102     my ( $self, $args ) = @_;
103     return "Koha::Plugin::Test::install";
104 }
105
106 sub upgrade {
107     my ( $self, $args ) = @_;
108     return "Koha::Plugin::Test::upgrade";
109 }
110
111 sub uninstall {
112     my ( $self, $args ) = @_;
113     return "Koha::Plugin::Test::uninstall";
114 }
115
116 sub test_output {
117     my ( $self ) = @_;
118     $self->output( '¡Hola output!', 'json' );
119 }
120
121 sub test_output_html {
122     my ( $self ) = @_;
123     $self->output_html( '¡Hola output_html!' );
124 }
125
126 sub api_namespace {
127     return "testplugin";
128 }
129
130 sub after_hold_create {
131     my ( $self, $param ) = @_;
132     Koha::Exceptions::Exception->throw("after_hold_create called with parameter " . ref($param) );
133 }
134
135 sub after_biblio_action {
136     my ( $self, $params ) = @_;
137     my $action    = $params->{action} // '';
138     my $biblio    = $params->{biblio};
139     my $biblio_id = $params->{biblio_id};
140
141     if ( $action ne 'delete' ) {
142         Koha::Exceptions::Exception->throw("after_biblio_action called with action: $action, ref: " . ref($biblio) );
143     }
144     else {
145         Koha::Exceptions::Exception->throw("after_biblio_action called with action: $action") if $biblio_id;
146     }
147 }
148
149 sub after_item_action {
150     my ( $self, $params ) = @_;
151     my $action  = $params->{action} // '';
152     my $item    = $params->{item};
153     my $item_id = $params->{item_id};
154
155     if ( $action ne 'delete' ) {
156         my $itemnumber_defined = (defined $item->itemnumber) ? 'yes' : 'no';
157         my $item_id_defined    = (defined $item_id) ? 'yes' : 'no';
158         Koha::Exceptions::Exception->throw("after_item_action called with action: $action, ref: " . ref($item) . " ".
159                                            "item_id defined: $item_id_defined ".
160                                            "itemnumber defined: $itemnumber_defined" );
161     }
162     else {
163         Koha::Exceptions::Exception->throw("after_item_action called with action: $action" ) if $item_id;
164     }
165 }
166
167 sub after_circ_action {
168     my ( $self, $params ) = @_;
169
170     my $action   = $params->{action};
171     my $checkout = $params->{payload}->{checkout};
172     my $payload  = $params->{payload};
173
174     my $type = $payload->{type};
175
176     if ( $action eq 'renewal' ) {
177         Koha::Exceptions::Exception->throw("after_circ_action called with action: $action, ref: " . ref($checkout));
178     }
179     elsif ( $action eq 'checkout') {
180         Koha::Exceptions::Exception->throw("after_circ_action called with action: $action, ref: " . ref($checkout) . " type: $type");
181     }
182     elsif ( $action eq 'checkin' ) {
183         Koha::Exceptions::Exception->throw("after_circ_action called with action: $action, ref: " . ref($checkout));
184     }
185 }
186
187 sub api_routes {
188     my ( $self, $args ) = @_;
189
190     my $spec = qq{
191 {
192   "/patrons/bother": {
193     "get": {
194       "x-mojo-to": "Test::Controller#bother",
195       "operationId": "BotherPatron",
196       "tags": ["patrons"],
197       "produces": [
198         "application/json"
199       ],
200       "responses": {
201         "200": {
202           "description": "A bothered patron",
203           "schema": {
204               "type": "object",
205                 "properties": {
206                   "bothered": {
207                     "description": "If the patron has been bothered",
208                     "type": "boolean"
209                   }
210                 }
211           }
212         },
213         "401": {
214           "description": "An error occurred",
215           "schema": {
216               "type": "object",
217               "properties": {
218                 "error": {
219                   "description": "An explanation for the error",
220                   "type": "string"
221                 }
222               }
223           }
224         }
225       },
226       "x-koha-authorization": {
227         "permissions": {
228           "borrowers": "1"
229         }
230       }
231     }
232   },
233   "/public/patrons/bother": {
234     "get": {
235       "x-mojo-to": "Test::Controller#bother",
236       "operationId": "PubliclyBotherPatron",
237       "tags": ["patrons"],
238       "produces": [
239         "application/json"
240       ],
241       "responses": {
242         "200": {
243           "description": "A bothered patron",
244           "schema": {
245               "type": "object",
246               "properties": {
247                 "bothered": {
248                   "description": "If the patron has been bothered",
249                   "type": "boolean"
250                 }
251               }
252           }
253         },
254         "401": {
255           "description": "Authentication required",
256           "schema": {
257             "type": "object",
258             "properties": {
259               "error": {
260                 "description": "An explanation for the error",
261                 "type": "string"
262               }
263             }
264           }
265         }
266       }
267     }
268   }
269 }
270     };
271
272     return decode_json($spec);
273 }
274
275 sub check_password {
276     my ( $self, $args ) = @_;
277
278     my $password = $args->{'password'};
279     if ( $password && $password =~ m/^\d{4}$/ ) {
280         return { error => 0 };
281     }
282     else {
283         return {
284             error => 1,
285             msg   => "PIN should be four digits"
286         };
287     }
288 }
289
290 sub intranet_catalog_biblio_tab {
291     my @tabs;
292     push @tabs,
293       Koha::Plugins::Tab->new(
294         {
295             title   => 'Tab 1',
296             content => 'This is content for tab 1'
297         }
298       );
299
300     push @tabs,
301       Koha::Plugins::Tab->new(
302         {
303             title   => 'Tab 2',
304             content => 'This is content for tab 2'
305         }
306       );
307
308     return @tabs;
309 }
310
311 sub _private_sub {
312     return "";
313 }
314
315 1;