X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fgraphql-client;a=blobdiff_plain;f=t%2Fcli.t;fp=t%2Fcli.t;h=2ae980e4f0a76e55785ba01d8da9fd56ff1bd404;hp=0000000000000000000000000000000000000000;hb=1a966ff0db27d934fce36e2bd43ea6aace0a7555;hpb=2c3b4020da88b3cf2f968e0b2c4e7b1a7e24a35f diff --git a/t/cli.t b/t/cli.t new file mode 100755 index 0000000..2ae980e --- /dev/null +++ b/t/cli.t @@ -0,0 +1,81 @@ +#!/usr/bin/env perl + +use warnings; +use strict; + +use Test::Exception; +use Test::More; + +use GraphQL::Client::CLI; + +subtest 'get_options' => sub { + my $expected = { + format => 'json:pretty', + help => undef, + manual => undef, + operation_name => undef, + outfile => undef, + query => 'bar', + transport => undef, + unpack => 0, + url => 'foo', + variables => undef, + version => undef, + }; + + my $r = GraphQL::Client::CLI->_get_options(qw{--url foo --query bar}); + is_deeply($r, $expected, '--url and --query set options') or diag explain $r; + + $r = GraphQL::Client::CLI->_get_options(qw{foo --query bar}); + is_deeply($r, $expected, '--url is optional') or diag explain $r; + + $r = GraphQL::Client::CLI->_get_options(qw{foo bar}); + is_deeply($r, $expected, '--query is also optional') or diag explain $r; +}; + +subtest 'expand_vars' => sub { + my $r = GraphQL::Client::CLI::_expand_vars({ + 'foo.bar' => 'baz', + 'foo.qux.muf' => 42, + 'arr1[1].tut' => 'whatever', + 'arr2[1][0].meh'=> 3.1415, + }); + is_deeply($r, { + foo => { + bar => 'baz', + qux => { + muf => 42, + }, + }, + arr1 => [ + undef, + { + tut => 'whatever', + } + ], + arr2 => [ + undef, + [ + { + meh => 3.1415, + }, + ], + ], + }, 'expand all the vars') or diag explain $r; + + throws_ok { + GraphQL::Client::CLI::_expand_vars({ + 'foo[0]' => 'baz', + 'foo.bar' => 'muf', + }); + } qr/^Conflicting keys/, 'throw if conflict between hash and array'; + + throws_ok { + GraphQL::Client::CLI::_expand_vars({ + 'foo' => 'baz', + 'foo.bar' => 'muf', + }); + } qr/^Conflicting keys/, 'throw if conflict between hash and scalar'; +}; + +done_testing;