public function setUp() { $kernel = static::createKernel(); $kernel->boot(); if ($kernel->getContainer()->getParameter('database_driver') == 'pdo_sqlite') { $this->markTestSkipped("The SQLite does not support joins."); } $this->em = $kernel->getContainer()->get('knp_bundles.entity_manager'); $fileLocator = new FileLocator(__DIR__ . '/fixtures/'); $path = $fileLocator->locate('trending-bundles.yml'); $data = Yaml::parse($path); $developer = new Developer(); $developer->setName('someName'); $developer->setScore(0); $this->em->persist($developer); foreach ($data['bundles'] as $bundleName => $bundleData) { $bundle = new Bundle('vendor/' . $bundleName); $bundle->setDescription('some description'); $bundle->setScore(100); $bundle->setOwner($developer); foreach ($bundleData['scores'] as $scoreData) { $bundle->setDescription(md5(time() . serialize($scoreData))); $score = new Score(); $score->setDate(new \DateTime($scoreData['date'])); $score->setBundle($bundle); $score->setValue($scoreData['value']); $this->em->persist($score); } $this->em->persist($bundle); } $this->em->flush(); }
public function testRecommandationsScoreUpdate() { $bundle = new Bundle(); for ($index = 0; $index < 5; ++$index) { $user = new Developer(); $user->setName('Contributor #' . ($index + 1)); $bundle->addRecommender($user); } $tester = new KnpBundlesListener(); $tester->updateScore($bundle); $bundle->recalculateScore(); $this->assertEquals(25, $bundle->getScore()); }
public function testUpdateBadUrl() { $output = $this->getMock('Symfony\\Component\\Console\\Output\\OutputInterface'); $data = array('blog' => 'knplabs.com'); $github = $this->getMock('Github\\Client', array('api')); $githubDeveloperApi = $this->getMock('Github\\Api\\User', array('show'), array($github)); $githubDeveloperApi->expects($this->any())->method('show')->with($this->equalTo('lorem'))->will($this->returnValue($data)); $github->expects($this->any())->method('api')->with('user')->will($this->returnValue($githubDeveloperApi)); $userEntity = new DeveloperEntity(); $userEntity->setName('lorem'); $githubDeveloper = new GithubDeveloper($github, $output); $githubDeveloper->update($userEntity); $this->assertEquals('http://knplabs.com', $userEntity->getUrl()); }
/** * @param EntityDeveloper $developer * @return array organizations information */ public function getOrganizations(EntityDeveloper $developer) { return $this->github->api('user')->organizations($developer->getName()); }
/** * @Given /^the site has following users:$/ */ public function theSiteHasFollowingUsers(TableNode $table) { $entityManager = $this->getEntityManager(); $this->developers = array(); foreach ($table->getHash() as $row) { $developer = new Entity\Developer(); $developer->fromArray(array('name' => $row['name'], 'score' => isset($row['score']) ? $row['score'] : 0)); if (isset($row['organization'])) { $organization = $this->organizations[$row['organization']]; $developer->addOrganization($organization); } $entityManager->persist($developer); $this->developers[$developer->getName()] = $developer; } $entityManager->flush(); }
public function updateDeveloper(EntityDeveloper $developer) { $this->updateDeveloperByName($developer->getName()); }
public function load(ObjectManager $manager) { $developers = array(); $organizations = array(); $i = 0; foreach ($this->orgNames as $name => $fullName) { $i++; $organization = new Entity\Organization(); $organization->fromArray(array('name' => $name, 'fullName' => $fullName, 'email' => strtolower(str_replace(' ', '.', $fullName)) . '@foomail.bar', 'location' => $i % 2 ? 'Location ' . $i : null, 'url' => $i % 2 ? 'blog' . $i . '.com' : null, 'score' => 0, 'createdAt' => new \DateTime(sprintf('%d days ago', rand(1, 50))))); $manager->persist($organization); $organizations[] = $organization; } $i = 0; foreach ($this->devNames as $name => $fullName) { $i++; $developer = new Entity\Developer(); $developer->fromArray(array('name' => $name, 'email' => strtolower(str_replace(' ', '.', $fullName)) . '@foomail.bar', 'fullName' => $fullName, 'githubId' => $name, 'company' => $i % 2 ? 'Company ' . $i : null, 'location' => $i % 2 ? 'Location ' . $i : null, 'url' => $i % 2 ? 'blog' . $i . '.com' : null, 'score' => 0, 'createdAt' => new \DateTime(sprintf('%d days ago', rand(1, 50))))); if (isset($organizations[$i + 1])) { $developer->addOrganization($organizations[$i + 1]); } $manager->persist($developer); $developers[] = $developer; } foreach ($developers as $i => $developer) { $contributors = array(); $contributors[] = isset($developers[$i + 1]) ? $developers[$i + 1] : $developers[0]; $contributors[] = isset($developers[$i - 1]) ? $developers[$i - 1] : $developers[count($developers) - 1]; /* @var $contributor Entity\Developer */ $contributor = array_pop($contributors); $bundle = $this->makeBundle($manager, $developer, $i, $contributor); if ($i % 5 == 0) { $bundle->setLastTweetedAt(new \DateTime()); } else { $bundle->setVersionsHistory(array('symfony' => array('dev-master' => '2.1.*', '1.2.0' => '2.0.*', '1.1.0' => '2.*'), 'dependencies' => array('dev-master' => array('name' => 'friendsofsymfony/user-bundle', 'extra' => array('branch-alias' => array('dev-master' => '2.0.x-dev')), 'require' => array('php' => '>=5.3.2', 'symfony/framework-bundle' => '>=2.1,<2.3-dev', 'symfony/security-bundle' => '>=2.1,<2.3-dev'), 'require-dev' => array('twig/twig' => '*', 'doctrine/doctrine-bundle' => '*', 'swiftmailer/swiftmailer' => '*', 'willdurand/propel-typehintable-behavior' => 'dev-master', 'symfony/validator' => '2.1.*', 'symfony/yaml' => '2.1.*'), 'suggest' => array('doctrine/couchdb-odm-bundle' => '*', 'doctrine/doctrine-bundle' => '*', 'doctrine/mongodb-odm-bundle' => '*')), '1.2.x-dev' => array('name' => 'friendsofsymfony/user-bundle', 'require' => array('php' => '>=5.3.2', 'symfony/framework-bundle' => '>=2.1,<2.3-dev', 'symfony/security-bundle' => '>=2.1,<2.3-dev'), 'require-dev' => '', 'suggest' => '')))); } $bundle->setScore(mt_rand(10, 666)); $bundle->addRecommender(isset($developers[$i + 2]) ? $developers[$i + 2] : ($developers[0] != $developer ? $developers[0] : $developers[1])); if (isset($this->keywords[$i])) { $keyword = new Entity\Keyword(); $keyword->setValue($this->keywords[$i]); $bundle->addKeyword($keyword); $manager->persist($keyword); } if (isset($this->keywords[$i + 1])) { $keyword = new Entity\Keyword(); $keyword->setValue($this->keywords[$i + 1]); $bundle->addKeyword($keyword); $manager->persist($keyword); } $manager->persist($bundle); // Add some scores for bundles $today = new \DateTime(); // We add a various number of scores for a given bundle $daysBefore = crc32($bundle->getName() . '-days') % 50; $maxScore = crc32($bundle->getName()) % 50; $previousScore = $maxScore; while ($daysBefore-- > 0) { $date = clone $today; $date->sub(new \DateInterval('P' . $daysBefore . 'D')); $score = new Entity\Score(); $score->setBundle($bundle); $score->setValue($previousScore + $daysBefore); $score->setDate($date); $manager->persist($score); $previousScore = $score->getValue(); } } foreach ($organizations as $organization) { for ($i = 1; $i < rand(2, 7); $i++) { $manager->persist($this->makeBundle($manager, $organization, $i)); } } $manager->flush(); }
/** * @param Bundle $bundle * @param Developer $developer * @return bool */ public function toggleBundleFavorite(Bundle $bundle, Developer $developer) { if ($developer->hasFavoritedBundle($bundle)) { $bundle->removeFavorer($developer); } else { $bundle->addFavorer($developer); } $this->entityManager->persist($bundle); $this->entityManager->flush(); return $developer->hasFavoritedBundle($bundle); }
public function isEqualTo(Developer $developer) { return $developer->getName() === $this->getName(); }
/** * @param Activity $activity * * @return boolean */ public function isEqualTo(Activity $activity) { if ($activity->getBundle()->getId() !== $this->bundle->getId()) { return false; } // Compare developers only if actual activity has one if (null !== $this->developer && $activity->getDeveloper()->getId() !== $this->developer->getId()) { return false; } if ($activity->getType() !== $this->type) { return false; } if ($activity->getState() !== $this->state) { return false; } // Compare dates only when state of activity allows it if (self::STATE_FIXED !== $this->state && $activity->getCreatedAt()->getTimestamp() !== $this->createdAt->getTimestamp()) { return false; } return true; }
public function removeFavorer(Developer $developer) { $developer->getFavoriteBundles()->removeElement($this); $this->favorers->removeElement($developer); $this->nbFavorers--; }