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

# Test the documentation
my $t = Test::Mojo->new('Kalamar' => {
  'Piwik' => {
    url => 'https://piwik.korap.ids-mannheim.de/',
    site_id => 1,
    embed => 1
  }
});

# Load piwik
$t->app->plugin('Kalamar::Plugin::Piwik');

$t->get_ok('/doc/faq')
  ->status_is(200)
  ->text_like('section[name=piwik-opt-out] h3', qr!can I opt-out!)
  ->element_exists('section[name=piwik-opt-out] iframe')
  ->content_unlike(qr!var _paq!)
  ->content_unlike(qr!window\.addEventListener\('korapRequest!)
  ->content_unlike(qr!setDocumentTitle!)
  ->content_unlike(qr!setCustomUrl!)
  ->content_unlike(qr!trackPageView!)
  ->element_exists('script[src$="/js/tracking.js"]')
  ;

$t = Test::Mojo->new('Kalamar' => {
  'Piwik' => {
    url => 'https://piwik.korap.ids-mannheim.de/',
    site_id => 1,
    embed => 1,
    append => 'console.log("fun")'
  }
});

$t->app->plugin('Kalamar::Plugin::Piwik');

is($t->app->piwik_tag('as-script'), '<script src="/js/tracking.js"></script>' .
     '<script src="https://piwik.korap.ids-mannheim.de/piwik.js" async defer></script>');

$t->get_ok('/doc/faq')
  ->status_is(200)
  ->text_like('section[name=piwik-opt-out] h3', qr!can I opt-out!)
  ->element_exists('section[name=piwik-opt-out] iframe')
  ->element_exists('script[src$="/js/tracking.js"]')
  ->content_unlike(qr!_paq!)
  ->header_like('Content-Security-Policy',qr!connect-src 'self' [^;]*?https://piwik\.korap\.ids-mannheim\.de/!)
  ->header_like('Content-Security-Policy',qr!img-src 'self' [^;]*?https://piwik\.korap\.ids-mannheim\.de/!)
  ->header_like('Content-Security-Policy',qr!script-src 'self' [^;]*?https://piwik.korap.ids-mannheim.de/!)
  ;

$t->get_ok('/js/tracking.js')
  ->status_is(200)
  ->content_like(qr!var _paq!)
  ->content_like(qr!;console\.log\("fun"\)!)
  ->content_like(qr!;window\.addEventListener\('korapRequest!)
  ;

# No embedding
$t = Test::Mojo->new('Kalamar' => {
  'Piwik' => {
    url => 'https://piwik.korap.ids-mannheim.de/',
    site_id => 1,
    embed => 0
  }
});
$t->app->plugin('Kalamar::Plugin::Piwik');

$t->get_ok('/doc/faq')
  ->status_is(200)
  ->text_like('section[name=piwik-opt-out] h3', qr!can I opt-out!)
  ->element_exists_not('section[name=piwik-opt-out] iframe')
  ->content_unlike(qr!_paq!)
  ->content_unlike(qr!window\.addEventListener\('korapRequest!)
  ->element_exists_not('script[src$="/js/tracking.js"]')
  ;

done_testing;
