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 )