summary refs log tree commit diff
path: root/t/spore
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-10-25 17:23:14 +0200
committerfranck cuny <franck@lumberjaph.net>2010-10-25 17:23:14 +0200
commit6c5dba1f8d4d012cf4a9d1e10fd20094a737b071 (patch)
tree47c8ba1b25126557e3504bd1d600a335ad87ecc0 /t/spore
parentupdate tests to use the dummy api, and replace api_base_url with base_url (diff)
downloadnet-http-spore-6c5dba1f8d4d012cf4a9d1e10fd20094a737b071.tar.gz
api spec can be modularized:
* add two new methods: new_from_specs and new_from_strings
  theses two methods can receive more than one description to create a client
* add tests and api desc
Diffstat (limited to 't/spore')
-rw-r--r--t/spore/01_new_from_string.t68
1 files changed, 54 insertions, 14 deletions
diff --git a/t/spore/01_new_from_string.t b/t/spore/01_new_from_string.t
index e9d9357..6a21994 100644
--- a/t/spore/01_new_from_string.t
+++ b/t/spore/01_new_from_string.t
@@ -3,18 +3,39 @@ use warnings;
 use Test::More;
 use Test::Exception;
 
-plan tests => 14;
+plan tests => 27;
 
+use JSON;
 use IO::All;
 use Net::HTTP::Spore;
 
 my $api_spec = 't/specs/api.json';
+my $api2_spec = 't/specs/api2.json';
+
 my %args = ( base_url => 'http://localhost/', );
 
 my $github_spec =
   "http://github.com/franckcuny/spore/raw/master/services/github.json";
 
-my $content < io($api_spec);
+my $api_ok = {
+    base_url => "http://services.org/restapi",
+    methods  => { get_info => { method => 'GET', path => '/show' } },
+};
+
+my $second_api = {
+    base_url => "http://services.org/restapi",
+    methods  => { list_users => { method => 'GET', path => '/users' } },
+};
+
+my $api_without_path = {
+    base_url => "http://services.org/restapi",
+    methods  => { get_info => { method => 'GET' } },
+};
+
+my $api_without_method = {
+    base_url => "http://services.org/restapi",
+    methods  => { get_info => { method => 'PET', path => '/show' } },
+};
 
 dies_ok { Net::HTTP::Spore->new_from_spec };
 like $@, qr/specification file is missing/;
@@ -22,31 +43,50 @@ like $@, qr/specification file is missing/;
 dies_ok { Net::HTTP::Spore->new_from_spec( "/foo/bar/baz", ) };
 like $@, qr/does not exists/;
 
-dies_ok { Net::HTTP::Spore->new_from_spec( $api_spec, ) };
+dies_ok { Net::HTTP::Spore->new_from_spec( $api_spec ) };
 like $@, qr/base_url is missing/;
 
 ok my $client = Net::HTTP::Spore->new_from_spec( $api_spec, %args );
-ok $client = Net::HTTP::Spore->new_from_string( $content, %args );
+ok $client =
+  Net::HTTP::Spore->new_from_string( JSON::encode_json($api_ok), %args );
+ok $client->meta->_find_spore_method_by_name(sub{/^get_info$/});
 
 SKIP: {
-    skip "require RUN_HTTP_TEST", 1 unless $ENV{RUN_HTTP_TEST};
+    skip "require RUN_HTTP_TEST", 2 unless $ENV{RUN_HTTP_TEST};
     ok $client = Net::HTTP::Spore->new_from_spec( $github_spec, %args );
+    ok $client->meta->_find_spore_method_by_name(sub{/^user_search$/});
 }
 
 dies_ok {
-    Net::HTTP::Spore->new_from_string(
-'{"base_url" : "http://services.org/restapi/","methods" : { "get_info" : { "method" : "GET" } } }'
-    );
+    Net::HTTP::Spore->new_from_string( JSON::encode_json($api_without_path) );
 };
 like $@, qr/Attribute \(path\) is required/;
 
 dies_ok {
-    Net::HTTP::Spore->new_from_string(
-'{"base_url" : "http://services.org/restapi/","methods" : { "get_info" : { "method" : "PET", "path":"/info" } } }'
-    );
+    Net::HTTP::Spore->new_from_string(JSON::encode_json($api_without_method));
 };
 like $@, qr/Attribute \(method\) does not pass the type constraint/;
 
-ok $client = Net::HTTP::Spore->new_from_string(
-'{"base_url" : "http://services.org/restapi/","methods" : { "get_info" : { "path" : "/show", "method" : "GET" } } }'
-);
+ok $client = Net::HTTP::Spore->new_from_string(JSON::encode_json($api_ok));
+ok $client->meta->_find_spore_method_by_name(sub{/^get_info$/});
+
+dies_ok {
+    Net::HTTP::Spore->new_from_strings('/a/b/c', '/a/b/c');
+};
+
+for ( {}, { base_url => 'http://localhost/api' } ) {
+    ok $client = Net::HTTP::Spore->new_from_strings( JSON::encode_json($api_ok),
+        JSON::encode_json($second_api), $_ );
+    ok $client->meta->_find_spore_method_by_name( sub { /^get_info$/ } );
+    ok $client->meta->_find_spore_method_by_name( sub { /^list_users$/ } );
+}
+
+dies_ok {
+    $client = Net::HTTP::Spore->new_from_specs($api_spec, $api2_spec);
+};
+like $@, qr/base_url is missing/;
+
+ok $client =
+  Net::HTTP::Spore->new_from_specs( $api_spec, $api2_spec,
+    { base_url => 'http://localhost' } );
+