]> Dogcows Code - chaz/graphql-client/blobdiff - t/cli.t
fix CLI option processing
[chaz/graphql-client] / t / cli.t
diff --git a/t/cli.t b/t/cli.t
new file mode 100755 (executable)
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;
This page took 0.018089 seconds and 4 git commands to generate.