98da8af73aa80bf576b523401f6f7418c7f61bac
[koha.git] / 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_biblio_action {
131     my ( $self, $params ) = @_;
132     my $action    = $params->{action} // '';
133     my $biblio    = $params->{biblio};
134     my $biblio_id = $params->{biblio_id};
135
136     if ( $action ne 'delete' ) {
137         Koha::Exceptions::Exception->throw("after_biblio_action called with action: $action, ref: " . ref($biblio) );
138     }
139     else {
140         Koha::Exceptions::Exception->throw("after_biblio_action called with action: $action") if $biblio_id;
141     }
142 }
143
144 sub after_item_action {
145     my ( $self, $params ) = @_;
146     my $action  = $params->{action} // '';
147     my $item    = $params->{item};
148     my $item_id = $params->{item_id};
149
150     if ( $action ne 'delete' ) {
151         Koha::Exceptions::Exception->throw("after_item_action called with action: $action, ref: " . ref($item) );
152     }
153     else {
154         Koha::Exceptions::Exception->throw("after_item_action called with action: $action" ) if $item_id;
155     }
156 }
157
158 sub after_circ_action {
159     my ( $self, $params ) = @_;
160
161     my $action  = $params->{action};
162     my $payload = $params->{payload};
163
164     my $renewal_library_id = $payload->{renewal_library_id};
165     my $charge             = $payload->{charge};
166     my $item_id            = $payload->{item_id};
167     my $item_type          = $payload->{item_type};
168     my $shelving_location  = $payload->{shelving_location};
169     my $patron_id          = $payload->{patron_id};
170     my $collection_code    = $payload->{collection_code};
171     my $date_due           = $payload->{date_due};
172
173     Koha::Exceptions::Exception->throw("after_circ_action called with action: $action, ref: " . ref($date_due));
174 }
175
176 sub api_routes {
177     my ( $self, $args ) = @_;
178
179     my $spec = qq{
180 {
181   "/patrons/bother": {
182     "get": {
183       "x-mojo-to": "Test::Controller#bother",
184       "operationId": "BotherPatron",
185       "tags": ["patrons"],
186       "produces": [
187         "application/json"
188       ],
189       "responses": {
190         "200": {
191           "description": "A bothered patron",
192           "schema": {
193               "type": "object",
194                 "properties": {
195                   "bothered": {
196                     "description": "If the patron has been bothered",
197                     "type": "boolean"
198                   }
199                 }
200           }
201         },
202         "401": {
203           "description": "An error occurred",
204           "schema": {
205               "type": "object",
206               "properties": {
207                 "error": {
208                   "description": "An explanation for the error",
209                   "type": "string"
210                 }
211               }
212           }
213         }
214       },
215       "x-koha-authorization": {
216         "permissions": {
217           "borrowers": "1"
218         }
219       }
220     }
221   },
222   "/public/patrons/bother": {
223     "get": {
224       "x-mojo-to": "Test::Controller#bother",
225       "operationId": "PubliclyBotherPatron",
226       "tags": ["patrons"],
227       "produces": [
228         "application/json"
229       ],
230       "responses": {
231         "200": {
232           "description": "A bothered patron",
233           "schema": {
234               "type": "object",
235               "properties": {
236                 "bothered": {
237                   "description": "If the patron has been bothered",
238                   "type": "boolean"
239                 }
240               }
241           }
242         },
243         "401": {
244           "description": "Authentication required",
245           "schema": {
246             "type": "object",
247             "properties": {
248               "error": {
249                 "description": "An explanation for the error",
250                 "type": "string"
251               }
252             }
253           }
254         }
255       }
256     }
257   }
258 }
259     };
260
261     return decode_json($spec);
262 }
263
264 sub check_password {
265     my ( $self, $args ) = @_;
266
267     my $password = $args->{'password'};
268     if ( $password && $password =~ m/^\d{4}$/ ) {
269         return { error => 0 };
270     }
271     else {
272         return {
273             error => 1,
274             msg   => "PIN should be four digits"
275         };
276     }
277 }
278
279 sub intranet_catalog_biblio_tab {
280     my @tabs;
281     push @tabs,
282       Koha::Plugins::Tab->new(
283         {
284             title   => 'Tab 1',
285             content => 'This is content for tab 1'
286         }
287       );
288
289     push @tabs,
290       Koha::Plugins::Tab->new(
291         {
292             title   => 'Tab 2',
293             content => 'This is content for tab 2'
294         }
295       );
296
297     return @tabs;
298 }
299
300 sub _private_sub {
301     return "";
302 }