View | Details | Raw Unified | Return to bug 40176
Collapse All | Expand All

(-)a/xt/api.t (-2 / +43 lines)
Lines 14-28 Link Here
14
14
15
use Modern::Perl;
15
use Modern::Perl;
16
16
17
use Test::More tests => 6;
17
use Test::More tests => 8;
18
use Test::NoWarnings;
18
19
19
use Test::Mojo;
20
use Test::Mojo;
20
use Data::Dumper;
21
use Data::Dumper;
22
use Koha::Database;
21
23
22
use FindBin();
24
use FindBin();
23
use IPC::Cmd        qw(can_run);
25
use IPC::Cmd        qw(can_run);
24
use List::MoreUtils qw(any);
26
use List::MoreUtils qw(any);
25
use File::Slurp     qw(read_file);
27
use File::Slurp     qw(read_file);
28
use YAML::XS        qw(LoadFile);
26
29
27
my $t    = Test::Mojo->new('Koha::REST::V1');
30
my $t    = Test::Mojo->new('Koha::REST::V1');
28
my $spec = $t->get_ok( '/api/v1/', 'Correctly fetched the spec' )->tx->res->json;
31
my $spec = $t->get_ok( '/api/v1/', 'Correctly fetched the spec' )->tx->res->json;
Lines 194-196 subtest 'POST (201) have location header' => sub { Link Here
194
        }
197
        }
195
    }
198
    }
196
};
199
};
197
- 
200
201
subtest 'maxlength + enum' => sub {
202
    my $def_map = {
203
204
        # api def => schema
205
        item => 'Item',
206
    };
207
    plan tests => scalar keys %$def_map;
208
    my $schema = Koha::Database->new->schema;
209
    while ( my ( $def, $dbic_src ) = each %$def_map ) {
210
        my @failures;
211
        my $definition   = LoadFile("api/v1/swagger/definitions/$def.yaml");
212
        my $source       = $schema->source($dbic_src);
213
        my $object_class = Koha::Object::_get_object_class( $source->result_class );
214
        eval "require $object_class";
215
        my $koha_object = $object_class->new;
216
        my $api_mapping = $koha_object->to_api_mapping;
217
        my $reversed_api_mapping =
218
            { reverse map { defined $api_mapping->{$_} ? ( $_ => $api_mapping->{$_} ) : () } keys %$api_mapping };
219
220
        while ( my ( $attr, $properties ) = each %{ $definition->{properties} } ) {
221
            my $db_col = $reversed_api_mapping->{$attr};
222
            next unless $db_col;
223
            my $column_info = $koha_object->_result->column_info($db_col);
224
            next unless $column_info->{size};
225
226
            next if ref( $column_info->{size} ) eq 'ARRAY';    # decimal # FIXME Could have a test for this as well
227
228
            next
229
                if $properties->{enum}
230
                ; # FIXME This is not fully correct, we might want to make sure enum is set for both DB and spec. eg. now checkprevcheckout is enum only for the api spec
231
232
            if ( !exists $properties->{maxLength} || $column_info->{size} != $properties->{maxLength} ) {
233
                push @failures, sprintf "%s.%s should have maxLength=%s in api spec", $def, $attr, $column_info->{size};
234
            }
235
        }
236
        is( scalar(@failures), 0, "maxLength tests for $def" ) or diag Dumper @failures;
237
    }
238
};

Return to bug 40176