#!/usr/bin/perl package PVE::TestAPIParameters; # Tests the automatic conversion of -list and array parameter types use strict; use warnings; use lib '../src'; use PVE::RESTHandler; use PVE::JSONSchema; use Test::More; use base qw(PVE::RESTHandler); my $setup = [ { name => 'list-format-with-list', parameter => { type => 'string', format => 'pve-configid-list', }, value => "foo,bar", 'value-expected' => "foo,bar", }, { name => 'array-format-with-array', parameter => { type => 'array', items => { type => 'string', format => 'pve-configid', }, }, value => ['foo', 'bar'], 'value-expected' => ['foo', 'bar'], }, # TODO: below behaviour should be deprecated with 9.x and fail with 10.x { name => 'list-format-with-alist', parameter => { type => 'string', format => 'pve-configid-list', }, value => "foo\0bar", 'value-expected' => "foo\0bar", }, { name => 'array-format-with-non-array', parameter => { type => 'array', items => { type => 'string', format => 'pve-configid', }, }, value => "foo", 'value-expected' => ['foo'], }, { name => 'list-format-with-array', parameter => { type => 'string', format => 'pve-configid-list', }, value => ['foo', 'bar'], 'value-expected' => "foo,bar", }, ]; for my $data ($setup->@*) { __PACKAGE__->register_method({ name => $data->{name}, path => $data->{name}, method => 'POST', parameters => { additionalProperties => 0, properties => { param => $data->{parameter}, }, }, returns => { type => 'null' }, code => sub { my ($param) = @_; return $param->{param}; } }); my ($handler, $info) = __PACKAGE__->find_handler('POST', $data->{name}); my $param = { param => $data->{value}, }; my $res = $handler->handle($info, $param); is_deeply($res, $data->{'value-expected'}, $data->{name}); } done_testing();