The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use 5.010;
use strict;
use warnings;

use Test::More tests => 13;
use Digest::MD5 qw(md5_hex);

my %MD5_FOR = (
    'background.gif' => '01d4003e8bf0191d38ff170f613e47f0',
    'script.js'      => '61d05c6e57b5cc82b8a316a19b332656',
    'style.css'      => '0d56d9a3743ab94e11a7de17101029f6',
);

BEGIN { use_ok('HTTP::CDN') };

my $cdn = HTTP::CDN->new(
    root => 't/data',
    base => 'cdn/',
);

foreach my $file ( sort keys %MD5_FOR ) {
    my $expected = $file;
    my $hash = uc(substr($MD5_FOR{$file}, 0, 12));
    $expected =~ s/(.*)\.(.*)/"$1.$hash.$2"/e;
    is($cdn->resolve($file), "cdn/$expected", "Generates correct URI for $file");
}
is(md5_hex($cdn->filedata('style.css')), $MD5_FOR{'style.css'});
is(md5_hex($cdn->filedata('script.js')), $MD5_FOR{'script.js'});
is(md5_hex($cdn->filedata('background.gif')), $MD5_FOR{'background.gif'});
my $info = $cdn->fileinfo('style.css');
is($info->{hash}, uc substr($MD5_FOR{'style.css'},0,12));
is($info->{components}{extension}, 'css');
is($info->{mime}->type, 'text/css');

$cdn = HTTP::CDN->new(
    root => 't/data',
    base => '',
);

# For the bare dynamic the MD5 of the stylesheet changes (due to the root path
# being different)
$MD5_FOR{'style.css'} = '0769aeca574c9b7f006a3f0b87bb0cfc';

foreach my $file ( sort keys %MD5_FOR ) {
    my $expected = $file;
    my $hash = uc(substr($MD5_FOR{$file}, 0, 12));
    $expected =~ s/(.*)\.(.*)/"$1.$hash.$2"/e;
    is($cdn->resolve($file), "$expected");
}