diff options
Diffstat (limited to 't/open311/endpoint/schema.t')
-rw-r--r-- | t/open311/endpoint/schema.t | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/t/open311/endpoint/schema.t b/t/open311/endpoint/schema.t new file mode 100644 index 000000000..b669ca4a5 --- /dev/null +++ b/t/open311/endpoint/schema.t @@ -0,0 +1,82 @@ +use strict; use warnings; + +use Test::More; +use Test::Exception; + +use Data::Rx; +use Open311::Endpoint; + +my $endpoint = Open311::Endpoint->new; +my $schema = $endpoint->rx; + +subtest 'comma tests' => sub { + + dies_ok { + my $comma = $schema->make_schema({ + type => '/open311/comma', + }); + } 'Construction dies on no contents'; + + dies_ok { + my $comma = $schema->make_schema({ + type => '/open311/comma', + contents => '/open311/status', + zirble => 'fleem', + }); + } 'Construction dies on extra arguments'; + + my $comma = $schema->make_schema({ + type => '/open311/comma', + contents => '/open311/status', + trim => 1, + }); + + ok ! $comma->check( undef ), 'Undef is not a valid string'; + ok ! $comma->check( [] ), 'Reference is not a valid string'; + + ok ! $comma->check( 'zibble' ), 'invalid string'; + ok ! $comma->check( 'open,zibble' ), 'an invalid element'; + + ok $comma->check( 'open' ), 'single value'; + ok $comma->check( 'open,closed' ), 'multiple values ok'; + ok $comma->check( 'open, closed ' ), 'spaces trimmed ok'; +}; + +subtest 'datetime tests' => sub { + + dies_ok { + my $comma = $schema->make_schema({ + type => '/open311/datetime', + zirble => 'fleem', + }); + } 'Construction dies on extra keys'; + + my $dt = $schema->make_schema({ + type => '/open311/datetime', + }); + + ok ! $dt->check( undef ), 'Undef is not a valid string'; + ok ! $dt->check( [] ), 'Reference is not a valid string'; + + ok ! $dt->check( '9th Feb 2012' ), 'invalid datetime format'; + + ok $dt->check( '1994-11-05T08:15:30-05:00' ), 'datetime format with offset'; + ok $dt->check( '1994-11-05T08:15:30+05:00' ), 'datetime format with positive'; + ok $dt->check( '1994-11-05T13:15:30Z' ), 'datetime format zulu'; +}; + +subtest 'identifier tests' => sub { + my $id = $schema->make_schema( '/open311/example/identifier' ); + + ok ! $id->check( undef ), 'Undef is not a valid string'; + ok ! $id->check( '' ), 'Empty string is not a valid identifier'; + ok ! $id->check( 'foo bar' ), 'String with spaces is not a valid identifier'; + + ok $id->check( 'foo' ), 'Ascii word string is a valid identifier'; + ok $id->check( 'foo_bar' ), 'Ascii word string is a valid identifier'; + ok $id->check( 'foo_123' ), 'Ascii word/num string is a valid identifier'; +}; + +done_testing; + +1; |