#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 31;
use lib 't/lib';
use Net::Jifty::Test;
my $j = Net::Jifty::Test->new();
$j->ua->clear();
my %args = (
a => 'b',
c => 'd',
);
$Net::Jifty::Test::content = << "YAML";
---
a: {}
b: {}
c: {}
YAML
$j->validate_action_args(["create", "Jifty::Model::Foo"], %args);
my ($name, $args) = $j->ua->next_call;
is($name, 'get', 'used get for validation');
is($args->[1], 'http://jifty.org/=/action/CreateFoo.yml', 'correct URL');
$j->ua->clear;
ok(delete $j->action_specs->{"CreateFoo"}, "cached spec");
$Net::Jifty::Test::content = << "YAML";
---
a:
mandatory: 1
c:
mandatory: 1
YAML
$j->validate_action_args(["create", "Jifty::Model::Foo"], %args);
($name, $args) = $j->ua->next_call;
is($name, 'get', 'used get for validation');
is($args->[1], 'http://jifty.org/=/action/CreateFoo.yml', 'correct URL');
$j->ua->clear;
ok(delete $j->action_specs->{"CreateFoo"}, "cached spec");
$Net::Jifty::Test::content = << "YAML";
---
a:
mandatory: 1
b:
mandatory: 1
c:
mandatory: 1
YAML
eval { $j->validate_action_args("CreateFoo", %args) };
like($@, qr/^Mandatory argument 'b' not given for action CreateFoo\. at /);
($name, $args) = $j->ua->next_call;
is($name, 'get', 'used get for validation');
is($args->[1], 'http://jifty.org/=/action/CreateFoo.yml', 'correct URL');
$j->ua->clear;
ok(delete $j->action_specs->{"CreateFoo"}, "cached spec");
$Net::Jifty::Test::content = << "YAML";
---
a:
mandatory: 1
b: {}
YAML
eval { $j->validate_action_args(["create", "Jifty::Model::Foo"], %args) };
like($@, qr/^Unknown arguments given for action CreateFoo: c at /);
($name, $args) = $j->ua->next_call;
is($name, 'get', 'used get for validation');
is($args->[1], 'http://jifty.org/=/action/CreateFoo.yml', 'correct URL');
$j->ua->clear;
ok(delete $j->action_specs->{"CreateFoo"}, "cached spec");
$j = Net::Jifty::Test->new(strict_arguments => 1);
$j->ua->clear();
$Net::Jifty::Test::content = << "YAML";
---
c: {}
YAML
eval { $j->act("CreateFoo", %args) };
like($@, qr/^Unknown arguments given for action CreateFoo: a at /);
($name, $args) = $j->ua->next_call;
is($name, 'get', 'used get for validation');
is($args->[1], 'http://jifty.org/=/action/CreateFoo.yml', 'correct URL');
$j->ua->clear;
ok(delete $j->action_specs->{"CreateFoo"}, "cached spec");
$Net::Jifty::Test::content = << "YAML";
---
a: {}
c: {}
YAML
$j->create("Jifty::Model::Foo", %args);
($name, $args) = $j->ua->next_call;
is($name, 'get', 'used get for validation');
is($args->[1], 'http://jifty.org/=/action/CreateFoo.yml', 'correct URL');
ok($j->action_specs->{"CreateFoo"}, "cached spec");
($name, $args) = $j->ua->next_call;
is($name, 'request', 'used request for create');
isa_ok($args->[1], 'HTTP::Request', 'argument is an HTTP request');
is($args->[1]->method, 'POST', 'correct method (POST)');
is($args->[1]->uri, 'http://jifty.org/=/model/Jifty%3A%3AModel%3A%3AFoo.yml', 'correct URL');
like($args->[1]->content, qr/^(a=b&c=d|c=d&a=b)$/, 'correct arguments');
$j->ua->clear;
$j->create("Jifty::Model::Foo", %args);
($name, $args) = $j->ua->next_call;
is($name, 'request', 'used cache version of action spec');
isa_ok($args->[1], 'HTTP::Request', 'argument is an HTTP request');
is($args->[1]->method, 'POST', 'correct method (POST)');
is($args->[1]->uri, 'http://jifty.org/=/model/Jifty%3A%3AModel%3A%3AFoo.yml', 'correct URL');
like($args->[1]->content, qr/^(a=b&c=d|c=d&a=b)$/, 'correct arguments');
$j->ua->clear;