use DateTime::Format::MySQL;
use Newslash::Util::TestMan;
+use Newslash::Eventd::Handlers;
+use Data::Dumper;
my $t = Test::Mojo->new('Newslash::Web');
my $test_man = Newslash::Util::TestMan->new($t);
my $params = $users->param->select(uid => $user->{uid});
is($params->{new_email}, $new_address, "insert new address to params table");
- # my $dt = eval { DateTime::Format::MySQL->parse_datetime($params->{new_email_ts}); };
- # my $e = $@;
- # ok(!$e, "check new_email_ts");
- # diag $e if !$e;
- # diag $params->{new_email_ts} if !$e;
-
- # if (!$e) {
- # my $now_dt = DateTime->now;
- # my $delta = $now_dt->epoch - $dt->epoch;
- # ok($delta < 3600, "new_email_ts is updated");
- # }
-
# check if event emited
my $events = $t->app->model('events');
my $ev = $events->select(event_type => "user",
event_subtype => "change_email",
- source_user_id => $user->{uid});
- ok($ev, "event emited");
+ source_user_id => $user->{uid},
+ active => 1,
+ );
+ ok($ev && @$ev > 0, "event emited");
+
+ # check if event processed correctly
+ my $handlers = Newslash::Eventd::Handlers->new($t->app, { test => 1 });
+ my $rs = $handlers->execute($ev->[0]);
+ ok($rs, "event processed correctly");
+
+ # check email que
+ my $user_handler = $handlers->{_handlers}->{user};
+ ok($user_handler, "retrieve user event handler");
+ my $que = $user_handler->{_test_mailque};
+
+ # check validate mail
+ my $validate_mail = pop @$que;
+ ok($validate_mail, "retrieve validate mail");
+ is($validate_mail->{to}, $new_address, "validate mail address is correct");
+ my $url_regex = qr|/my/change_email\?nickname=$user->{nickname}&token=(\S+)|;
+ ok($validate_mail->{body} =~ $url_regex, "validate mail has correct url");
+ my $token = $1;
+ ok($token, "extract token from mail");
+ diag Dumper $validate_mail if !$1;
+
+ # check notify mail
+ my $notify_mail = pop @$que;
+ ok($notify_mail, "retrieve notify mail");
+ is($notify_mail->{to}, $user->{realemail}, "notify mail address is correct");
+ my $notify_url = "/my/change_email?nickname=$user->{nickname}&cancel=1";
+ my $index = index($notify_mail->{body}, $notify_url);
+ ok($index != -1, "notify mail has correct url");
+ diag Dumper $notify_mail if $index == 1;
+
+ # check ts param set
+ $params = $users->param->select(uid => $user->{uid});
+ my $dt = eval { DateTime::Format::MySQL->parse_datetime($params->{new_email_token_ts}); };
+ my $e = $@;
+ ok(!$e, "check new_email_ts");
+ diag $e if $e;
+ diag Dumper $params if $e;
+
+ if (!$e) {
+ my $now_dt = DateTime->now;
+ my $delta = $now_dt->epoch - $dt->epoch;
+ ok($delta < 3600, "new_email_ts is updated");
+ }
# done
$test_man->logout;
my $events = $t->app->model('events');
my $ev = $events->select(event_type => "user",
event_subtype => "update_password",
- source_user_id => $user->{uid});
- ok($ev, "event emited");
+ source_user_id => $user->{uid},
+ active => 1);
+ ok($ev && @$ev > 0, "event emited");
+
+ # check if event processed correctly
+ my $handlers = Newslash::Eventd::Handlers->new($t->app, { test => 1 });
+ my $rs = $handlers->execute($ev->[0]);
+ ok($rs, "event processed correctly");
+
+ # check email que
+ my $user_handler = $handlers->{_handlers}->{user};
+ ok($user_handler, "retrieve user event handler");
+ my $que = $user_handler->{_test_mailque};
+
+ # check notify mail
+ my $notify_mail = pop @$que;
+ ok($notify_mail, "retrieve notify mail");
+ is($notify_mail->{to}, $user->{realemail}, "notify mail address is correct");
+ my $regex = qr|パスワード|;
+ $rs = $notify_mail->{title} =~ $regex;
+ ok($rs, "notify mail has correct title");
+ diag Dumper $notify_mail if !$rs;
#done
$test_man->logout;