Generalized the usage of the navigation helper by introducing a 'realm' parameter
Change-Id: Ief04c7884d144a60855a25498faa8cca44a8ecd2
diff --git a/t/navigation.t b/t/navigation.t
new file mode 100644
index 0000000..f9518e8
--- /dev/null
+++ b/t/navigation.t
@@ -0,0 +1,266 @@
+use Mojo::Base -strict;
+use Mojolicious::Lite;
+use Test::More;
+use Test::Mojo;
+use utf8;
+
+my $t = Test::Mojo->new;
+my $app = $t->app;
+
+# Add additional plugin path
+push(@{$app->plugins->namespaces}, 'Kalamar::Plugin');
+
+# Establish test route
+$app->routes->get('/doc/:scope/:page')->to(cb => sub {}, scope => undef)->name('doc');
+
+# Load plugin to test
+$app->plugin('KalamarPages');
+
+my $languages = [qw/en de/];
+$app->plugin('Localize' => {
+ dict => {
+ Nav => {
+ _ => sub { $languages },
+ -en => {
+ faq => 'F.A.Q.',
+ '#default-foundries' => 'Default Foundries',
+ },
+ de => {
+ faq => 'Häufige Fragen',
+ '#default-foundries' => 'Standard Foundries'
+ }
+ }
+ }
+});
+
+my $navi = [
+ {
+ id => 'korap',
+ title => 'KorAP'
+ }
+];
+
+my $render = $app->navigation('doc', $navi);
+like($render, qr!/doc/korap!, 'Path matches doc/korap');
+like($render, qr!KorAP!, 'Title matches');
+
+$navi = [
+ {
+ id => 'korap',
+ title => 'KorAP'
+ },
+ {
+ id => 'krill',
+ title => 'Krill'
+ }
+];
+
+$render = $app->navigation('doc', $navi);
+like($render, qr!/doc/korap!, 'Path matches doc/korap');
+like($render, qr!KorAP!, 'Title matches');
+like($render, qr!/doc/krill!, 'Path matches doc/krill');
+like($render, qr!Krill!, 'Title matches');
+
+$navi = [
+ {
+ id => 'korap',
+ title => 'KorAP',
+ items => [
+ {
+ id => 'krill',
+ title => 'Krill',
+ }
+ ]
+ },
+ {
+ id => 'faq',
+ title => 'F.A.Q.'
+ }
+];
+
+$render = $app->navigation('doc', $navi);
+like($render, qr!/doc/korap!, 'Path matches doc/korap');
+like($render, qr!/doc/korap/krill!, 'Path matches korap/krill');
+like($render, qr!/doc/faq!, 'Path matches doc/faq');
+
+$navi = [
+ {
+ id => 'korap',
+ title => 'KorAP',
+ items => [
+ {
+ id => 'krill',
+ title => 'Krill',
+ },
+ {
+ id => 'koral',
+ title => 'Koral'
+ }
+ ]
+ },
+ {
+ title => 'Query Languages',
+ id => 'ql',
+ items => [
+ {
+ title => 'Cosmas II',
+ id => 'cosmas2'
+ },
+ {
+ 'title' => 'Poliqarp+',
+ 'id' => 'poliqarp-plus',
+ items => [
+ {
+ "title" => "Simple Segments",
+ "id" => "#segments"
+ },
+ {
+ "title" => "Complex Segments",
+ "id" => "#complex"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ id => 'faq',
+ title => 'F.A.Q.'
+ }
+];
+
+$render = $app->navigation('doc', $navi);
+like($render, qr!/doc/korap!, 'Path matches doc/korap');
+like($render, qr!/doc/korap/krill!, 'Path matches korap/krill');
+like($render, qr!/doc/korap/koral!, 'Path matches korap/koral');
+like($render, qr!/doc/ql!, 'Path matches doc/ql');
+like($render, qr!/doc/ql/cosmas2!, 'Path matches doc/ql/cosmas2');
+like($render, qr!/doc/ql/poliqarp-plus!, 'Path matches doc/ql/poliqarp-plus');
+like($render, qr!/doc/ql/poliqarp-plus#segments!,
+ 'Path matches doc/ql/poliqarp-plus#segments');
+like($render, qr!/doc/ql/poliqarp-plus#complex!,
+ 'Path matches doc/ql/poliqarp-plus#complex');
+like($render, qr!/doc/faq!, 'Path matches doc/faq');
+
+
+my $c = $app->build_controller;
+$c->stash(page => 'korap');
+$render = $c->navigation('doc', $navi);
+like($render, qr!/doc/korap!, 'Path matches doc/korap');
+like($render, qr!/doc/korap/krill!, 'Path matches korap/krill');
+like($render, qr!/doc/ql!, 'Path matches doc/ql');
+like($render, qr!/doc/ql/poliqarp-plus#segments!,
+ 'Path matches doc/ql/poliqarp-plus#segments');
+like($render, qr!/doc/ql/poliqarp-plus#complex!,
+ 'Path matches doc/ql/poliqarp-plus#complex');
+like($render, qr!class="active".*?KorAP!, 'Active value for KorAP');
+
+$c->stash(page => 'poliqarp-plus');
+$render = $c->navigation('doc', $navi);
+like($render, qr!/doc/korap!, 'Path matches doc/korap');
+like($render, qr!/doc/korap/krill!, 'Path matches korap/krill');
+like($render, qr!/doc/ql!, 'Path matches doc/ql');
+like($render, qr!/doc/ql/poliqarp-plus#segments!,
+ 'Path matches doc/ql/poliqarp-plus#segments');
+like($render, qr!/doc/ql/poliqarp-plus#complex!,
+ 'Path matches doc/ql/poliqarp-plus#complex');
+like($render, qr!class="active".*?Poliqarp\+!, 'Active value for Poliqarp+');
+
+
+$navi = [
+ {
+ id => 'korap',
+ title => 'KorAP',
+ items => [
+ {
+ id => 'krill',
+ title => 'Krill',
+ },
+ {
+ id => 'koral',
+ title => 'Koral'
+ }
+ ]
+ },
+ {
+ title => 'Query Languages',
+ id => 'ql',
+ items => [
+ {
+ title => 'Cosmas II',
+ id => 'cosmas2'
+ },
+ {
+ 'title' => 'Poliqarp+',
+ 'id' => 'poliqarp-plus',
+ 'class' => 'folded',
+ items => [
+ {
+ "title" => "Simple Segments",
+ "id" => "#segments"
+ },
+ {
+ "title" => "Complex Segments",
+ "id" => "#complex"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ id => 'faq',
+ title => 'F.A.Q.'
+ }
+];
+$render = $c->navigation('doc', $navi);
+
+like($render, qr!/doc/korap!, 'Path matches doc/korap');
+like($render, qr!/doc/korap/krill!, 'Path matches korap/krill');
+like($render, qr!/doc/ql!, 'Path matches doc/ql');
+like($render, qr!/doc/ql/poliqarp-plus#segments!,
+ 'Path matches doc/ql/poliqarp-plus#segments');
+like($render, qr!/doc/ql/poliqarp-plus#complex!,
+ 'Path matches doc/ql/poliqarp-plus#complex');
+like($render, qr!class="folded active".*?Poliqarp\+!, 'Active and folded value for Poliqarp+');
+
+
+# Test for translations
+$navi = [
+ {
+ id => 'korap',
+ title => 'KorAP',
+ items => [
+ {
+ id => 'krill',
+ title => 'Krill',
+ }
+ ]
+ },
+ {
+ id => 'faq',
+ title => 'F.A.Q.'
+ }
+];
+
+$render = $app->navigation('doc', $navi);
+like($render, qr!/doc/korap!, 'Path matches doc/korap');
+like($render, qr!/doc/korap/krill!, 'Path matches korap/krill');
+like($render, qr!<a href="/doc/korap/krill(?:#[^"]+)?">Krill</a>!,
+ 'Path matches korap/krill');
+like($render, qr!<a href="/doc/faq(?:#[^"]+)?">F\.A\.Q\.</a>!,
+ 'Path matches FAQ');
+
+# Change preferred language
+$languages = [qw/de en/];
+
+$render = $app->navigation('doc', $navi);
+like($render, qr!/doc/korap!, 'Path matches doc/korap');
+like($render, qr!/doc/korap/krill!, 'Path matches korap/krill');
+like($render, qr!<a href="/doc/korap/krill(?:#[^"]+)?">Krill</a>!,
+ 'Path matches korap/krill');
+like($render, qr!<a href="/doc/faq(?:#[^"]+)?">Häufige Fragen</a>!,
+ 'Path matches FAQ');
+
+done_testing;
+
+__END__
+