The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 16;

BEGIN{
    $ENV{CATALYST_CONFIG} = 't/var/mojomojo.yml';
    $ENV{CATALYST_DEBUG}  = 0;
};
use_ok('Test::WWW::Mechanize::Catalyst', 'MojoMojo' );

my $mech = Test::WWW::Mechanize::Catalyst->new;
my $uniq = time();

# login as admin so we can add tags
ok $mech->get('/.login');
$mech->submit_form(
    fields => {
        login => 'admin',
        pass => 'admin',
    }
);
ok $mech->success, 'logged in as admin via form';

# add three 'foo' tags
ok $mech->get("/.jsrpc/tag/foo_$uniq");
ok $mech->get("/help.jsrpc/tag/foo_$uniq");
ok $mech->get("/admin.jsrpc/tag/foo_$uniq");

# add two 'bar' tags
ok $mech->get("/.jsrpc/tag/bar_$uniq");
ok $mech->get("/help.jsrpc/tag/bar_$uniq");

# add one 'baz' tags
ok $mech->get("/.jsrpc/tag/baz_$uniq");

# fetch tags page
ok $mech->get('/.tags'), "got tags page";
ok $mech->success, "page ok";
my $content = $mech->content;

# check that the tags appear in the cloud successfully
my %cloud_class;
my @lines = split (/\n/, $content);
foreach my $line (@lines) {
   # <span class="tagcloud0"><a href="http://localhost/.list/foo_1250070923">foo_1250070923</a></span>
  my ($level, $tag) = $line =~ /tagcloud(\d+).*\>(\w+)_${uniq}\</;
  next unless (defined $level && $tag);

  # fail if we doubled up on tags somehow
  fail "we already saw $tag" if defined $cloud_class{$tag};
  $cloud_class{$tag} = $level;
}

ok defined $cloud_class{foo}, 'saw foo tag';
ok defined $cloud_class{bar}, 'saw bar tag';
ok defined $cloud_class{baz}, 'saw baz tag';

ok $cloud_class{bar} > $cloud_class{baz}, 'bar > baz';
ok $cloud_class{foo} == $cloud_class{bar}, 'foo = bar';