Dave Baird c06af6d141 Documentation and automatic documentation
- added POD to Role.pm
- added README.md files translated from Role.pm POD
- added an autodoc script (based on AutoDoc.pm role). The script prints
a listing of the methods built in Role.pm
- added class_documentation() and method_documentation() accessors on
all object and API classes which return the documentation supplied in
the Swagger spec for the API
2015-11-09 23:04:59 +01:00

81 lines
3.5 KiB
Perl

use Test::More tests => 21;
use Test::Exception;
use Test::Warnings 'warnings';
use Test::Deep;
use lib 'lib';
use strict;
use warnings;
SKIP: {
eval "
package MyApp;
use Moose;
with 'WWW::SwaggerClient::Role';
sub auth_setup_handler {}
";
skip 'Moose not installed', 21 if $@;
my $api;
cmp_deeply(
[ warnings { $api = MyApp->new } ],
bag(
"Cannot delegate new (use \$self->pet_api->new instead)\n",
"Cannot delegate new (use \$self->store_api->new instead)\n",
"Cannot delegate new (use \$self->user_api->new instead)\n",
"Cannot delegate class_documentation (use \$self->pet_api->class_documentation instead)\n",
"Cannot delegate class_documentation (use \$self->store_api->class_documentation instead)\n",
"Cannot delegate class_documentation (use \$self->user_api->class_documentation instead)\n",
"Cannot delegate method_documentation (use \$self->pet_api->method_documentation instead)\n",
"Cannot delegate method_documentation (use \$self->store_api->method_documentation instead)\n",
"Cannot delegate method_documentation (use \$self->user_api->method_documentation instead)\n",
),
'got expected warnings about non-delegatable methods',
);
my $pet_id = 10008;
# note - we don't need to 'use' these modules because they've already been loaded by ApiFactory
my ($category, $tag, $pet);
lives_ok { $category = WWW::SwaggerClient::Object::Category->new('id' => '22', 'name' => 'perl') } 'Category.pm loaded OK';
lives_ok { $tag = WWW::SwaggerClient::Object::Tag->new('id' => '11', 'name' => 'just kidding') } 'Tag.pm loaded OK';
lives_ok { $pet = WWW::SwaggerClient::Object::Pet->new('id' => $pet_id, 'name' => 'perl test',
"photoUrls" => ['123', 'oop'], 'tags' => [$tag], 'status' => 'pending', 'category' => $category) } 'Pet.pm loaded OK';
is $pet->id, '10008', 'got the proper pet id';
is $pet->name, 'perl test', 'got the proper pet name';
is $pet->category->id, '22', 'got the proper category id';
is $pet->category->name, 'perl', 'got the proper category name';
is $pet->tags->[0]->name, 'just kidding', 'got the proper tag name';
is $pet->tags->[0]->id, '11', 'got the proper tag id';
my $add_pet = $api->add_pet(body => $pet);
my $get_pet = $api->get_pet_by_id(pet_id => $pet_id);
is $get_pet->id, '10008', 'stored and retrieved: got the proper pet id';
is $get_pet->name, 'perl test', 'stored and retrieved: got the proper pet name';
is $get_pet->category->id, '22', 'stored and retrieved: got the proper category id';
is $get_pet->category->name, 'perl', 'stored and retrieved: got the proper category name';
is $get_pet->tags->[0]->name, 'just kidding', 'stored and retrieved: got the proper tag name';
is $get_pet->tags->[0]->id, '11', 'stored and retrieved: got the proper tag id';
# documentation tests
TODO: {
local $TODO = "Swagger spec doesn't populate all the description fields";
is $api->pet_api->class_documentation->{description}, 'Pet API description', 'got corrrect Pet API description';
is $get_pet->method_documentation->{name}, 'Description of the Pet object name() method', 'Pet object method_documentation is available';
}
is_deeply( [sort keys %{$api->pet_api->method_documentation}],
[ 'add_pet', 'delete_pet', 'find_pets_by_status', 'find_pets_by_tags', 'get_pet_by_id', 'update_pet', 'update_pet_with_form', 'upload_file'],
"Pet API method_documentation has the correct keys");
my $pet_class_doco = { 'description' => '' };
is_deeply($get_pet->class_documentation, $pet_class_doco, 'Pet object class_documentation is available');
# / documentation tests
} # / SKIP