#!/usr/bin/env perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use lib 'lib';
|
|
|
|
use Data::Dumper;
|
|
use Test::More tests => 34;
|
|
use App::WRT;
|
|
|
|
chdir 'example/blog';
|
|
|
|
my $es = App::WRT::EntryStore->new('archives');
|
|
|
|
# listing out of all source files:
|
|
|
|
my (@all_source_files) = $es->all();
|
|
note("got " . scalar @all_source_files . " source files.");
|
|
ok(
|
|
scalar @all_source_files > 0,
|
|
"got some nonzero set of source files from all()"
|
|
);
|
|
|
|
# checking an entry exists:
|
|
|
|
ok(
|
|
$es->is_extant('2014'),
|
|
'2014 exists'
|
|
);
|
|
|
|
# checking entries are renderable or not:
|
|
|
|
ok(
|
|
$es->is_renderable('2014'),
|
|
'2014 is renderable'
|
|
);
|
|
|
|
ok(
|
|
$es->is_renderable('i_do_not_exist'),
|
|
'a nonexistent entry path is theoretically renderable'
|
|
);
|
|
|
|
# listing entries like 2014/1/1 for an individual day:
|
|
|
|
my (@all_day_entries) = $es->all_days();
|
|
ok(
|
|
scalar @all_day_entries == 3,
|
|
'got 3 day entries from example archive, as expected'
|
|
);
|
|
|
|
# listing entries like 2014/1 for a month:
|
|
|
|
my (@all_month_entries) = $es->all_months();
|
|
ok(
|
|
scalar @all_month_entries == 4,
|
|
'got 4 month entries from example archive, as expected'
|
|
);
|
|
|
|
# listing entries like 2014 for a year:
|
|
|
|
my (@all_year_entries) = $es->all_years();
|
|
ok(
|
|
scalar @all_year_entries == 4,
|
|
'got 4 year entries from example archive, as expected'
|
|
);
|
|
|
|
# listing days contained by a month or year:
|
|
|
|
my (@days_for_jan) = $es->days_for('2014/1');
|
|
my @expected_days_for_jan = ('2014/1/1', '2014/1/2');
|
|
is_deeply(
|
|
\@days_for_jan,
|
|
\@expected_days_for_jan,
|
|
'got expected days for january 2014'
|
|
);
|
|
|
|
my (@days_for_1952) = $es->days_for('1952');
|
|
my @expected_days_for_1952 = ('1952/2/13');
|
|
is_deeply(
|
|
\@days_for_1952,
|
|
\@expected_days_for_1952,
|
|
'got expected days for 1952'
|
|
);
|
|
|
|
# listing months contained by a year:
|
|
|
|
my (@months_for_2013) = $es->months_for('2013');
|
|
my @expected_months_for_2013 = ('2013/1', '2013/2');
|
|
is_deeply(
|
|
\@months_for_2013,
|
|
\@expected_months_for_2013,
|
|
'got expected months for 2013'
|
|
);
|
|
|
|
# next / previous
|
|
|
|
ok(
|
|
$es->next('2014/1/1') eq '2014/1/2',
|
|
'got a next day for 2014/1/1'
|
|
);
|
|
|
|
ok(
|
|
$es->previous('2014/1/2') eq '2014/1/1',
|
|
'got a prev day for 2014/1/2'
|
|
);
|
|
|
|
# property finding by entry / entry finding by property
|
|
|
|
ok(
|
|
($es->by_prop('tag.something'))[0] eq '2014/1/2',
|
|
'found 2014/1/2 for tag.something.prop'
|
|
);
|
|
|
|
ok(
|
|
$es->has_prop('2014/1/2', 'tag.something'),
|
|
'2014/1/2 has tag.something.prop'
|
|
);
|
|
|
|
# diag(Dumper($es->by_prop('something')));
|
|
# diag(scalar($es->by_prop('something')));
|
|
ok(
|
|
scalar($es->by_prop('something')) == 0,
|
|
'did not find any entries for something.prop'
|
|
);
|
|
|
|
ok(
|
|
'tag.something' eq ($es->props_for('2014/1/2'))[0],
|
|
'found tag.something for 2014/1/2'
|
|
);
|
|
|
|
my @all_props = $es->all_props();
|
|
ok(
|
|
scalar(@all_props) == 6,
|
|
'found 6 properties for example repo'
|
|
) or diag(join ', ', @all_props);
|
|
|
|
# property values:
|
|
|
|
my $foo_prop = $es->prop_value('prop_value_test', 'foo');
|
|
chomp($foo_prop);
|
|
note('Property: ' . $foo_prop);
|
|
is(
|
|
'bar',
|
|
$foo_prop,
|
|
'got expected property value for prop_value_test'
|
|
);
|
|
|
|
ok(
|
|
! defined $es->prop_value('title_test', 'no-such-prop'),
|
|
'nonexistent property is undefined'
|
|
);
|
|
|
|
# finding parents of entries:
|
|
|
|
my $date_parent = $es->parent('2014/1/2');
|
|
ok(
|
|
$date_parent eq '2014/1',
|
|
'found correct parent for 2014/1/2'
|
|
) or diag($date_parent);
|
|
|
|
my $icon_parent = $es->parent('icon_test');
|
|
ok(
|
|
! defined $icon_parent,
|
|
'found no parent for icon_test'
|
|
) or diag($icon_parent);
|
|
|
|
eval {
|
|
$es->parent('i_do_not_exist');
|
|
};
|
|
ok(
|
|
$@,
|
|
"croaked on trying to find parent of a nonexistent entry"
|
|
);
|
|
|
|
# finding children of entries, sub-entries
|
|
|
|
my @children = $es->children('2013');
|
|
ok(
|
|
@children == 4,
|
|
"got 4 children for 2013"
|
|
) or diag(join ', ', @children);
|
|
|
|
my @children_2012 = $es->children('2012');
|
|
ok(
|
|
@children_2012 == 0,
|
|
"got no children for 2012"
|
|
) or diag(join ', ', @children_2012);
|
|
|
|
my @children_basenames = $es->children_basenames('2013');
|
|
ok(
|
|
(! grep { m/\// } @children_basenames),
|
|
"children_basenames() output doesn't include slashes"
|
|
) or diag(join ', ', @children_basenames);
|
|
|
|
my (@sub_entries) = $es->get_sub_entries('icon_test');
|
|
my (@expected_sub_entries) = ('dir', 'textfile');
|
|
is_deeply(
|
|
\@sub_entries,
|
|
\@expected_sub_entries,
|
|
'expected 2 alphabetically sorted sub-entries for icon_test'
|
|
) or diag(join ', ', @sub_entries);
|
|
|
|
# checking whether entries are directories, flatfiles, etc.
|
|
|
|
ok(
|
|
$es->is_dir('2014'),
|
|
'2014 is a directory, as expected'
|
|
);
|
|
|
|
ok(
|
|
! $es->is_dir('2014/1/1/test_entry'),
|
|
'2014/1/1/test_entry is not a directory, as expected'
|
|
);
|
|
|
|
ok(
|
|
$es->is_file('2014/1/1/test_entry'),
|
|
'2014/1/1/test_entry is a flatfile, as expected'
|
|
);
|
|
|
|
# checking whether an entry is a directory with an index:
|
|
|
|
ok(
|
|
$es->has_index('2014/1/1'),
|
|
'2014/1/1 has an index file'
|
|
);
|
|
|
|
ok(
|
|
! $es->has_index('icon_test/textfile'),
|
|
'icon_test/textfile does not have an index'
|
|
);
|
|
|
|
# basename of an entry:
|
|
|
|
ok(
|
|
$es->basename('1969/2/1') eq '1',
|
|
'got an expected basename for a day'
|
|
);
|
|
|
|
ok(
|
|
$es->basename('1969/2') eq '2',
|
|
'got an expected basename for a month'
|
|
);
|
|
|
|
ok(
|
|
$es->basename('1969') eq '1969',
|
|
'got an expected basename for a year'
|
|
);
|
|
|
|
# diag(Dumper($es->{entry_properties}));
|
|
# diag(Dumper($es->{property_entries}));
|