From 402c550b7489bb969c8602132c65243d0ab2ce4d Mon Sep 17 00:00:00 2001 From: swag Date: Tue, 27 Jun 2023 01:30:32 -0400 Subject: [PATCH] Implement raw/txt format; moar tests --- README.md | 4 +--- lib/PostText.pm | 6 ++++-- t/remark.t | 11 ++++++++++- t/thread.t | 14 ++++++++++++-- templates/remark/by_id.txt.ep | 9 +++++++++ templates/thread/by_id.txt.ep | 10 ++++++++++ 6 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 templates/remark/by_id.txt.ep create mode 100644 templates/thread/by_id.txt.ep diff --git a/README.md b/README.md index 958487f..3014e6b 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,7 @@ tests locally: ## TODOs +1. Probably gotta add a link to the 'raw' txt view somewhere 1. "All new posts flagged" mode (require approval for new posts) 1. Tests for mod-only user? @@ -72,7 +73,4 @@ tests locally: NOT hidden_status` but that returns null, probably need a different `JOIN` which may not be worth the trouble/processing 1. Implement tripcodes (moving this down in priority due to complexity...) -1. Return a text response instead of HTML if a `.txt` extension [is - requested](https://docs.mojolicious.org/Mojolicious/Plugin/DefaultHelpers#respond_to) - (JSON?) 1. Post thread via SMS (twil.io??) diff --git a/lib/PostText.pm b/lib/PostText.pm index 3700db6..923cdae 100644 --- a/lib/PostText.pm +++ b/lib/PostText.pm @@ -136,7 +136,8 @@ sub startup($self) { ->name('post_thread'); $thread->any('/single/:thread_id', [thread_id => qr/\d+/]) - ->get('/:thread_page', [thread_page => qr/\d+/], {thread_page => 0}) + ->any('/:thread_page', [thread_page => qr/\d+/], {thread_page => 0}) + ->get('/', [format => [qw{html txt}]], {format => undef}) ->to('thread#by_id') ->name('single_thread'); @@ -160,7 +161,8 @@ sub startup($self) { ->to('remark#create') ->name('post_remark'); - $remark->get('/single/:remark_id', [remark_id => qr/\d+/]) + $remark->any('/single/:remark_id', [remark_id => qr/\d+/]) + ->get('/', [format => [qw{html txt}]], {format => undef}) ->to('remark#by_id') ->name('single_remark'); diff --git a/t/remark.t b/t/remark.t index 175fb39..5091253 100644 --- a/t/remark.t +++ b/t/remark.t @@ -17,7 +17,14 @@ my %invalid_remark = ( subtest 'View single remark', sub { $t->get_ok('/remark/single/1')->status_is(200) ->text_like(h2 => qr/Remark #1/) - ->element_exists('a[href$="/remark/post/1/1"]') + ->element_exists('a[href$="/remark/post/1/1"]'); + $t->get_ok('/remark/single/65536')->status_is(404) + ->text_like(p => qr/Remark not found/); + + $t->get_ok('/remark/single/1.txt')->status_is(200) + ->content_type_like(qr{text/plain}); + $t->get_ok('/remark/single/65536.txt')->status_is(404) + ->content_type_like(qr{text/plain}); }; $t->ua->max_redirects(1); @@ -29,6 +36,8 @@ subtest 'Post new remark', sub { ->element_exists('form textarea[name="body"]') ->element_exists('form button[type="submit"]' ) ->text_like(h2 => qr/Remark on Thread #/); + $t->get_ok('/remark/post/65536')->status_is(404) + ->text_like(p => qr/Thread not found/); # Test the remark-to-remark thing $t->get_ok('/remark/post/1/1')->status_is(200) ->element_exists('form input[name="author"]' ) diff --git a/t/thread.t b/t/thread.t index a3c3a2e..7d71c6d 100644 --- a/t/thread.t +++ b/t/thread.t @@ -28,18 +28,28 @@ subtest 'List threads by page', sub { $t->get_ok('/thread/list/1')->status_is(200) ->text_like(h2 => qr/Threads List/); + + $t->get_ok('/thread/list/65536')->status_is(404) + ->text_like(p => qr/Page not found/); }; subtest 'View single thread', sub { $t->get_ok('/thread/single/1')->status_is(200) ->text_like(h2 => qr/Thread #1/); + $t->get_ok('/thread/single/65536')->status_is(404) + ->text_like(p => qr/Thread not found/); + + $t->get_ok('/thread/single/1.txt')->status_is(200) + ->content_type_like(qr{text/plain}); + $t->get_ok('/thread/single/65536.txt')->status_is(404) + ->content_type_like(qr{text/plain}); # Test the thread_page and remark_id params $t->get_ok('/thread/single/1/1')->status_is(200) ->element_exists('a[href$="/remark/post/1/1"]'); - $t->get_ok('/thread/single/65536')->status_is(404) - ->text_like(p => qr/Thread not found/); + $t->get_ok('/thread/single/1/65536')->status_is(404) + ->text_like(p => qr/Page not found/); }; subtest 'Threads feed', sub { diff --git a/templates/remark/by_id.txt.ep b/templates/remark/by_id.txt.ep new file mode 100644 index 0000000..a461385 --- /dev/null +++ b/templates/remark/by_id.txt.ep @@ -0,0 +1,9 @@ +% if (keys %{$remark}) { + %= $remark->{'id'}; + %= $remark->{'date'}; + %= $remark->{'author'}; + + %= $remark->{'body'}; +% } else { + %= stash 'error'; +% } diff --git a/templates/thread/by_id.txt.ep b/templates/thread/by_id.txt.ep new file mode 100644 index 0000000..17c895a --- /dev/null +++ b/templates/thread/by_id.txt.ep @@ -0,0 +1,10 @@ +% if (keys %{$thread}) { + %= $thread->{'id'}; + %= $thread->{'title'}; + %= $thread->{'date'}; + %= $thread->{'author'}; + + %= $thread->{'body'}; +% } else { + %= stash 'error'; +% }