The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
#!perl
use strict;
use warnings;

use Test::More 'no_plan';

BEGIN { use_ok("Rubric::Config", 't/config/rubric.yml'); }
BEGIN { use_ok("Rubric::EntryTag"); }
BEGIN { use_ok("Rubric::User"); }

use lib 't/lib';
use Rubric::Test::DBSetup;
load_test_data_ok('basic');

# entrytag->related_tags
{ # global entrytag query
  my $related_tags = Rubric::EntryTag->related_tags([ '@private' ]);

  is_deeply(
    $related_tags,
    [ ],
    'nothing is globally related to @private without a login',
  );
}

# entrytag->related_tags_counted
{ # global entrytag query
  my $related_tags = Rubric::EntryTag->related_tags_counted([ '@private' ]);

  is_deeply(
    $related_tags,
    [ ],
    'nothing is globally related_counted to @private',
  );
}


# user->related_tags
{ # user query, with no context of logged in user
  my $user = Rubric::User->retrieve('mxlptlyk');
  my $related_tags = $user->related_tags([ '@private' ]);

  is_deeply(
    $related_tags,
    [ ],
    'nothing is related to @private without a login',
  );
}

{ # user query, with other user asking
  my $user = Rubric::User->retrieve('mxlptlyk');
  my $related_tags = $user->related_tags([ '@private' ], { user => 'jjj' });

  is_deeply(
    $related_tags,
    [ ],
    q(nothing is related to @private if you're the wrong user),
  );
}

{ # user query, with user himsefl asking
  my $user = Rubric::User->retrieve('mxlptlyk');
  my $related_tags = $user->related_tags([ '@private' ], {user => 'mxlptlyk'});

  is_deeply(
    $related_tags,
    [ qw(plans) ],
    q(if you ask about your own @private entries, you may know),
  );
}

# user->related_tags_counted
{ # user query, with no context of logged in user
  my $user = Rubric::User->retrieve('mxlptlyk');
  my $related_tags = $user->related_tags_counted([ '@private' ]);

  is_deeply(
    $related_tags,
    [ ],
    'nothing is related to @private without a login',
  );
}

{ # user query, with other user asking
  my $user = Rubric::User->retrieve('mxlptlyk');
  my $related_tags = $user->related_tags_counted(
    [ '@private' ],
    { user => 'jjj' }
  );

  is_deeply(
    $related_tags,
    [ ],
    q(nothing is related to @private if you're the wrong user),
  );
}

{ # user query, with user himsefl asking
  my $user = Rubric::User->retrieve('mxlptlyk');
  my $related_tags = $user->related_tags_counted(
    [ '@private' ],
    {user => 'mxlptlyk'}
  );

  is_deeply(
    $related_tags,
    [ [ plans => 1 ] ],
    q(if you ask about your own @private entries, you may know),
  );
}

# entry->recent_tags_counted
{
  my $related_tags = Rubric::Entry->recent_tags_counted;

  ok(
    !(grep { $_->[0] eq 'plans' } @$related_tags),
    q(tags contained only in private entries are not leaked)
  );
}