/** * @test */ public function registerSuccess() { $email = "*****@*****.**"; $username = "******"; $password = "******"; $encodedPassword = "******"; $user = new User(); $user->setEmail($email)->setUsername($username)->setPassword($password); $repoMock = $this->getMock("RepositoryMock", array("add")); $repoMock->expects($this->once())->method("add")->with($this->equalTo($user)); $emMock = $this->getEntityManagerMock(array("getRepository", "flush")); $emMock->expects($this->once())->method("getRepository")->with($this->equalTo(EntityConstant::USER))->will($this->returnValue($repoMock)); $emMock->expects($this->once())->method("flush"); $passwordEncoderMock = $this->getPasswordEncoderMock(array("encode")); $passwordEncoderMock->expects($this->once())->method("encode")->with($this->equalTo($password))->will($this->returnValue($encodedPassword)); /** @var \Doctrine\ORM\EntityManager $emMock */ /** @var \Kumatch\BBSAPI\Utility\PasswordEncoder $passwordEncoderMock */ $useCase = new UserRegistration($emMock, $passwordEncoderMock); $user = $useCase->invoke($user); $this->assertInstanceOf('Kumatch\\BBSAPI\\Entity\\User', $user); $this->assertEquals($email, $user->getEmail()); $this->assertEquals($username, $user->getUsername()); $this->assertEquals($encodedPassword, $user->getEncodedPassword()); $this->assertNull($user->getPassword()); }
public function register(Application $app) { $app["bbsapi.user.registration"] = function (Application $app) { return new UserRegistration($app["entity_manager"], $app["bbsapi.utility.password_encoder"]); }; $app["bbsapi.user.authentication"] = function (Application $app) { return new UserAuthentication($app["entity_manager"], $app["bbsapi.utility.password_encoder"], $app["bbsapi.utility.token_generator"]); }; $app["bbsapi.user.token_authorization"] = function (Application $app) { return new UserTokenAuthorization($app["entity_manager"]); }; $app["bbsapi.spec.user_spec"] = function () { return new UserSpec(); }; $app->before(function (Request $req) use($app) { $userId = $req->headers->get(self::HEADER_AUTHORIZATION_USER_ID); $tokenString = $req->headers->get(self::HEADER_AUTHORIZATION_TOKEN); if (!$userId || !$tokenString) { return; } /** @var UserTokenAuthorization $service */ $service = $app["bbsapi.user.token_authorization"]; $user = $service->invoke($userId, $tokenString); if (!$user) { return; } $req->setUser($user); }); $app->post("/user/register", function (Application $app, Request $req) { /** @var UserSpec $spec */ $spec = $app["bbsapi.spec.user_spec"]; /** @var UserRegistration $service */ $service = $app["bbsapi.user.registration"]; $email = $req->request->get("email"); $username = $req->request->get("username"); $password = $req->request->get("password"); $user = new User(); $user->setEmail($email)->setUsername($username)->setPassword($password); $result = $spec->validate($user); if (!$result->isValid()) { return $app->json(["errors" => $result->getErrors()], 400); } $alreadyExistsErrors = ["user" => [sprintf("A username [%s] is already exists.", $user->getUsername())]]; if ($service->findByUsername($user->getUsername())) { return $app->json(["errors" => $alreadyExistsErrors], 400); } try { $user = $service->invoke($user); } catch (UniqueConstraintViolationException $e) { return $app->json(["errors" => $alreadyExistsErrors], 400); } return $app->json($spec->format($user), 201); }); $app->post("/user/authorize", function (Application $app, Request $req) { /** @var UserAuthentication $service */ $service = $app["bbsapi.user.authentication"]; $username = $req->request->get("username"); $password = $req->request->get("password"); $accessToken = $service->invoke($username, $password); if (!$accessToken) { return $app->json(null, 401); } return $app->json(["id" => $accessToken->getUser()->getId(), "token" => $accessToken->getToken(), "period" => $accessToken->getPeriod()]); }); $app->get("/users/{username}", function (Application $app, $username) { /** @var UserSpec $spec */ $spec = $app["bbsapi.spec.user_spec"]; /** @var UserRegistration $service */ $service = $app["bbsapi.user.registration"]; $user = $service->findByUsername($username); if (!$user) { return $app->json(null, 404); } return $app->json($spec->format($user)); })->assert('username', '^\\w+$'); }
/** * @test * @dataProvider provideInvalidPassword * @param string $password * @param int $errorSize */ public function invalidPassword($password, $errorSize = 1) { $user = new User(); $user->setEmail("*****@*****.**")->setUsername("foo_user")->setPassword($password); $result = $this->spec->validate($user); $errors = $result->getErrors(); $this->assertFalse($result->isValid()); $this->assertCount(1, $errors); $this->assertCount($errorSize, $errors["password"]); }