OSDN Git Service

t: done plugins/users.t
authorhylom <hylom@users.sourceforge.jp>
Wed, 28 Nov 2018 11:15:04 +0000 (20:15 +0900)
committerhylom <hylom@users.sourceforge.jp>
Wed, 28 Nov 2018 11:15:04 +0000 (20:15 +0900)
src/newslash_web/t/plugins/users.t

index a734608..6ee4d44 100644 (file)
@@ -22,7 +22,8 @@ if ($t->app->mode eq 'test') {
 }
 
 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;
     }
@@ -30,35 +31,35 @@ subtest 'change email related test' => sub {
     # 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},
@@ -67,7 +68,7 @@ subtest 'change email related test' => sub {
     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");
 
@@ -110,15 +111,15 @@ subtest 'change email related test' => sub {
     }
 
     # 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
@@ -135,23 +136,23 @@ subtest 'change email related test' => sub {
                           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
@@ -165,7 +166,8 @@ subtest 'change email related test' => sub {
 };
 
 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;
     }
@@ -173,19 +175,19 @@ subtest 'reset password related test' => sub {
     # 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},
@@ -195,7 +197,7 @@ subtest 'reset password related test' => sub {
 
     # 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");
 
@@ -236,12 +238,12 @@ subtest 'reset password related test' => sub {
     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});
@@ -249,17 +251,17 @@ subtest 'reset password related test' => sub {
     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});
@@ -271,5 +273,96 @@ subtest 'reset password related test' => sub {
 
 };
 
+
+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();