Support CSP in Matomo/Piwik plugin

Change-Id: Ie80c6ffca714460c310e2b55ad9b3b63f5ae71ad
diff --git a/t/plugin/piwik.t b/t/plugin/piwik.t
index 5559cc6..a2ad05c 100644
--- a/t/plugin/piwik.t
+++ b/t/plugin/piwik.t
@@ -3,12 +3,12 @@
 use Test::Mojo;
 
 # Test the documentation
-my $t = Test::Mojo->new('Kalamar');
-
-$t->app->plugin('Piwik' => {
-  url => 'https://piwik.korap.ids-mannheim.de/',
-  site_id => 1,
-  embed => 1
+my $t = Test::Mojo->new('Kalamar' => {
+  'Piwik' => {
+    url => 'https://piwik.korap.ids-mannheim.de/',
+    site_id => 1,
+    embed => 1
+  }
 });
 
 # Load piwik
@@ -18,27 +18,63 @@
   ->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!window\.addEventListener\('korapRequest!)
-  ->content_like(qr!setDocumentTitle!)
-  ->content_like(qr!setCustomUrl!)
-  ->content_like(qr!trackPageView!)
+  ->content_like(qr!;console\.log\("fun"\)!)
+  ->content_like(qr!;window\.addEventListener\('korapRequest!)
   ;
 
 # No embedding
-$t->app->plugin('Piwik' => {
-  url => 'https://piwik.korap.ids-mannheim.de/',
-  site_id => 1,
-  embed => 0
+$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!var _paq!)
+  ->content_unlike(qr!_paq!)
   ->content_unlike(qr!window\.addEventListener\('korapRequest!)
+  ->element_exists_not('script[src$="/js/tracking.js"]')
   ;
 
-
-done_testing();
+done_testing;