| 1 | #!/usr/bin/perl -w |
|---|
| 2 | use strict; |
|---|
| 3 | |
|---|
| 4 | use Plack::Test; |
|---|
| 5 | use HTTP::Request::Common; |
|---|
| 6 | |
|---|
| 7 | use Test::More; |
|---|
| 8 | #use Test::WWW::Mechanize::CGIApp; |
|---|
| 9 | use Test::JSON; |
|---|
| 10 | use Digest::MD5 qw{md5_hex}; |
|---|
| 11 | |
|---|
| 12 | # test fixture setup |
|---|
| 13 | my $dbname = 't/apptest.db'; |
|---|
| 14 | unlink $dbname if -e $dbname; |
|---|
| 15 | my $bookmarks = Bookmarks->new({ dbname => $dbname }); |
|---|
| 16 | $bookmarks->create_tables; |
|---|
| 17 | my $username = 'apptest'; |
|---|
| 18 | my $password = 'apptest'; |
|---|
| 19 | |
|---|
| 20 | # app setup |
|---|
| 21 | use BookmarksApp; |
|---|
| 22 | my $app = BookmarksApp->new({ |
|---|
| 23 | config => { |
|---|
| 24 | dbname => $dbname, |
|---|
| 25 | #auth => 1, |
|---|
| 26 | digest_key => 'test_secret', |
|---|
| 27 | digest_password => md5_hex("$username:Bookmarks:$password"), |
|---|
| 28 | #proxy_ip => '', |
|---|
| 29 | } |
|---|
| 30 | })->to_app; |
|---|
| 31 | |
|---|
| 32 | my $test = Plack::Test->create($app); |
|---|
| 33 | |
|---|
| 34 | my $res = $test->request(GET "/"); |
|---|
| 35 | is($res->content_type, 'text/html'); |
|---|
| 36 | |
|---|
| 37 | $res = $test->request(GET '/?format=json'); |
|---|
| 38 | is($res->content_type, 'application/json', 'JSON content type is application/json'); |
|---|
| 39 | is_valid_json $res->content; |
|---|
| 40 | is_json $res->content, '{ "bookmarks": [] }'; |
|---|
| 41 | |
|---|
| 42 | $res = $test->request(GET '/?format=xbel'); |
|---|
| 43 | is($res->content_type, 'application/xml', 'XBEL content type is application/xml'); |
|---|
| 44 | |
|---|
| 45 | $res = $test->request(GET '/?format=text'); |
|---|
| 46 | is($res->content_type, 'text/uri-list', 'Text content type is text/uri-list'); |
|---|
| 47 | |
|---|
| 48 | |
|---|
| 49 | my $bookmark_uri; |
|---|
| 50 | |
|---|
| 51 | subtest 'Created bookmark' => sub { |
|---|
| 52 | # create a bookmark |
|---|
| 53 | my $res = $test->request(POST |
|---|
| 54 | '/', |
|---|
| 55 | { |
|---|
| 56 | uri => 'http://metacpan.org', |
|---|
| 57 | title => 'My Bookmark', |
|---|
| 58 | tags => 'test', |
|---|
| 59 | }, |
|---|
| 60 | ); |
|---|
| 61 | |
|---|
| 62 | $bookmark_uri = $res->header('Location'); #->as_string; |
|---|
| 63 | |
|---|
| 64 | $res = $test->request(GET "$bookmark_uri/title"); |
|---|
| 65 | is($res->content_type, 'text/plain', 'Title is text/plain'); |
|---|
| 66 | is($res->content, 'My Bookmark', 'Title has correct value'); |
|---|
| 67 | $res = $test->request(GET "$bookmark_uri/uri"); |
|---|
| 68 | is($res->content_type, 'text/plain', 'URI is text/plain'); |
|---|
| 69 | is($res->content, 'http://metacpan.org', 'URI has correct value'); |
|---|
| 70 | $res = $test->request(GET "$bookmark_uri/tags"); |
|---|
| 71 | is($res->content_type, 'text/plain', 'Tags are text/plain'); |
|---|
| 72 | is($res->content, 'test', 'Tags have correct value'); |
|---|
| 73 | }; |
|---|
| 74 | |
|---|
| 75 | subtest 'Updated bookmark' => sub { |
|---|
| 76 | my $res = $test->request( |
|---|
| 77 | POST $bookmark_uri, |
|---|
| 78 | { |
|---|
| 79 | uri => 'http://search.cpan.org', |
|---|
| 80 | title => 'My Other Bookmark', |
|---|
| 81 | tags => 'test one two', |
|---|
| 82 | }, |
|---|
| 83 | ); |
|---|
| 84 | $res = $test->request(GET "$bookmark_uri/title"); |
|---|
| 85 | is($res->content_type, 'text/plain', 'Title is text/plain'); |
|---|
| 86 | is($res->content, 'My Other Bookmark', 'Title has correct value'); |
|---|
| 87 | $res = $test->request(GET "$bookmark_uri/uri"); |
|---|
| 88 | is($res->content_type, 'text/plain', 'URI is text/plain'); |
|---|
| 89 | is($res->content, 'http://search.cpan.org', 'URI has correct value'); |
|---|
| 90 | $res = $test->request(GET "$bookmark_uri/tags"); |
|---|
| 91 | is($res->content_type, 'text/plain', 'Tags are text/plain'); |
|---|
| 92 | is($res->content, 'one test two', 'Tags have correct value'); |
|---|
| 93 | }; |
|---|
| 94 | |
|---|
| 95 | $res = $test->request(GET "$bookmark_uri/id"); |
|---|
| 96 | my $id = $res->content; |
|---|
| 97 | $res = $test->request(GET "$bookmark_uri/ctime"); |
|---|
| 98 | my $ctime = $res->content; |
|---|
| 99 | $res = $test->request(GET "$bookmark_uri/mtime"); |
|---|
| 100 | my $mtime = $res->content; |
|---|
| 101 | |
|---|
| 102 | $res = $test->request(GET "$bookmark_uri?format=json"); |
|---|
| 103 | is($res->content_type, 'application/json'); |
|---|
| 104 | is_valid_json $res->content; |
|---|
| 105 | is_json $res->content, <<"END_JSON"; |
|---|
| 106 | { |
|---|
| 107 | "id": $id, |
|---|
| 108 | "bookmark_uri": "$bookmark_uri", |
|---|
| 109 | "ctime": $ctime, |
|---|
| 110 | "mtime": $mtime, |
|---|
| 111 | "uri": "http://search.cpan.org", |
|---|
| 112 | "title": "My Other Bookmark", |
|---|
| 113 | "tags": ["one", "test", "two"] |
|---|
| 114 | } |
|---|
| 115 | END_JSON |
|---|
| 116 | |
|---|
| 117 | done_testing(); |
|---|
| 118 | |
|---|
| 119 | # test fixture teardown |
|---|
| 120 | unlink $dbname if -e $dbname; |
|---|