}
subtest 'change email related test' => sub {
- if ($t->app->mode ne 'test') {
+ my $app = $t->app;
+ if ($app->mode ne 'test') {
fail("mode is not 'test'");
return;
}
# parameter check
my $bad_address = "foobar";
my $new_address = 'foobarhogehoge@example.com';
- my $users = $t->app->model('users');
+ my $users = $app->model('users');
- ok(!$t->app->users->request_change_email($user, $bad_address),
+ ok(!$app->users->request_change_email($user, $bad_address),
"request_change_email() with bad address");
- is($t->app->users->last_error, "INVALID_ADDRESS");
+ is($app->users->last_error, "INVALID_ADDRESS");
- ok(!$t->app->users->request_change_email(0, $new_address),
+ ok(!$app->users->request_change_email(0, $new_address),
"request_change_email() with bad user");
- is($t->app->users->last_error, "INVALID_USER");
+ is($app->users->last_error, "INVALID_USER");
my $anonymous = $users->anonymous_user;
- ok(!$t->app->users->request_change_email($anonymous, $new_address),
+ ok(!$app->users->request_change_email($anonymous, $new_address),
"request_change_email() with anonymous user");
- is($t->app->users->last_error, "INVALID_USER");
+ is($app->users->last_error, "INVALID_USER");
- ok(!$t->app->users->request_change_email($user, $user->{realemail}),
+ ok(!$app->users->request_change_email($user, $user->{realemail}),
"request_change_email() with current address");
- is($t->app->users->last_error, "ADDRESS_EXISTS");
+ is($app->users->last_error, "ADDRESS_EXISTS");
# call function
- ok($t->app->users->request_change_email($user, $new_address),
- "execute request_change_email()");
+ ok($app->users->request_change_email($user, $new_address),
+ "execute request_change_email()") or diag $app->users->last_error;
# check if database updated
my $params = $users->param->select(uid => $user->{uid});
is($params->{new_email}, $new_address, "insert new address to params table");
# check if event emited
- my $events = $t->app->model('events');
+ my $events = $app->model('events');
my $ev = $events->select(event_type => "user",
event_subtype => "change_email",
source_user_id => $user->{uid},
ok($ev && @$ev > 0, "event emited");
# check if event processed correctly
- my $handlers = Newslash::Eventd::Handlers->new($t->app, { test => 1 });
+ my $handlers = Newslash::Eventd::Handlers->new($app, { test => 1 });
my $rs = $handlers->execute($ev->[0]);
ok($rs, "event processed correctly");
}
# cancel request
- ok(!$t->app->users->cancel_change_email_request(0),
+ ok(!$app->users->cancel_change_email_request(0),
"cancel_change_email_request() with invalid uid");
- is($t->app->users->last_error, "INVALID_UID");
+ is($app->users->last_error, "INVALID_UID");
- ok(!$t->app->users->cancel_change_email_request($anonymous->{uid}),
+ ok(!$app->users->cancel_change_email_request($anonymous->{uid}),
"cancel_change_email_request() with anonymous uid");
- is($t->app->users->last_error, "NO_ADDRESS");
+ is($app->users->last_error, "NO_ADDRESS");
- ok($t->app->users->cancel_change_email_request($user->{uid}),
+ ok($app->users->cancel_change_email_request($user->{uid}),
"cancel_change_email_request()");
# check if update done correctly
name => "new_email",
value => $new_address),
"set new_email parameter");
- $token = $t->app->users->generate_email_change_token($user->{uid});
+ $token = $app->users->generate_email_change_token($user->{uid});
ok($token, "generate_email_change_token()");
# change email
# parameter check
- ok(!$t->app->users->verify_and_change_email(0, $token),
+ ok(!$app->users->verify_and_change_email(0, $token),
"verify_and_change_email() with invalid user");
- is($t->app->users->last_error, "INVALID_TOKEN");
+ is($app->users->last_error, "INVALID_TOKEN");
- ok(!$t->app->users->verify_and_change_email($user->{uid}, "hogehoge"),
+ ok(!$app->users->verify_and_change_email($user->{uid}, "hogehoge"),
"verify_and_change_email() with invalid token");
- is($t->app->users->last_error, "INVALID_TOKEN");
+ is($app->users->last_error, "INVALID_TOKEN");
# TODO: check if token is expired
# execute with correct arguments
- ok($t->app->users->verify_and_change_email($user->{uid}, $token),
+ ok($app->users->verify_and_change_email($user->{uid}, $token),
"verify_and_change_email()");
# check if update done correctly
};
subtest 'reset password related test' => sub {
- if ($t->app->mode ne 'test') {
+ my $app = $t->app;
+ if ($app->mode ne 'test') {
fail("mode is not 'test'");
return;
}
# parameter check
my $bad_address = "foobar";
my $new_address = 'foobarhogehoge@example.com';
- my $users = $t->app->model('users');
+ my $users = $app->model('users');
my $anonymous = $users->anonymous_user;
- ok(!$t->app->users->reset_password($anonymous),
+ ok(!$app->users->reset_password($anonymous),
"reset_password() with invalid user");
- is($t->app->users->last_error, "INVALID_USER");
+ is($app->users->last_error, "INVALID_USER");
# execute with correct arguments
- ok($t->app->users->reset_password($user),
- "reset_password()") or diag $t->app->users->last_error;
+ ok($app->users->reset_password($user),
+ "reset_password()") or diag $app->users->last_error;
# check if event emited
- my $events = $t->app->model('events');
+ my $events = $app->model('events');
my $ev = $events->select(event_type => "user",
event_subtype => "reset_password",
source_user_id => $user->{uid},
# check if event processed correctly
## generate_password_reset_token() called.
- my $handlers = Newslash::Eventd::Handlers->new($t->app, { test => 1 });
+ my $handlers = Newslash::Eventd::Handlers->new($app, { test => 1 });
my $rs = $handlers->execute($ev->[0]);
ok($rs, "event processed correctly");
diag Dumper $validate_mail if !$1;
# cancel request
- ok(!$t->app->users->cancel_activation(0),
+ ok(!$app->users->cancel_activation(0),
"cancel_activation() with invalid uid");
- is($t->app->users->last_error, "INVALID_USER");
+ is($app->users->last_error, "INVALID_USER");
- ok($t->app->users->cancel_activation($user),
- "cancel_activation()") or diag $t->app->users->last_error;
+ ok($app->users->cancel_activation($user),
+ "cancel_activation()") or diag $app->users->last_error;
# check if update done correctly
$u = $users->select(uid => $user->{uid});
ok(!$u->{newpassswd_ts}, "newpassword_ts updated correctly");
# re-request function
- $token = $t->app->users->generate_password_reset_token($user->{uid});
+ $token = $app->users->generate_password_reset_token($user->{uid});
ok($token, "generate_password_reset_token()");
# update password
my $new_password = "foobarhogehoge";
- ok(!$t->app->users->update_password_by_token($u->{nickname}, "hogehoge", $new_password),
+ ok(!$app->users->update_password_by_token($u->{nickname}, "hogehoge", $new_password),
"update_password_by_token() with invalid token");
- is($t->app->users->last_error, "INVALID_TOKEN");
+ is($app->users->last_error, "INVALID_TOKEN");
# TODO: check expired case
- ok($t->app->users->update_password_by_token($u->{nickname}, $token, $new_password),
+ ok($app->users->update_password_by_token($u->{nickname}, $token, $new_password),
"update_password_by_token()");
$u = $users->select(uid => $user->{uid});
};
+
+subtest 'create new user related test' => sub {
+ my $app = $t->app;
+ if ($app->mode ne 'test') {
+ fail("mode is not 'test'");
+ return;
+ }
+
+ my $new_address = 'hjkhkjadsf@example.com';
+ my $new_nickname = 'newusertest00';
+ my $users = $app->model('users');
+ my $u = $users->select(nickname => $user->{nickname});
+ ok($u, "retrieve registered user");
+
+ # validate new user information - nickname
+ ok(!$app->users->validate_nickname($u->{nickname}),
+ "validate_nickname() with exists nickname");
+ is($app->users->last_error, "ID_EXISTS");
+
+ ok(!$app->users->validate_nickname(""),
+ "validate_nickname() with blank nickname");
+ is($app->users->last_error, "BLANK_ID");
+
+ ok(!$app->users->validate_nickname("[][]"),
+ "validate_nickname() with invalid nickname");
+ is($app->users->last_error, "INVALID_ID");
+
+ # validate new user information - email
+ ok(!$app->users->validate_email($u->{realemail}),
+ "validate_email() with invalid email");
+ is($app->users->last_error, "ADDRESS_EXISTS");
+
+ ok(!$app->users->validate_email(""),
+ "validate_email() with blank email");
+ is($app->users->last_error, "BLANK_ADDRESS");
+
+ ok(!$app->users->validate_email("foobar"),
+ "validate_email() with invalid email");
+ is($app->users->last_error, "INVALID_ADDRESS");
+
+ # create new user
+ my $uid = $app->users->create_new_user($new_nickname, $new_address);
+ ok($uid, "create_new_user") or diag explain $app->users->last_error;
+
+ # check if database updated
+ $u = $users->select(uid => $uid);
+ ok($u, "uid exists") or diag $users->last_error;
+ is($u->{nickname}, $new_nickname, "correct nickname");
+ is($u->{realemail}, $new_address, "correct email");
+
+ # check if event emited
+ ok($test_man->process_event(event_type => "user",
+ event_subtype => "create",
+ source_user_id => $u->{uid}),
+ "process event");
+
+ # check validate mail
+ my $mail = $test_man->pop_mailque()
+ ->to_is($new_address)
+ ->body_matches(qr|/my/activation\?nickname=(?<nickname>[^&]+)&token=(?<token>\S+)|);
+ my $nickname = $mail->last_match->{nickname};
+ my $token = $mail->last_match->{token};
+ is($nickname, $new_nickname) or diag $mail->body;
+ ok($token, "extract token from mail") or diag $mail->body;
+
+ # activate
+ ok(!$app->users->activation("1234", $token),
+ "activation() with invalid nickname");
+ is($app->users->last_error, "INVALID_TOKEN");
+
+ ok(!$app->users->activation($nickname, "hogehoge"),
+ "activation() with invalid tomen");
+ is($app->users->last_error, "INVALID_TOKEN");
+
+ ok($app->users->activation($nickname, $token),
+ "activation()") or diag $app->users->last_error;
+
+ my $new_password = "ThisIsNewPassword";
+ ok($app->users->update_password_by_token($nickname, $token, $new_password),
+ "update_password_by_token()") or diag $app->users->last_error;
+
+ # verify password
+ ok($users->passwords->verify_password(uid => $u->{uid},
+ password => $new_password),
+ "verify password") or diag $users->passwords->last_error;
+
+ # done, delete created user
+ ok($test_man->delete_user($u), "delete test user");
+
+};
+
$test_man->cleanup;
done_testing();