The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use lib 't';

use Mojolicious::Lite;
use Test::Mojo;

use Mojolicious::Plugin::DigestAuth::Util 'parse_header';
use Test::More tests => 13;
use TestHelper;

my $url = '/';
get $url => create_action(expires => 1);

my $t = Test::Mojo->new;     
$t->get_ok($url)
  ->status_is(401);

my $headers = build_auth_request($t->tx);
$t->get_ok($url, $headers)
  ->status_is(200);

# Let nonce expire 
sleep(2);

$t->get_ok($url, $headers)
  ->status_is(401)
  ->header_like('WWW-Authenticate', qr/stale=true/);

# Authenticate with new nonce
$headers = parse_header($t->tx->res->headers->www_authenticate);   
$t->get_ok($url, build_auth_request($t->tx, %$headers))
 ->status_is(200);
 
# Try with a bad nonce
my $good_nonce = $headers->{nonce};
$headers->{nonce} = '-> __bad_nonce__';
$t->get_ok($url, build_auth_request($t->tx, %$headers))
  ->status_is(401);

# Try again with the good one
$headers->{nonce} = $good_nonce;
$t->get_ok($url, build_auth_request($t->tx, %$headers))
  ->status_is(200);