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

use lib qw(t/lib);
use ZapziTestDatabase;

use App::Zapzi;
use App::Zapzi::Folders qw(get_folder add_folder delete_folder folders_summary);

test_can();

my ($test_dir, $app) = ZapziTestDatabase::get_test_app();

test_get();
test_add();
test_delete();
test_summary();

done_testing();

sub test_can
{
    can_ok( 'App::Zapzi::Folders', qw(get_folder add_folder delete_folder) );
}

sub test_get
{
    my $inbox = get_folder("Inbox");
    ok( $inbox, 'Can read Inbox folder' );
    is( $inbox->id, 100, 'Inbox ID is 100' );

    my $false_folder = get_folder('This folder does not exist');
    ok( ! $false_folder, 'Can detect folders that do not exist' );
}

sub test_add
{
    add_folder("Foo");
    my $foo = get_folder("Foo");
    ok( $foo, 'Can add folders' );

    eval { add_folder('Foo') };
    like( $@, qr/Could not add/, 'Detect adding existing folder' );

    eval { add_folder() };
    like( $@, qr/not provided/, 'Detect adding empty folder' );
}

sub test_delete
{
    ok( delete_folder("Nonesuch"), 'Will ignore non-existing folders' );

    ok( delete_folder("Foo"), 'Can delete folder'  );
    my $foo = get_folder("Foo");
    ok( ! $foo, 'Deletion works' );
}

sub test_summary
{
    my $summary = folders_summary();
    ok( $summary, 'Can get folder summary' );
    is( $summary->{Inbox}, 1, 'Inbox contains one article' );
}