Skip to content

Commit

Permalink
Even more unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobemerick committed Sep 8, 2017
1 parent 91e2ce0 commit 654bb82
Show file tree
Hide file tree
Showing 2 changed files with 209 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/Cron/Twitter.php
Expand Up @@ -104,7 +104,7 @@ protected function processTweet(TwitterModel $twitterModel, stdclass $tweet)
return true;
}

$tweetUpdated = $this->checkTweetMetadata($twitterModel, $tweet->id_str, $tweet);
$tweetUpdated = $this->checkTweetUpdated($twitterModel, $tweet->id_str, $tweet);
if ($tweetUpdated) {
$this->updateTweet($twitterModel, $tweet->id_str, $tweet);
$this->logger->debug("Updated tweet: {$tweet->id_str}");
Expand Down Expand Up @@ -155,7 +155,7 @@ protected function insertTweet(TwitterModel $twitterModel, stdclass $tweet, Date
* @param stdclass $tweet
* @return boolean
*/
protected function checkTweetMetadata(TwitterModel $twitterModel, $tweetId, stdclass $tweet)
protected function checkTweetUpdated(TwitterModel $twitterModel, $tweetId, stdclass $tweet)
{
$metadata = $twitterModel->getTweetByTweetId($tweetId)['metadata'];
return $metadata !== json_encode($tweet);
Expand Down
207 changes: 207 additions & 0 deletions tests/unit/Cron/TwitterTest.php
Expand Up @@ -6,6 +6,7 @@
use DateTimeZone;
use Exception;
use ReflectionClass;
use stdclass;

use PHPUnit\Framework\TestCase;

Expand Down Expand Up @@ -524,6 +525,31 @@ public function testFetchTweetsReturnsTweets()
$this->assertEquals($tweets, $result);
}

public function testProcessTweetChecksTweetExists()
{
$this->markTestIncomplete();
}

public function testProcessTweetInsertsIfTweetDoesNotExist()
{
$this->markTestIncomplete();
}

public function testProcessTweetChecksTweetUpdated()
{
$this->markTestIncomplete();
}

public function testProcessTweetUpdatesIfTweetHasBeenUpdated()
{
$this->markTestIncomplete();
}

public function testProcessTweetReturnsFalseIfNoChange()
{
$this->markTestIncomplete();
}

public function testCheckTweetExistsPullsFromTwitterModel()
{
$tweetId = '123';
Expand Down Expand Up @@ -823,4 +849,185 @@ public function testInsertTweetReturnsTrueIfInsertSucceeds()

$this->assertTrue($result);
}

public function testCheckTweetUpdatedPullsFromTwitterModel()
{
$tweetId = '123';
$tweet = new stdclass();

$mockTwitterModel = $this->createMock(TwitterModel::class);
$mockTwitterModel->expects($this->once())
->method('getTweetByTweetId')
->with(
$this->equalTo($tweetId)
);

$twitter = $this->getMockBuilder(Twitter::class)
->disableOriginalConstructor()
->setMethods()
->getMock();

$reflectedTwitter = new ReflectionClass(Twitter::class);
$reflectedCheckTweetUpdatedMethod = $reflectedTwitter->getMethod('checkTweetUpdated');
$reflectedCheckTweetUpdatedMethod->setAccessible(true);

$reflectedCheckTweetUpdatedMethod->invokeArgs($twitter, [
$mockTwitterModel,
$tweetId,
$tweet,
]);
}

public function testCheckTweetUpdatedReturnsTrueIfUpdated()
{
$oldTweet = (object) [
'id' => '123',
];
$newTweet = (object) [
'id' => '456',
];

$mockTwitterModel = $this->createMock(TwitterModel::class);
$mockTwitterModel->method('getTweetByTweetId')
->willReturn([
'metadata' => json_encode($oldTweet),
]);

$twitter = $this->getMockBuilder(Twitter::class)
->disableOriginalConstructor()
->setMethods()
->getMock();

$reflectedTwitter = new ReflectionClass(Twitter::class);
$reflectedCheckTweetUpdatedMethod = $reflectedTwitter->getMethod('checkTweetUpdated');
$reflectedCheckTweetUpdatedMethod->setAccessible(true);

$result = $reflectedCheckTweetUpdatedMethod->invokeArgs($twitter, [
$mockTwitterModel,
'',
$newTweet,
]);

$this->assertTrue($result);
}

public function testCheckTweetUpdatedReturnsFalseIfNotUpdated()
{
$tweet = (object) [
'id' => '123',
];

$mockTwitterModel = $this->createMock(TwitterModel::class);
$mockTwitterModel->method('getTweetByTweetId')
->willReturn([
'metadata' => json_encode($tweet),
]);

$twitter = $this->getMockBuilder(Twitter::class)
->disableOriginalConstructor()
->setMethods()
->getMock();

$reflectedTwitter = new ReflectionClass(Twitter::class);
$reflectedCheckTweetUpdatedMethod = $reflectedTwitter->getMethod('checkTweetUpdated');
$reflectedCheckTweetUpdatedMethod->setAccessible(true);

$result = $reflectedCheckTweetUpdatedMethod->invokeArgs($twitter, [
$mockTwitterModel,
'',
$tweet,
]);

$this->assertFalse($result);
}

public function testUpdateTweetSendsValuesToModel()
{
$tweetId = '123';
$tweet = (object) [
'id' => '123',
];

$mockTwitterModel = $this->createMock(TwitterModel::class);
$mockTwitterModel->expects($this->once())
->method('updateTweet')
->with(
$this->equalTo($tweetId),
$this->equalTo(json_encode($tweet))
)
->willReturn(true);

$twitter = $this->getMockBuilder(Twitter::class)
->disableOriginalConstructor()
->setMethods()
->getMock();

$reflectedTwitter = new ReflectionClass(Twitter::class);
$reflectedUpdateTweetMethod = $reflectedTwitter->getMethod('updateTweet');
$reflectedUpdateTweetMethod->setAccessible(true);

$reflectedUpdateTweetMethod->invokeArgs($twitter, [
$mockTwitterModel,
$tweetId,
$tweet,
]);
}

/**
* @expectedException Exception
* @expectedExceptionMessage Error while trying to update tweet: 123
*/
public function testUpdateTweetThrowsExceptionIfModelFails()
{
$tweet = (object) [
'id' => '123',
];

$mockTwitterModel = $this->createMock(TwitterModel::class);
$mockTwitterModel->method('updateTweet')
->willReturn(false);

$twitter = $this->getMockBuilder(Twitter::class)
->disableOriginalConstructor()
->setMethods()
->getMock();

$reflectedTwitter = new ReflectionClass(Twitter::class);
$reflectedUpdateTweetMethod = $reflectedTwitter->getMethod('updateTweet');
$reflectedUpdateTweetMethod->setAccessible(true);

$reflectedUpdateTweetMethod->invokeArgs($twitter, [
$mockTwitterModel,
'123',
$tweet,
]);
}

public function testUpdateTweetReturnsTrueIfModelSucceeds()
{
$tweet = (object) [
'id' => '123',
];

$mockTwitterModel = $this->createMock(TwitterModel::class);
$mockTwitterModel->method('updateTweet')
->willReturn(true);

$twitter = $this->getMockBuilder(Twitter::class)
->disableOriginalConstructor()
->setMethods()
->getMock();

$reflectedTwitter = new ReflectionClass(Twitter::class);
$reflectedUpdateTweetMethod = $reflectedTwitter->getMethod('updateTweet');
$reflectedUpdateTweetMethod->setAccessible(true);

$result = $reflectedUpdateTweetMethod->invokeArgs($twitter, [
$mockTwitterModel,
'',
$tweet,
]);

$this->assertTrue($result);
}
}

0 comments on commit 654bb82

Please sign in to comment.