blob: 1f56c9943279b6c7a43a567c839ad4df731e04a4 [file] [log] [blame]
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');
$app->routes->get('/settings/:scope/:page')->to(cb => sub {}, scope => undef)->name('settings');
# Load plugin to test
$app->plugin('KalamarPages');
my $languages = [qw/en de/];
$app->plugin('Localize' => {
dict => {
Nav => {
_ => sub { $languages },
-en => {
faq => 'FAQ',
'#default-foundries' => 'Default Foundries',
},
de => {
faq => 'FAQ',
'#default-foundries' => 'Standard Foundries'
}
}
}
});
my $navi = [
{
id => 'development',
title => 'KorAP'
}
];
my $render = $app->navigation('doc', $navi);
like($render, qr!/doc/development!, 'Path matches doc/development');
like($render, qr!KorAP!, 'Title matches');
$navi = [
{
id => 'development',
title => 'KorAP'
},
{
id => 'krill',
title => 'Krill'
}
];
$render = $app->navigation('doc', $navi);
like($render, qr!/doc/development!, 'Path matches doc/development');
like($render, qr!KorAP!, 'Title matches');
like($render, qr!/doc/krill!, 'Path matches doc/krill');
like($render, qr!Krill!, 'Title matches');
$navi = [
{
id => 'development',
title => 'KorAP',
items => [
{
id => 'krill',
title => 'Krill',
}
]
},
{
id => 'faq',
title => 'FAQ'
}
];
$render = $app->navigation('doc', $navi);
like($render, qr!/doc/development!, 'Path matches doc/development');
like($render, qr!/doc/development/krill!, 'Path matches development/krill');
like($render, qr!/doc/faq!, 'Path matches doc/faq');
$navi = [
{
id => 'development',
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 => 'FAQ'
}
];
$render = $app->navigation('doc', $navi);
like($render, qr!/doc/development!, 'Path matches doc/development');
like($render, qr!/doc/development/krill!, 'Path matches development/krill');
like($render, qr!/doc/development/koral!, 'Path matches development/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');
ok($app->navi->exists('doc'));
ok(!$app->navi->exists('xy'));
is($app->navigation('xy'), '');;
my $c = $app->build_controller;
$c->stash(page => 'development');
$render = $c->navigation('doc', $navi);
like($render, qr!/doc/development!, 'Path matches doc/development');
like($render, qr!/doc/development/krill!, 'Path matches development/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/development!, 'Path matches doc/development');
like($render, qr!/doc/development/krill!, 'Path matches development/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 => 'development',
title => 'KorAP',
items => [
{
id => 'krill',
title => 'Krill',
},
{
id => 'koral',
title => 'Koral'
}
]
},
{
title => 'Query Languages',
id => 'ql',
class => 'folded',
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 => 'FAQ'
}
];
$render = $c->navigation('doc', $navi);
like($render, qr!/doc/development!, 'Path matches doc/development');
like($render, qr!/doc/development/krill!, 'Path matches development/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+');
$c->stash(page => 'cosmas2');
$render = $c->navigation('doc', $navi);
like($render, qr!\<li class=\"folded\">\s*<a href="/doc/ql\#page-top">Query Languages</a>\s*<ul class="nav nav-doc active">\s*<li class="active"><a href="/doc/ql/cosmas2\#page-top">Cosmas II</a></li>!);
delete $c->stash->{cosmas2};
# Test for translations
$navi = [
{
id => 'development',
title => 'KorAP',
items => [
{
id => 'krill',
title => 'Krill',
}
]
},
{
id => 'faq',
title => 'FAQ'
}
];
$render = $app->navigation('doc', $navi);
like($render, qr!/doc/development!, 'Path matches doc/development');
like($render, qr!/doc/development/krill!, 'Path matches development/krill');
like($render, qr!<a href="/doc/development/krill(?:#[^"]+)?">Krill</a>!,
'Path matches development/krill');
like($render, qr!<a href="/doc/faq(?:#[^"]+)?">FAQ</a>!,
'Path matches FAQ');
# Change preferred language
$languages = [qw/de en/];
$render = $app->navigation('doc', $navi);
like($render, qr!/doc/development!, 'Path matches doc/development');
like($render, qr!/doc/development/krill!, 'Path matches development/krill');
like($render, qr!<a href="/doc/development/krill(?:#[^"]+)?">Krill</a>!,
'Path matches development/krill');
like($render, qr!<a href="/doc/faq(?:#[^"]+)?">FAQ</a>!,
'Path matches FAQ');
# Create settings realm
$app->navi->add(settings => (
'OAuth', 'oauth'
));
# Create settings realm
$app->navi->add(settings => (
'Marketplace', 'marketplace'
));
$render = $app->navigation('settings');
like($render, qr!/settings/oauth#page-top!);
like($render, qr!/settings/marketplace#page-top!);
my @list = $app->navi->list('settings');
is($list[0]->{url}, '/settings/oauth#page-top');
is($list[0]->{title}, 'OAuth');
is($list[1]->{url}, '/settings/marketplace#page-top');
is($list[1]->{title}, 'Marketplace');
done_testing;
__END__