# t/betafeatures.t
#
# Test LJ::BetaFeatures
#
# This code was forked from the LiveJournal project owned and operated
# by Live Journal, Inc. The code has been modified and expanded by
# Dreamwidth Studios, LLC. These files were originally licensed under
# the terms of the license supplied by Live Journal, Inc, which can
# currently be found at:
#
# http://code.livejournal.org/trac/livejournal/browser/trunk/LICENSE-LiveJournal.txt
#
# In accordance with the original license, this code and all its
# modifications are provided under the GNU General Public License.
# A copy of that license can be found in the LICENSE file included as
# part of this distribution.

use strict;
use warnings;

use Test::More tests => 12;

BEGIN { $LJ::_T_CONFIG = 1; require "$ENV{LJHOME}/cgi-bin/ljlib.pl"; }
use LJ::Test qw(temp_user);
use LJ::BetaFeatures;

my $u = LJ::Test::temp_user();

{
    ok( ref LJ::BetaFeatures->get_handler('foo') eq 'LJ::BetaFeatures::default',
        "instantiated default handler" );
}

{
    ok( !$u->in_class('betafeatures'),          "cap not set" );
    ok( !defined $u->prop('betafeatures_list'), "prop not set" );

    LJ::BetaFeatures->add_to_beta( $u => 'foo' );
    ok( $u->in_class('betafeatures'),           "cap set after add" );
    ok( $u->prop('betafeatures_list') eq 'foo', 'prop set after add' );

    LJ::BetaFeatures->add_to_beta( $u => 'foo' );
    ok( $u->prop('betafeatures_list') eq 'foo', 'no dup' );

    ok( LJ::BetaFeatures->user_in_beta( $u => 'foo' ), "user_in_beta true" );

    $u->prop( 'betafeatures_list' => 'foo,foo,foo' );
    ok( LJ::BetaFeatures->user_in_beta( $u => 'foo' ), "user_in_beta true with dups" );

    ok( $u->prop('betafeatures_list') eq 'foo', "no more dups" );

    $LJ::BETA_FEATURES{foo}->{end_time} = 0;
    ok( !LJ::BetaFeatures->user_in_beta( $u => 'foo' ), "expired" );
    ok( !$u->in_class('betafeatures'),                  "cap unset" );
    ok( !defined $u->prop('betafeatures_list'),         "prop no longer defined" );

    # FIXME: more!
    # -- BetaFeatures::t_handler dies unless $LJ::T_FOO ?
}
