Fixed entity retrievers
This commit is contained in:
parent
3596a8cdc7
commit
96ebd2c89f
14 changed files with 435 additions and 15 deletions
|
@ -8,6 +8,11 @@ class CommentRetriever implements IEntityRetriever
|
||||||
$this->job = $job;
|
$this->job = $job;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getJob()
|
||||||
|
{
|
||||||
|
return $this->job;
|
||||||
|
}
|
||||||
|
|
||||||
public function tryRetrieve()
|
public function tryRetrieve()
|
||||||
{
|
{
|
||||||
if ($this->job->hasArgument(JobArgs::ARG_COMMENT_ENTITY))
|
if ($this->job->hasArgument(JobArgs::ARG_COMMENT_ENTITY))
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
interface IEntityRetriever
|
interface IEntityRetriever
|
||||||
{
|
{
|
||||||
public function __construct(IJob $job);
|
public function __construct(IJob $job);
|
||||||
|
public function getJob();
|
||||||
public function tryRetrieve();
|
public function tryRetrieve();
|
||||||
public function retrieve();
|
public function retrieve();
|
||||||
public function getRequiredArguments();
|
public function getRequiredArguments();
|
||||||
|
|
|
@ -8,6 +8,11 @@ class PostRetriever implements IEntityRetriever
|
||||||
$this->job = $job;
|
$this->job = $job;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getJob()
|
||||||
|
{
|
||||||
|
return $this->job;
|
||||||
|
}
|
||||||
|
|
||||||
public function tryRetrieve()
|
public function tryRetrieve()
|
||||||
{
|
{
|
||||||
if ($this->job->hasArgument(JobArgs::ARG_POST_ENTITY))
|
if ($this->job->hasArgument(JobArgs::ARG_POST_ENTITY))
|
||||||
|
@ -17,7 +22,7 @@ class PostRetriever implements IEntityRetriever
|
||||||
return PostModel::getById($this->job->getArgument(JobArgs::ARG_POST_ID));
|
return PostModel::getById($this->job->getArgument(JobArgs::ARG_POST_ID));
|
||||||
|
|
||||||
if ($this->job->hasArgument(JobArgs::ARG_POST_NAME))
|
if ($this->job->hasArgument(JobArgs::ARG_POST_NAME))
|
||||||
return PostModel::getByName($job->getArgument(JobArgs::ARG_POST_NAME));
|
return PostModel::getByName($this->job->getArgument(JobArgs::ARG_POST_NAME));
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,11 @@ class SafePostRetriever implements IEntityRetriever
|
||||||
$this->job = $job;
|
$this->job = $job;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getJob()
|
||||||
|
{
|
||||||
|
return $this->job;
|
||||||
|
}
|
||||||
|
|
||||||
public function tryRetrieve()
|
public function tryRetrieve()
|
||||||
{
|
{
|
||||||
if ($this->job->hasArgument(JobArgs::ARG_POST_ENTITY))
|
if ($this->job->hasArgument(JobArgs::ARG_POST_ENTITY))
|
||||||
|
|
|
@ -8,13 +8,21 @@ class UserRetriever implements IEntityRetriever
|
||||||
$this->job = $job;
|
$this->job = $job;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getJob()
|
||||||
|
{
|
||||||
|
return $this->job;
|
||||||
|
}
|
||||||
|
|
||||||
public function tryRetrieve()
|
public function tryRetrieve()
|
||||||
{
|
{
|
||||||
if ($this->job->hasArgument(JobArgs::ARG_USER_ENTITY))
|
if ($this->job->hasArgument(JobArgs::ARG_USER_ENTITY))
|
||||||
return $this->job->getArgument(JobArgs::ARG_USER_ENTITY);
|
return $this->job->getArgument(JobArgs::ARG_USER_ENTITY);
|
||||||
|
|
||||||
|
if ($this->job->hasArgument(JobArgs::ARG_USER_EMAIL))
|
||||||
|
return UserModel::getByEmail($this->job->getArgument(JobArgs::ARG_USER_EMAIL));
|
||||||
|
|
||||||
if ($this->job->hasArgument(JobArgs::ARG_USER_NAME))
|
if ($this->job->hasArgument(JobArgs::ARG_USER_NAME))
|
||||||
return UserModel::getByNameOrEmail($this->job->getArgument(JobArgs::ARG_USER_NAME));
|
return UserModel::getByName($this->job->getArgument(JobArgs::ARG_USER_NAME));
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,9 +13,9 @@ class Auth
|
||||||
$config = getConfig();
|
$config = getConfig();
|
||||||
$context = getContext();
|
$context = getContext();
|
||||||
|
|
||||||
$user = UserModel::tryGetByNameOrEmail($name);
|
$user = UserModel::tryGetByEmail($name);
|
||||||
if ($user === null)
|
if ($user === null)
|
||||||
throw new SimpleException('Invalid username');
|
$user = UserModel::getByName($name);
|
||||||
|
|
||||||
$passwordHash = UserModel::hashPassword($password, $user->getPasswordSalt());
|
$passwordHash = UserModel::hashPassword($password, $user->getPasswordSalt());
|
||||||
if ($passwordHash != $user->getPasswordHash())
|
if ($passwordHash != $user->getPasswordHash())
|
||||||
|
|
|
@ -13,7 +13,7 @@ class StaticPagesController
|
||||||
{
|
{
|
||||||
$context->featuredPost = $featuredPost;
|
$context->featuredPost = $featuredPost;
|
||||||
$context->featuredPostUnixTime = PropertyModel::get(PropertyModel::FeaturedPostUnixTime);
|
$context->featuredPostUnixTime = PropertyModel::get(PropertyModel::FeaturedPostUnixTime);
|
||||||
$context->featuredPostUser = UserModel::tryGetByNameOrEmail(
|
$context->featuredPostUser = UserModel::tryGetByName(
|
||||||
PropertyModel::get(PropertyModel::FeaturedPostUserName));
|
PropertyModel::get(PropertyModel::FeaturedPostUserName));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@ class PostSearchParser extends AbstractSearchParser
|
||||||
|
|
||||||
elseif (in_array($key, ['fav', 'favs', 'favd']))
|
elseif (in_array($key, ['fav', 'favs', 'favd']))
|
||||||
{
|
{
|
||||||
$user = UserModel::getByNameOrEmail($value);
|
$user = UserModel::getByName($value);
|
||||||
$innerStmt = (new Sql\SelectStatement)
|
$innerStmt = (new Sql\SelectStatement)
|
||||||
->setTable('favoritee')
|
->setTable('favoritee')
|
||||||
->setCriterion((new Sql\ConjunctionFunctor)
|
->setCriterion((new Sql\ConjunctionFunctor)
|
||||||
|
@ -84,7 +84,7 @@ class PostSearchParser extends AbstractSearchParser
|
||||||
|
|
||||||
elseif (in_array($key, ['comment', 'comments', 'commenter', 'commented']))
|
elseif (in_array($key, ['comment', 'comments', 'commenter', 'commented']))
|
||||||
{
|
{
|
||||||
$user = UserModel::getByNameOrEmail($value);
|
$user = UserModel::getByName($value);
|
||||||
$innerStmt = (new Sql\SelectStatement)
|
$innerStmt = (new Sql\SelectStatement)
|
||||||
->setTable('comment')
|
->setTable('comment')
|
||||||
->setCriterion((new Sql\ConjunctionFunctor)
|
->setCriterion((new Sql\ConjunctionFunctor)
|
||||||
|
@ -95,7 +95,7 @@ class PostSearchParser extends AbstractSearchParser
|
||||||
|
|
||||||
elseif (in_array($key, ['submit', 'upload', 'uploads', 'uploader', 'uploaded']))
|
elseif (in_array($key, ['submit', 'upload', 'uploads', 'uploader', 'uploaded']))
|
||||||
{
|
{
|
||||||
$user = UserModel::getByNameOrEmail($value);
|
$user = UserModel::getByName($value);
|
||||||
return new Sql\EqualsFunctor('post.uploader_id', new Sql\Binding($user->getId()));
|
return new Sql\EqualsFunctor('post.uploader_id', new Sql\Binding($user->getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -104,15 +104,15 @@ final class UserModel extends AbstractCrudModel
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getByNameOrEmail($key)
|
public static function getByEmail($key)
|
||||||
{
|
{
|
||||||
$ret = self::tryGetByNameOrEmail($key);
|
$ret = self::tryGetByEmail($key);
|
||||||
if (!$ret)
|
if (!$ret)
|
||||||
throw new SimpleNotFoundException('Invalid user name "%s"', $key);
|
throw new SimpleNotFoundException('Invalid user e-mail "%s"', $key);
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function tryGetByNameOrEmail($key)
|
public static function tryGetByEmail($key)
|
||||||
{
|
{
|
||||||
$key = trim($key);
|
$key = trim($key);
|
||||||
|
|
||||||
|
@ -120,7 +120,6 @@ final class UserModel extends AbstractCrudModel
|
||||||
$stmt->setColumn('*');
|
$stmt->setColumn('*');
|
||||||
$stmt->setTable('user');
|
$stmt->setTable('user');
|
||||||
$stmt->setCriterion((new Sql\DisjunctionFunctor)
|
$stmt->setCriterion((new Sql\DisjunctionFunctor)
|
||||||
->add(new Sql\NoCaseFunctor(new Sql\EqualsFunctor('name', new Sql\Binding($key))))
|
|
||||||
->add(new Sql\NoCaseFunctor(new Sql\EqualsFunctor('email_unconfirmed', new Sql\Binding($key))))
|
->add(new Sql\NoCaseFunctor(new Sql\EqualsFunctor('email_unconfirmed', new Sql\Binding($key))))
|
||||||
->add(new Sql\NoCaseFunctor(new Sql\EqualsFunctor('email_confirmed', new Sql\Binding($key)))));
|
->add(new Sql\NoCaseFunctor(new Sql\EqualsFunctor('email_confirmed', new Sql\Binding($key)))));
|
||||||
|
|
||||||
|
|
87
tests/Api/Common/CommentRetrieverTest.php
Normal file
87
tests/Api/Common/CommentRetrieverTest.php
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
<?php
|
||||||
|
class CommentRetrieverTest extends AbstractTest
|
||||||
|
{
|
||||||
|
public function testRetrievingById()
|
||||||
|
{
|
||||||
|
$comment = $this->prepareComment();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_COMMENT_ID, $comment->getId());
|
||||||
|
$this->assertCorrectRetrieval($retriever, $comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByEntity()
|
||||||
|
{
|
||||||
|
$comment = $this->prepareComment();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_COMMENT_ENTITY, $comment);
|
||||||
|
$this->assertCorrectRetrieval($retriever, $comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByNonExistingId()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_COMMENT_ID, 100);
|
||||||
|
$this->assert->throws(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
}, 'Invalid comment id');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingNoArguments()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$this->assertIncorrectRetrieval($retriever);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testArgumentRequirements()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$this->assert->areEquivalent(
|
||||||
|
JobArgs::Alternative(
|
||||||
|
JobArgs::ARG_COMMENT_ID,
|
||||||
|
JobArgs::ARG_COMMENT_ENTITY),
|
||||||
|
$retriever->getRequiredArguments());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function assertIncorrectRetrieval($retriever)
|
||||||
|
{
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
});
|
||||||
|
$this->assert->isNull($retriever->tryRetrieve());
|
||||||
|
|
||||||
|
$this->assert->throws(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->retrieve();
|
||||||
|
}, 'unsatisfied');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function assertCorrectRetrieval($retriever, $comment)
|
||||||
|
{
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
});
|
||||||
|
$this->assert->isNotNull($retriever->tryRetrieve());
|
||||||
|
$this->assert->areEqual($comment->getId(), $retriever->tryRetrieve()->getId());
|
||||||
|
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->retrieve();
|
||||||
|
});
|
||||||
|
$this->assert->areEqual($comment->getId(), $retriever->retrieve()->getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function prepareComment()
|
||||||
|
{
|
||||||
|
return $this->mockComment($this->mockUser());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function prepareRetriever()
|
||||||
|
{
|
||||||
|
$job = new EditCommentJob();
|
||||||
|
$commentRetriever = new CommentRetriever($job);
|
||||||
|
return $commentRetriever;
|
||||||
|
}
|
||||||
|
}
|
96
tests/Api/Common/PostRetrieverTest.php
Normal file
96
tests/Api/Common/PostRetrieverTest.php
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
<?php
|
||||||
|
class PostRetrieverTest extends AbstractTest
|
||||||
|
{
|
||||||
|
public function testRetrievingById()
|
||||||
|
{
|
||||||
|
$post = $this->preparePost();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_POST_ID, $post->getId());
|
||||||
|
$this->assertCorrectRetrieval($retriever, $post);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByName()
|
||||||
|
{
|
||||||
|
$post = $this->preparePost();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_POST_NAME, $post->getName());
|
||||||
|
$this->assertCorrectRetrieval($retriever, $post);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByEntity()
|
||||||
|
{
|
||||||
|
$post = $this->preparePost();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_POST_ENTITY, $post);
|
||||||
|
$this->assertCorrectRetrieval($retriever, $post);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByNonExistingId()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_POST_ID, 100);
|
||||||
|
$this->assert->throws(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
}, 'Invalid post ID');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingNoArguments()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$this->assertIncorrectRetrieval($retriever);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function assertIncorrectRetrieval($retriever)
|
||||||
|
{
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
});
|
||||||
|
$this->assert->isNull($retriever->tryRetrieve());
|
||||||
|
|
||||||
|
$this->assert->throws(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->retrieve();
|
||||||
|
}, 'unsatisfied');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testArgumentRequirements()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$this->assert->areEquivalent(
|
||||||
|
JobArgs::Alternative(
|
||||||
|
JobArgs::ARG_POST_NAME,
|
||||||
|
JobArgs::ARG_POST_ID,
|
||||||
|
JobArgs::ARG_POST_ENTITY),
|
||||||
|
$retriever->getRequiredArguments());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function assertCorrectRetrieval($retriever, $post)
|
||||||
|
{
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
});
|
||||||
|
$this->assert->isNotNull($retriever->tryRetrieve());
|
||||||
|
$this->assert->areEqual($post->getId(), $retriever->tryRetrieve()->getId());
|
||||||
|
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->retrieve();
|
||||||
|
});
|
||||||
|
$this->assert->areEqual($post->getId(), $retriever->retrieve()->getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function preparePost()
|
||||||
|
{
|
||||||
|
return $this->mockPost($this->mockUser());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function prepareRetriever()
|
||||||
|
{
|
||||||
|
$job = new EditPostJob();
|
||||||
|
$postRetriever = new PostRetriever($job);
|
||||||
|
return $postRetriever;
|
||||||
|
}
|
||||||
|
}
|
95
tests/Api/Common/SafePostRetrieverTest.php
Normal file
95
tests/Api/Common/SafePostRetrieverTest.php
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
<?php
|
||||||
|
class SafePostRetrieverTest extends AbstractTest
|
||||||
|
{
|
||||||
|
public function testRetrievingById()
|
||||||
|
{
|
||||||
|
$post = $this->preparePost();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_POST_ID, $post->getId());
|
||||||
|
$this->assertIncorrectRetrieval($retriever);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByName()
|
||||||
|
{
|
||||||
|
$post = $this->preparePost();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_POST_NAME, $post->getName());
|
||||||
|
$this->assertCorrectRetrieval($retriever, $post);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByEntity()
|
||||||
|
{
|
||||||
|
$post = $this->preparePost();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_POST_ENTITY, $post);
|
||||||
|
$this->assertCorrectRetrieval($retriever, $post);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByNonExistingName()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_POST_NAME, 'nonsense');
|
||||||
|
$this->assert->throws(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
}, 'Invalid post name');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingNoArguments()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$this->assertIncorrectRetrieval($retriever);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testArgumentRequirements()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$this->assert->areEquivalent(
|
||||||
|
JobArgs::Alternative(
|
||||||
|
JobArgs::ARG_POST_NAME,
|
||||||
|
JobArgs::ARG_POST_ENTITY),
|
||||||
|
$retriever->getRequiredArguments());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function assertIncorrectRetrieval($retriever)
|
||||||
|
{
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
});
|
||||||
|
$this->assert->isNull($retriever->tryRetrieve());
|
||||||
|
|
||||||
|
$this->assert->throws(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->retrieve();
|
||||||
|
}, 'unsatisfied');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function assertCorrectRetrieval($retriever, $post)
|
||||||
|
{
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
});
|
||||||
|
$this->assert->isNotNull($retriever->tryRetrieve());
|
||||||
|
$this->assert->areEqual($post->getId(), $retriever->tryRetrieve()->getId());
|
||||||
|
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->retrieve();
|
||||||
|
});
|
||||||
|
$this->assert->areEqual($post->getId(), $retriever->retrieve()->getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function preparePost()
|
||||||
|
{
|
||||||
|
return $this->mockPost($this->mockUser());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function prepareRetriever()
|
||||||
|
{
|
||||||
|
$job = new EditPostJob();
|
||||||
|
$postRetriever = new SafePostRetriever($job);
|
||||||
|
return $postRetriever;
|
||||||
|
}
|
||||||
|
}
|
100
tests/Api/Common/UserRetrieverTest.php
Normal file
100
tests/Api/Common/UserRetrieverTest.php
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
<?php
|
||||||
|
class UserRetrieverTest extends AbstractTest
|
||||||
|
{
|
||||||
|
public function testRetrievingByName()
|
||||||
|
{
|
||||||
|
$user = $this->prepareUser();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_USER_NAME, $user->getName());
|
||||||
|
$this->assertCorrectRetrieval($retriever, $user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByEmail()
|
||||||
|
{
|
||||||
|
$user = $this->prepareUser();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_USER_EMAIL, $user->getConfirmedEmail());
|
||||||
|
$this->assertCorrectRetrieval($retriever, $user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByEntity()
|
||||||
|
{
|
||||||
|
$user = $this->prepareUser();
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_USER_ENTITY, $user);
|
||||||
|
$this->assertCorrectRetrieval($retriever, $user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingByNonExistingName()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$retriever->getJob()->setArgument(JobArgs::ARG_USER_NAME, 100);
|
||||||
|
$this->assert->throws(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
}, 'Invalid user name');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testRetrievingNoArguments()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$this->assertIncorrectRetrieval($retriever);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testArgumentRequirements()
|
||||||
|
{
|
||||||
|
$retriever = $this->prepareRetriever();
|
||||||
|
$this->assert->areEquivalent(
|
||||||
|
JobArgs::Alternative(
|
||||||
|
JobArgs::ARG_USER_NAME,
|
||||||
|
JobArgs::ARG_USER_EMAIL,
|
||||||
|
JobArgs::ARG_USER_ENTITY),
|
||||||
|
$retriever->getRequiredArguments());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function assertIncorrectRetrieval($retriever)
|
||||||
|
{
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
});
|
||||||
|
$this->assert->isNull($retriever->tryRetrieve());
|
||||||
|
|
||||||
|
$this->assert->throws(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->retrieve();
|
||||||
|
}, 'unsatisfied');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function assertCorrectRetrieval($retriever, $user)
|
||||||
|
{
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->tryRetrieve();
|
||||||
|
});
|
||||||
|
$this->assert->isNotNull($retriever->tryRetrieve());
|
||||||
|
$this->assert->areEqual($user->getId(), $retriever->tryRetrieve()->getId());
|
||||||
|
|
||||||
|
$this->assert->doesNotThrow(function() use ($retriever)
|
||||||
|
{
|
||||||
|
$retriever->retrieve();
|
||||||
|
});
|
||||||
|
$this->assert->areEqual($user->getId(), $retriever->retrieve()->getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function prepareUser()
|
||||||
|
{
|
||||||
|
$user = $this->mockUser();
|
||||||
|
$user->setConfirmedEmail('godzilla@whitestar.gov');
|
||||||
|
UserModel::save($user);
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function prepareRetriever()
|
||||||
|
{
|
||||||
|
$job = new EditUserJob();
|
||||||
|
$userRetriever = new UserRetriever($job);
|
||||||
|
return $userRetriever;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -13,6 +13,25 @@ class AuthTest extends AbstractTest
|
||||||
{
|
{
|
||||||
Auth::login('existing', 'bleee', false);
|
Auth::login('existing', 'bleee', false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$this->assert->isTrue(Auth::isLoggedIn());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testLoginViaEmail()
|
||||||
|
{
|
||||||
|
getConfig()->registration->staffActivation = false;
|
||||||
|
getConfig()->registration->needEmailForRegistering = false;
|
||||||
|
|
||||||
|
$user = $this->prepareValidUser();
|
||||||
|
$user->setConfirmedEmail('godzilla@whitestar.gov');
|
||||||
|
UserModel::save($user);
|
||||||
|
|
||||||
|
$this->assert->doesNotThrow(function() use ($user)
|
||||||
|
{
|
||||||
|
Auth::login($user->getConfirmedEmail(), 'bleee', false);
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->assert->isTrue(Auth::isLoggedIn());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testLogout()
|
public function testLogout()
|
||||||
|
@ -24,7 +43,7 @@ class AuthTest extends AbstractTest
|
||||||
$this->assert->isFalse(Auth::isLoggedIn());
|
$this->assert->isFalse(Auth::isLoggedIn());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testInvalidUser()
|
public function testInvalidUserName()
|
||||||
{
|
{
|
||||||
$this->assert->throws(function()
|
$this->assert->throws(function()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue