Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[DB MIGRATION REQ'D] Insights feed
* Create insight baseline and insight model and DAOs
* Calculate 7-day and 30-day retweet averages at the end of each Twitter crawl
* Generate post retweet and least likely follower at the end of each Twitter crawl
* Generate follower count history milestones to Sundays and day 1 of the month
* Generate flashback posts from this day 1 through 6 years ago
[ci skip]
  • Loading branch information
ginatrapani committed Jun 6, 2012
1 parent 7a9d978 commit 3da45a7
Show file tree
Hide file tree
Showing 32 changed files with 1,691 additions and 38 deletions.
14 changes: 13 additions & 1 deletion tests/TestOfDAOFactory.php
Expand Up @@ -375,6 +375,18 @@ public function testGetShortLinkDAO() {
$this->assertNotNull($dao);
$this->assertIsA($dao, 'ShortLinkMySQLDAO');
}

public function testInsightBaselineDAO() {
$dao = DAOFactory::getDAO('InsightBaselineDAO');
$this->assertNotNull($dao);
$this->assertIsA($dao, 'InsightBaselineMySQLDAO');
}

public function testInsightDAO() {
$dao = DAOFactory::getDAO('InsightDAO');
$this->assertNotNull($dao);
$this->assertIsA($dao, 'InsightMySQLDAO');
}
/**
* Test get InstallerDAO without a config file, override with array of config values
*/
Expand All @@ -387,7 +399,7 @@ public function testGetInstallerDAONoConfigFile(){
$this->assertTrue(isset($dao));
$this->assertIsA($dao, 'InstallerMySQLDAO');
$result = $dao->getTables();
$this->assertEqual(sizeof($result), 29);
$this->assertEqual(sizeof($result), 31);
$this->assertEqual($result[0], $cfg_values["table_prefix"].'encoded_locations');
$this->restoreConfigFile();
}
Expand Down
73 changes: 69 additions & 4 deletions tests/TestOfFollowerCountMySQLDAO.php
Expand Up @@ -117,6 +117,74 @@ public function testGetDayHistoryNoGapsMilestoneNotInSight() {
$this->assertNotNull($result['vis_data']);
}

public function testGetDayHistoryFromSpecificStartDate() {
$builders = array();
$format = 'n/j';
$date = date ( $format );

$todays_day_of_the_week = date('w');
$this->debug("It's currently the ".$todays_day_of_the_week." day of the week");
$follower_count = array('network_user_id'=>'930061', 'network'=>'twitter', 'date'=>'-40d', 'count'=>90);
$builders[] = FixtureBuilder::build('follower_count', $follower_count);

$follower_count = array('network_user_id'=>'930061', 'network'=>'twitter', 'date'=>'-41d', 'count'=>70);
$builders[] = FixtureBuilder::build('follower_count', $follower_count);

$follower_count = array('network_user_id'=>'930061', 'network'=>'twitter', 'date'=>'-42d', 'count'=>50);
$builders[] = FixtureBuilder::build('follower_count', $follower_count);

$follower_count = array('network_user_id'=>'930061', 'network'=>'twitter', 'date'=>'-43d', 'count'=>30);
$builders[] = FixtureBuilder::build('follower_count', $follower_count);

$follower_count = array('network_user_id'=>'930061', 'network'=>'twitter', 'date'=>'-44d', 'count'=>10);
$builders[] = FixtureBuilder::build('follower_count', $follower_count);

$dao = new FollowerCountMySQLDAO();
$date_ago = date ($format, strtotime('-40 day'.$date));
$result = $dao->getHistory('930061', 'twitter', 'DAY', 5, $date_ago);
$this->assertEqual(sizeof($result), 4, '4 sets of data returned--history, trend, and milestone, and vis_data');

$this->debug(Utils::varDumpToString($result));
//check history
$this->assertEqual(sizeof($result['history']), 5);

$format = 'm/d/Y';
if ($todays_day_of_the_week == 0 ) {
$date_ago = date ($format, strtotime('-40 day'.$date));
$this->assertEqual($result['history'][$date_ago], 90);

$date_ago = date ($format, strtotime('-41 day'.$date));
$this->assertEqual($result['history'][$date_ago], 70);

$date_ago = date ($format, strtotime('-42 day'.$date));
$this->assertEqual($result['history'][$date_ago], 50);

$date_ago = date ($format, strtotime('-43 day'.$date));
$this->assertEqual($result['history'][$date_ago], 30);
} else {
$date_ago = date ($format, strtotime('-41 day'.$date));
$this->assertEqual($result['history'][$date_ago], 70);

$date_ago = date ($format, strtotime('-42 day'.$date));
$this->assertEqual($result['history'][$date_ago], 50);

$date_ago = date ($format, strtotime('-43 day'.$date));
$this->assertEqual($result['history'][$date_ago], 30);
}

//check trend
$this->assertEqual($result['trend'], 16);

//check milestone
//latest follower count is 90, next milestone is 100 followers
//with a 20+/day trend, this should take 1 day
$this->debug(Utils::varDumpToString($result['milestone']));
$this->assertEqual($result['milestone']["next_milestone"], 100);
$this->assertEqual($result['milestone']["will_take"], 1);

$this->assertNotNull($result['vis_data']);
}

public function testGetDayHistoryNoGapsMilestoneInSight() {
$format = 'n/j';
$date = date ( $format );
Expand Down Expand Up @@ -249,11 +317,8 @@ public function testGetDayHistoryWeekNoGaps() {
//$this->assertEqual($result['trend'], 3);

//check milestone
//latest follower count is 140, next milestone is 1,000 followers
//with a 7+/day trend, this should take 123 days
//beyond our "don't feel bad about yourself" threshold of 10, so should be null
if ($todays_day_of_the_week != 0) {
$this->assertNull($result['milestone']);
$this->assertEqual($result['milestone']['will_take'], 20);
}
}

Expand Down
104 changes: 104 additions & 0 deletions tests/TestOfInsightBaselineMySQLDAO.php
@@ -0,0 +1,104 @@
<?php
/**
*
* ThinkUp/tests/TestOfInsightBaselineMySQLDAO.php
*
* Copyright (c) 2012 Gina Trapani
*
* LICENSE:
*
* This file is part of ThinkUp (http://thinkupapp.com).
*
* ThinkUp is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any
* later version.
*
* ThinkUp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with ThinkUp. If not, see
* <http://www.gnu.org/licenses/>.
*
* @license http://www.gnu.org/licenses/gpl.html
* @copyright 2012 Gina Trapani
* @author Gina Trapani
*/
require_once dirname(__FILE__).'/init.tests.php';
require_once THINKUP_WEBAPP_PATH.'_lib/extlib/simpletest/autorun.php';
require_once THINKUP_WEBAPP_PATH.'config.inc.php';

class TestOfInsightBaselineMySQLDAO extends ThinkUpUnitTestCase {
public function setUp() {
parent::setUp();
$this->builders = self::buildData();
}

protected function buildData() {
$builders = array();
$builders[] = FixtureBuilder::build('insight_baselines', array('date'=>'2012-05-01',
'slug'=>'avg_replies_per_week', 'instance_id'=>1, 'value'=>51));
return $builders;
}

public function tearDown() {
$this->builders = null;
parent::tearDown();
}

public function testInsertInsightBaseline() {
$dao = new InsightBaselineMySQLDAO();
//date specified
$result = $dao->insertInsightBaseline('avg_replies_per_week', 1, 51, '2012-05-05');
$this->assertTrue($result);

$result = $dao->getInsightBaseline('avg_replies_per_week', 1, '2012-05-05');
$this->assertEqual($result->value, 51);

//inserting existing baseline should update
$result = $dao->insertInsightBaseline('avg_replies_per_week', 1, 50, '2012-05-05');
$this->assertTrue($result);

//assert update was successful
$result = $dao->getInsightBaseline('avg_replies_per_week', 1, '2012-05-05');
$this->assertEqual($result->value, 50);

//no date specified
$result = $dao->insertInsightBaseline('avg_replies_per_week', 1, 4551);
$this->assertTrue($result);
$result = $dao->getInsightBaseline('avg_replies_per_week', 1);
$this->assertEqual($result->value, 4551);
}

public function testGetInsightBaseline() {
$dao = new InsightBaselineMySQLDAO();
$result = $dao->getInsightBaseline('avg_replies_per_week', 1, '2012-05-01');
$this->assertIsA($result, 'InsightBaseline');
$this->assertEqual($result->slug, 'avg_replies_per_week');
$this->assertEqual($result->date, '2012-05-01');
$this->assertEqual($result->instance_id, 1);
$this->assertEqual($result->value, 51);

$result = $dao->getInsightBaseline('avg_replies_per_week', 1, '2012-05-02');
$this->assertNull($result);
}

public function testUpdateInsightBaseline() {
$dao = new InsightBaselineMySQLDAO();

//update existing baseline
$result = $dao->updateInsightBaseline('avg_replies_per_week', 1, 101, '2012-05-01');
$this->assertTrue($result);
//check that value was updated
$result = $dao->getInsightBaseline('avg_replies_per_week', 1, '2012-05-01');
$this->assertEqual($result->value, 101);

//update nonexistent baseline
$result = $dao->updateInsightBaseline('avg_replies_per_week', 1, 101, '2012-05-10');
$this->assertFalse($result);

//no date specified
$result = $dao->updateInsightBaseline('avg_replies_per_week', 1, 101);
$this->assertFalse($result);
}
}
115 changes: 115 additions & 0 deletions tests/TestOfInsightMySQLDAO.php
@@ -0,0 +1,115 @@
<?php
/**
*
* ThinkUp/tests/TestOfInsightMySQLDAO.php
*
* Copyright (c) 2012 Gina Trapani
*
* LICENSE:
*
* This file is part of ThinkUp (http://thinkupapp.com).
*
* ThinkUp is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any
* later version.
*
* ThinkUp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with ThinkUp. If not, see
* <http://www.gnu.org/licenses/>.
*
* @license http://www.gnu.org/licenses/gpl.html
* @copyright 2012 Gina Trapani
* @author Gina Trapani
*/
require_once dirname(__FILE__).'/init.tests.php';
require_once THINKUP_WEBAPP_PATH.'_lib/extlib/simpletest/autorun.php';
require_once THINKUP_WEBAPP_PATH.'config.inc.php';

class TestOfInsightMySQLDAO extends ThinkUpUnitTestCase {
public function setUp() {
parent::setUp();
$this->builders = self::buildData();
}

protected function buildData() {
$builders = array();
$builders[] = FixtureBuilder::build('insights', array('date'=>'2012-05-01', 'slug'=>'avg_replies_per_week',
'instance_id'=>'1', 'text'=>'Retweet spike! Your post got retweeted 110 times',
'emphasis'=>Insight::EMPHASIS_HIGH));
return $builders;
}

public function tearDown() {
$this->builders = null;
parent::tearDown();
}
public function testGetInsight() {
$dao = new InsightMySQLDAO();
$result = $dao->getInsight('avg_replies_per_week', 1, '2012-05-01');
$this->assertIsA($result, 'Insight');
$this->assertEqual($result->slug, 'avg_replies_per_week');
$this->assertEqual($result->date, '2012-05-01');
$this->assertEqual($result->instance_id, 1);
$this->assertEqual($result->text, 'Retweet spike! Your post got retweeted 110 times');
$this->assertEqual($result->emphasis, Insight::EMPHASIS_HIGH);

$result = $dao->getInsight('avg_replies_per_week', 1, '2012-05-02');
$this->assertNull($result);
}

public function testInsertInsight() {
$dao = new InsightMySQLDAO();
//date specified
$result = $dao->insertInsight('avg_replies_per_week', 1, '2012-05-05', 'Oh hai! You rock');
$this->assertTrue($result);

$result = $dao->getInsight('avg_replies_per_week', 1, '2012-05-05');
$this->assertEqual($result->text, 'Oh hai! You rock');
$this->assertNull($result->related_data);
$this->assertEqual($result->emphasis, Insight::EMPHASIS_LOW);

//inserting existing insight should update
$result = $dao->insertInsight('avg_replies_per_week', 1, '2012-05-05', 'Oh hai! Updated: You rock',
Insight::EMPHASIS_HIGH);
$this->assertTrue($result);

//assert update was successful
$result = $dao->getInsight('avg_replies_per_week', 1, '2012-05-05');
$this->assertEqual($result->text, 'Oh hai! Updated: You rock');
$this->assertEqual($result->emphasis, Insight::EMPHASIS_HIGH);
}

public function testUpdateInsight() {
$dao = new InsightMySQLDAO();

//update existing baseline
$result = $dao->updateInsight('avg_replies_per_week', 1, '2012-05-01', 'LOLlerskates', Insight::EMPHASIS_MED);
$this->assertTrue($result);
//check that value was updated
$result = $dao->getInsight('avg_replies_per_week', 1, '2012-05-01');
$this->assertEqual($result->text, 'LOLlerskates');
$this->assertEqual($result->emphasis, Insight::EMPHASIS_MED);

//update nonexistent baseline
$result = $dao->updateInsight('avg_replies_per_week', 1, '2012-05-10', 'ooooh burn');
$this->assertFalse($result);
}

public function testDeleteInsight() {
$dao = new InsightMySQLDAO();

//delete existing baseline
$result = $dao->deleteInsight('avg_replies_per_week', 1, '2012-05-01', 'LOLlerskates', Insight::EMPHASIS_MED);
$this->assertTrue($result);
//check that insight was deleted
$result = $dao->getInsight('avg_replies_per_week', 1, '2012-05-01');
$this->assertNull($result);

//delete nonexistent baseline
$result = $dao->deleteInsight('avg_replies_per_week', 1, '2012-05-10', 'ooooh burn');
$this->assertFalse($result);
}
}

0 comments on commit 3da45a7

Please sign in to comment.