BusyBird
view release on metacpan or search on metacpan
lib/BusyBird/Test/StatusStorage.pm view on Meta::CPAN
package BusyBird::Test::StatusStorage;
use v5.8.0;
use strict;
use warnings;
use Exporter 5.57 qw(import);
use DateTime;
use DateTime::Duration;
use Test::More;
use Test::Builder;
use Test::Fatal 0.006 qw(dies_ok);
use BusyBird::DateTime::Format;
use BusyBird::StatusStorage;
use BusyBird::Util ();
use Carp;
use utf8;
use Encode qw(encode_utf8);
our %EXPORT_TAGS = (
storage => [
qw(test_storage_common test_storage_ordered test_storage_truncation test_storage_missing_arguments),
qw(test_storage_requires_status_ids test_storage_undef_in_array),
],
status => [qw(test_status_id_set test_status_id_list)],
);
our @EXPORT_OK = ();
BusyBird::Util::export_ok_all_tags();
push @EXPORT_OK, qw(test_cases_for_ack);
my $datetime_formatter = 'BusyBird::DateTime::Format';
sub status {
my ($id, $level, $acked_at) = @_;
croak "you must specify id" if not defined $id;
my $status = {
id => $id,
created_at => $datetime_formatter->format_datetime(
DateTime->from_epoch(epoch => $id)
),
};
$status->{busybird}{level} = $level if defined $level;
$status->{busybird}{acked_at} = $acked_at if defined $acked_at;
return $status;
}
sub nowstring {
return $datetime_formatter->format_datetime(
DateTime->now(time_zone => 'UTC')
);
}
sub add_datetime_days {
my ($datetime_str, $days) = @_;
my $dtd = DateTime::Duration->new(days => ($days > 0 ? $days : -$days));
my $orig_dt = $datetime_formatter->parse_datetime($datetime_str);
return $datetime_formatter->format_datetime(
($days > 0) ? ($orig_dt + $dtd) : ($orig_dt - $dtd)
);
}
sub id_counts {
my @statuses_or_ids = @_;
my %id_counts = ();
foreach my $s_id (@statuses_or_ids) {
my $id = ref($s_id) ? $s_id->{id} : $s_id;
$id_counts{$id} += 1;
}
return %id_counts;
}
( run in 1.536 second using v1.01-cache-2.11-cpan-54e63673c56 )