RSS Git Download  Clone
Raw Blame History
# from chatgpt

use strict;
use warnings;

BEGIN { # set test env otherwise get development config settings - unless explicitly
    # set at command-line: "DANCER_ENVIRONMENT=development prove -lv t/"
    $ENV{DANCER_ENVIRONMENT} ||= $ENV{PLACK_ENV} ||= 'test';
}

use Test::More;
use Plack::Test;
use Data::Printer;
use HTTP::Request::Common;

# Load the app
use_ok('DocsLib');

my $app = DocsLib->psgi_app;

test_psgi $app, sub {
    my $cb = shift; # p $cb;

    # 1. Fetch the root page
    my $res = $cb->( GET '/test/' );
    ok $res->is_success, "GET /test successful"; # p $res->content;
    like $res->content, qr{hx-get="/test/fragment"}, "root has htmx trigger";

    # 2. Simulate an htmx request for /fragment
    my $req = GET '/test/fragment';
    $req->header('HX-Request'     => 'true');        # marks it as htmx
    $req->header('HX-Current-URL' => 'http://localhost/');
    $req->header('Accept'         => 'text/html');
    $req->header('HX-Trigger'     => 'load-btn');
    $req->header('HX-Target'      => 'container');

    $res = $cb->($req);
    ok $res->is_success, "htmx fragment request successful";
    like $res->content, qr/Hello from htmx fragment/, "fragment content is correct";
    {
        my $content = $res->decoded_content; # p $content;
        like $content, qr/hx-request: true/, "hx-request header echoed";
        like $content, qr/hx-current-url: http:\/\/localhost\//, "hx-current-url echoed";
        like $content, qr/hx-trigger: load-btn/, "hx-trigger echoed";
        like $content, qr/hx-target: container/, "hx-target echoed";
    }
};

test_psgi $app, sub {
    my $cb = shift;

    # Build request with some HTMX headers
    my $req = GET '/test/dump-headers';
    $req->header('HX-Request'     => 'true');
    $req->header('HX-Current-URL' => 'http://localhost/');
    $req->header('HX-Trigger'     => 'load-btn');
    $req->header('HX-Target'      => 'container');

    my $res = $cb->($req);
    ok $res->is_success, "request successful";

    my $content = $res->decoded_content; # p $content;
    diag "---- Headers echoed by app ----\n$content\n-------------------------------";

    like $content, qr/HX-Request: true/, "saw hx-request header";
};

done_testing;