The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Carp;
use JSON       qw//;
use File::Temp qw/tempfile/;
use IO::Capture::Stderr;
use Reddit::Client;
use Encode;
use Test::More tests => 18;

my ($fh, $filename) = tempfile();
my $reddit = Reddit::Client->new(session_file => $filename);

## DEBUG
{
    local $Reddit::Client::DEBUG = 0;

    my $capture = IO::Capture::Stderr->new({ FORCE_CAPTURE_WARN => 1 });
    $capture->start;

    Reddit::Client::DEBUG('test');

    $capture->stop;
    ok(!$capture->read, 'DEBUG');
}

{
    local $Reddit::Client::DEBUG = 1;

    my $capture = IO::Capture::Stderr->new({ FORCE_CAPTURE_WARN => 1 });
    $capture->start();

    Reddit::Client::DEBUG('test 1');
    Reddit::Client::DEBUG("test 2\n");
    Reddit::Client::DEBUG("test %d", 3);

    $capture->stop;
    my @lines = map { decode("utf-8", $_) } $capture->read;

    ok(@lines == 3, 'DEBUG (1)');
    
    my $strftime = '\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d';
    like($lines[0], qr/\[$strftime\] \[ test 1 \]\n$/, 'DEBUG (2)');
    like($lines[1], qr/\[$strftime\] \[ test 2 \]\n$/, 'DEBUG (3)');
    like($lines[2], qr/\[$strftime\] \[ test 3 \]\n$/, 'DEBUG (4)');
}


## subreddit
ok(Reddit::Client::subreddit('/r/foo')  eq 'foo', 'subreddit');
ok(Reddit::Client::subreddit('/foo')    eq 'foo', 'subreddit');
ok(Reddit::Client::subreddit('/r/foo/') eq 'foo', 'subreddit');
ok(Reddit::Client::subreddit('/')       eq '',    'subreddit');
ok(!defined Reddit::Client::subreddit('foo/bar'), 'subreddit');


## require_login
eval{ $reddit->require_login };
ok($@, 'require_login');


## is_logged_in
ok(!$reddit->is_logged_in, 'is_logged_in');
$reddit->{modhash} = '.', $reddit->{cookie} = '.';
ok($reddit->is_logged_in, 'is_logged_in');


## save_session
ok($reddit->save_session, 'save_session');
my $session_data = do { local $/; <$fh> };
my $session = JSON::from_json($session_data);
ok($session->{modhash} eq '.', 'save_session');
ok($session->{cookie}  eq '.', 'save_session');


## load_session
$reddit->{modhash} = undef, $reddit->{cookie} = '';
$reddit->load_session;
ok($session->{modhash} eq '.', 'load_session');
ok($session->{cookie}  eq '.', 'load_session');

1;