Fixed post score validation

This commit is contained in:
Marcin Kurczewski 2014-05-09 20:23:12 +02:00
parent 343268d029
commit 39f49fc539
2 changed files with 124 additions and 0 deletions

View file

@ -144,6 +144,8 @@ final class UserModel extends AbstractCrudModel
->add(new Sql\EqualsFunctor('user_id', new Sql\Binding($user->getId()))));
Database::exec($stmt);
$score = intval($score);
if (abs($score) > 1)
throw new SimpleException('Invalid score');
if ($score != 0)
{
$stmt = new Sql\InsertStatement();

View file

@ -0,0 +1,122 @@
<?php
class ScorePostJobTest extends AbstractTest
{
public function testScoring()
{
$this->grantAccess('scorePost');
$this->login($this->mockUser());
$post = $this->mockPost(Auth::getCurrentUser());
$this->assert->areEqual(0, $post->getScore());
$post = $this->assert->doesNotThrow(function() use ($post)
{
return Api::run(
new ScorePostJob(),
[
ScorePostJob::POST_ID => $post->getId(),
ScorePostJob::SCORE => 1,
]);
});
$this->assert->areEqual(1, $post->getScore());
}
public function testNegativeScore()
{
$this->grantAccess('scorePost');
$this->login($this->mockUser());
$post = $this->mockPost(Auth::getCurrentUser());
$post = $this->assert->doesNotThrow(function() use ($post)
{
return Api::run(
new ScorePostJob(),
[
ScorePostJob::POST_ID => $post->getId(),
ScorePostJob::SCORE => -1,
]);
});
$this->assert->areEqual(-1, $post->getScore());
}
public function testInvalidScore()
{
$this->grantAccess('scorePost');
$this->login($this->mockUser());
$post = $this->mockPost(Auth::getCurrentUser());
$this->assert->throws(function() use ($post)
{
Api::run(
new ScorePostJob(),
[
ScorePostJob::POST_ID => $post->getId(),
ScorePostJob::SCORE => 2,
]);
}, 'Invalid score');
$this->assert->areEqual(0, $post->getScore());
}
public function testScoreOverwriting()
{
$this->grantAccess('scorePost');
$this->login($this->mockUser());
$post = $this->mockPost(Auth::getCurrentUser());
$post = $this->assert->doesNotThrow(function() use ($post)
{
return Api::run(
new ScorePostJob(),
[
ScorePostJob::POST_ID => $post->getId(),
ScorePostJob::SCORE => -1,
]);
});
$post = $this->assert->doesNotThrow(function() use ($post)
{
return Api::run(
new ScorePostJob(),
[
ScorePostJob::POST_ID => $post->getId(),
ScorePostJob::SCORE => 1,
]);
});
$this->assert->areEqual(1, $post->getScore());
}
public function testScoreTwoPeople()
{
$this->grantAccess('scorePost');
$this->login($this->mockUser());
$post = $this->mockPost(Auth::getCurrentUser());
$post = $this->assert->doesNotThrow(function() use ($post)
{
return Api::run(
new ScorePostJob(),
[
ScorePostJob::POST_ID => $post->getId(),
ScorePostJob::SCORE => 1,
]);
});
$this->login($this->mockUser());
$post = $this->assert->doesNotThrow(function() use ($post)
{
return Api::run(
new ScorePostJob(),
[
ScorePostJob::POST_ID => $post->getId(),
ScorePostJob::SCORE => 1,
]);
});
$this->assert->areEqual(2, $post->getScore());
}
}