use Mojo::Base -strict;
use Test::More;
use Test::Mojo;

my $t             = Test::Mojo->new('PostText');
my $invalid_query = 'aaaaaaaa' x 300;
my %good_human    = (answer => 1, number => 'Ⅰ');
my $search_url    =
    '/captcha/H4sIABJ8PGUAA8soKSmw0tfPyU9OzMnILy6xMjYwMNDPKM1NzNMvTk0sSs4AAPrUR3kiAAAA%0A';

subtest 'Search form', sub {
    $t->get_ok('/thread/list')
        ->element_exists('form input[name="q"]'      )
        ->element_exists('form button[type="submit"]');
};

subtest 'Search before CAPTCHA', sub {
    $t->get_ok('/human/search')->status_is(302)
        ->header_like(Location => qr/captcha/);
};

subtest 'Search after CAPTCHA', sub {
    $t->get_ok($search_url);

    $good_human{'csrf_token'} =
        $t->tx->res->dom->at('input[name="csrf_token"]')->val;

    $t->post_ok($search_url, form => \%good_human)
        ->status_is(302)
        ->header_like(Location => qr{human/search});

    $t->get_ok('/human/search?q=lmao')->status_is(200)
        ->text_like(h2 => qr/Search Results/);

    $t->get_ok('/human/search?q=aaaaaaaaaa')->status_is(404)
        ->text_like(p => qr/No posts found/);

    $t->get_ok("/human/search?q=$invalid_query")->status_is(400)
        ->text_like(p => qr/Must be between/);
};

done_testing;