Bug 18308: (RM follow-up) Clarify intent of tests
[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_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 api_routes {
159     my ( $self, $args ) = @_;
160
161     my $spec = qq{
162 {
163   "/patrons/{patron_id}/bother": {
164     "put": {
165       "x-mojo-to": "Koha::Plugin::Test#bother",
166       "operationId": "BotherPatron",
167       "tags": ["patrons"],
168       "parameters": [{
169         "name": "patron_id",
170         "in": "path",
171         "description": "Internal patron identifier",
172         "required": true,
173         "type": "integer"
174       }],
175       "produces": [
176         "application/json"
177       ],
178       "responses": {
179         "200": {
180           "description": "A bothered patron",
181           "schema": {
182               "type": "object",
183                 "properties": {
184                   "bothered": {
185                     "description": "If the patron has been bothered",
186                     "type": "boolean"
187                   }
188                 }
189           }
190         },
191         "404": {
192           "description": "An error occurred",
193           "schema": {
194               "type": "object",
195                 "properties": {
196                   "error": {
197                     "description": "An explanation for the error",
198                     "type": "string"
199                   }
200                 }
201           }
202         }
203       },
204       "x-koha-authorization": {
205         "permissions": {
206           "borrowers": "1"
207         }
208       }
209     }
210   }
211 }
212     };
213
214     return decode_json($spec);
215 }
216
217 sub check_password {
218     my ( $self, $args ) = @_;
219
220     my $password = $args->{'password'};
221     if ( $password && $password =~ m/^\d{4}$/ ) {
222         return { error => 0 };
223     }
224     else {
225         return {
226             error => 1,
227             msg   => "PIN should be four digits"
228         };
229     }
230 }
231
232 sub intranet_catalog_biblio_tab {
233     my @tabs;
234     push @tabs,
235       Koha::Plugins::Tab->new(
236         {
237             title   => 'Tab 1',
238             content => 'This is content for tab 1'
239         }
240       );
241
242     push @tabs,
243       Koha::Plugins::Tab->new(
244         {
245             title   => 'Tab 2',
246             content => 'This is content for tab 2'
247         }
248       );
249
250     return @tabs;
251 }
252
253 sub _private_sub {
254     return "";
255 }