/test/api/BadgeDaoTest.php

https://github.com/TheRosettaFoundation/SOLAS-Match · PHP · 288 lines · 187 code · 56 blank · 45 comment · 0 complexity · 5c7b371c32d10ae531f87b0930cc1319 MD5 · raw file

  1. <?php
  2. namespace SolasMatch\Tests\API;
  3. use \SolasMatch\Tests\UnitTestHelper;
  4. use \SolasMatch\Common as Common;
  5. use \SolasMatch\API as API;
  6. require_once 'PHPUnit/Autoload.php';
  7. require_once __DIR__.'/../../api/vendor/autoload.php';
  8. \DrSlump\Protobuf::autoload();
  9. require_once __DIR__.'/../../api/DataAccessObjects/BadgeDao.class.php';
  10. require_once __DIR__.'/../../api/DataAccessObjects/OrganisationDao.class.php';
  11. require_once __DIR__.'/../../api/DataAccessObjects/UserDao.class.php';
  12. require_once __DIR__.'/../../api/lib/Notify.class.php';
  13. require_once __DIR__.'/../../Common/Enums/BadgeTypes.class.php';
  14. require_once __DIR__.'/../UnitTestHelper.php';
  15. class BadgeDaoTest extends \PHPUnit_Framework_TestCase
  16. {
  17. //number of badges in the system by default. Correct as of 31st March 2014
  18. const BADGE_COUNT = 7 ;
  19. /**
  20. * @covers API\DAO\BadgeDao::insertAndUpdateBadge
  21. */
  22. public function testCreateBadge()
  23. {
  24. UnitTestHelper::teardownDb();
  25. $systemBadge = UnitTestHelper::createBadge();
  26. // Success
  27. $insertedBadge = API\DAO\BadgeDao::insertAndUpdateBadge($systemBadge);
  28. $this->assertNotNull($insertedBadge);
  29. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge);
  30. $this->assertEquals($systemBadge->getTitle(), $insertedBadge->getTitle());
  31. $this->assertEquals($systemBadge->getDescription(), $insertedBadge->getDescription());
  32. $this->assertEquals($systemBadge->getOwnerId(), $insertedBadge->getOwnerId());
  33. }
  34. /**
  35. * @covers API\DAO\BadgeDao::insertAndUpdateBadge
  36. */
  37. public function testUpdateBadge()
  38. {
  39. UnitTestHelper::teardownDb();
  40. $newBadge = UnitTestHelper::createBadge();
  41. $insertedBadge = API\DAO\BadgeDao::insertAndUpdateBadge($newBadge);
  42. $this->assertNotNull($insertedBadge);
  43. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge);
  44. $this->assertEquals($newBadge->getTitle(), $insertedBadge->getTitle());
  45. $this->assertEquals($newBadge->getDescription(), $insertedBadge->getDescription());
  46. $this->assertEquals($newBadge->getOwnerId(), $insertedBadge->getOwnerId());
  47. $insertedBadge->setTitle("Updated Inserted System Badge");
  48. $insertedBadge->setDescription("Updated Inserted System Badge Description");
  49. $insertedBadge->setOwnerId(null);
  50. // Success
  51. $updatedBadge = API\DAO\BadgeDao::insertAndUpdateBadge($insertedBadge);
  52. $this->assertNotNull($updatedBadge);
  53. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $updatedBadge);
  54. $this->assertEquals($updatedBadge->getTitle(), $insertedBadge->getTitle());
  55. $this->assertEquals($updatedBadge->getDescription(), $insertedBadge->getDescription());
  56. $this->assertEquals($updatedBadge->getOwnerId(), $insertedBadge->getOwnerId());
  57. }
  58. /**
  59. * @covers API\DAO\BadgeDao::getBadge
  60. */
  61. public function testGetBadge()
  62. {
  63. UnitTestHelper::teardownDb();
  64. $systemBadge = UnitTestHelper::createBadge();
  65. // Success
  66. $insertedBadge = API\DAO\BadgeDao::insertAndUpdateBadge($systemBadge);
  67. $this->assertNotNull($insertedBadge);
  68. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge);
  69. $getBadge = API\DAO\BadgeDao::getBadge($insertedBadge->getId());
  70. $this->assertNotNull($getBadge);
  71. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $getBadge);
  72. $this->assertEquals($insertedBadge, $getBadge);
  73. }
  74. /**
  75. * @covers API\DAO\BadgeDao::getBadges
  76. */
  77. public function testGetBadges()
  78. {
  79. UnitTestHelper::teardownDb();
  80. $systemBadge = UnitTestHelper::createBadge(null, "Polybadge");
  81. // Success
  82. $insertedBadge = API\DAO\BadgeDao::insertAndUpdateBadge($systemBadge);
  83. $this->assertNotNull($insertedBadge);
  84. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge);
  85. $badge = UnitTestHelper::createBadge(null, "Polybadge");
  86. $insertedBadge = API\DAO\BadgeDao::insertAndUpdateBadge($systemBadge);
  87. $this->assertNotNull($insertedBadge);
  88. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge);
  89. $getBadges = API\DAO\BadgeDao::getBadges(null, "Polybadge");
  90. $this->assertCount(2, $getBadges);
  91. }
  92. //getAllBadges is not a DAO function, but this function tests trying to get all badges from the DB
  93. public function testGetAllBadges()
  94. {
  95. UnitTestHelper::teardownDb();
  96. $allBadges = API\DAO\BadgeDao::getBadges(null);
  97. // Success
  98. //BADGE_COUNT is the number of badges in the system by default.
  99. //So, the number existing should always be at least this.
  100. $this->assertGreaterThanOrEqual($this::BADGE_COUNT, count($allBadges));
  101. foreach ($allBadges as $badge) {
  102. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $badge);
  103. }
  104. }
  105. /**
  106. * @covers API\DAO\BadgeDao::getOrgBadges
  107. */
  108. public function testGetOrgBadges()
  109. {
  110. UnitTestHelper::teardownDb();
  111. $org = UnitTestHelper::createOrg();
  112. $insertedOrg = API\DAO\OrganisationDao::insertAndUpdate($org);
  113. $this->assertNotNull($insertedOrg);
  114. $this->assertInstanceOf(UnitTestHelper::PROTO_ORG, $insertedOrg);
  115. $orgId = $insertedOrg->getId();
  116. $orgBadge1 = UnitTestHelper::createBadge(null, "Org Badge 1", "Org Badge 1 Description", $orgId);
  117. $orgBadge2 = UnitTestHelper::createBadge(null, "Org Badge 2", "Org Badge 2 Description", $orgId);
  118. $insertedBadge1 = API\DAO\BadgeDao::insertAndUpdateBadge($orgBadge1);
  119. $this->assertNotNull($insertedBadge1);
  120. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge1);
  121. $insertedBadge2 = API\DAO\BadgeDao::insertAndUpdateBadge($orgBadge2);
  122. $this->assertNotNull($insertedBadge2);
  123. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge2);
  124. // Success
  125. $orgBadges = API\DAO\BadgeDao::getOrgBadges($orgId);
  126. $this->assertCount(2, $orgBadges);
  127. foreach ($orgBadges as $badge) {
  128. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $badge);
  129. }
  130. $org2 = UnitTestHelper::createOrg(null, "Organisation 2", "Organisation 2 Bio", "http://www.organisation2.org");
  131. $insertedOrg2 = API\DAO\OrganisationDao::insertAndUpdate($org2);
  132. $this->assertNotNull($insertedOrg2->getId());
  133. $this->assertInstanceOf(UnitTestHelper::PROTO_ORG, $insertedOrg2);
  134. $orgId2 = $insertedOrg2->getId();
  135. // Failure
  136. $orgBadgesFailure = API\DAO\BadgeDao::getOrgBadges($orgId2);
  137. $this->assertNull($orgBadgesFailure);
  138. }
  139. /**
  140. * @covers API\DAO\BadgeDao::assignBadge
  141. */
  142. public function testAssignBadge()
  143. {
  144. UnitTestHelper::teardownDb();
  145. $user = UnitTestHelper::createUser();
  146. $insertedUser = API\DAO\UserDao::save($user);
  147. $this->assertNotNull($insertedUser);
  148. $this->assertInstanceOf(UnitTestHelper::PROTO_USER, $insertedUser);
  149. $userID = $insertedUser->getId();
  150. $badge = UnitTestHelper::createBadge();
  151. $insertedBadge = API\DAO\BadgeDao::insertAndUpdateBadge($badge);
  152. $this->assertNotNull($insertedBadge);
  153. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge);
  154. // Success
  155. $resultAssignBadge = API\DAO\BadgeDao::assignBadge($insertedUser->getId(), $insertedBadge->getId());
  156. $this->assertEquals("1", $resultAssignBadge);
  157. }
  158. /**
  159. * @covers API\DAO\BadgeDao::removeUserBadge
  160. */
  161. public function testRemoveUserBadge()
  162. {
  163. UnitTestHelper::teardownDb();
  164. $org = UnitTestHelper::createOrg();
  165. $insertedOrg = API\DAO\OrganisationDao::insertAndUpdate($org);
  166. $this->assertNotNull($insertedOrg);
  167. $this->assertInstanceOf(UnitTestHelper::PROTO_ORG, $insertedOrg);
  168. $user = UnitTestHelper::createUser();
  169. $insertedUser = API\DAO\UserDao::save($user);
  170. $this->assertNotNull($insertedUser);
  171. $this->assertInstanceOf(UnitTestHelper::PROTO_USER, $insertedUser);
  172. $userId = $insertedUser->getId();
  173. $badge = UnitTestHelper::createBadge(null, "Test Remove Badge", "Testing Remove badge", $insertedOrg->getId());
  174. $insertedBadge = API\DAO\BadgeDao::insertAndUpdateBadge($badge);
  175. $this->assertNotNull($insertedBadge);
  176. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge);
  177. $badgeId = $insertedBadge->getId();
  178. $resultAssign = API\DAO\BadgeDao::assignBadge($userId, $badgeId);
  179. $this->assertEquals("1", $resultAssign);
  180. // Success
  181. $resultRemove = API\DAO\BadgeDao::removeUserBadge($userId, $badgeId);
  182. $this->assertEquals("1", $resultRemove);
  183. $badge2 = UnitTestHelper::createBadge(null, "Test Remove Badge 2", "Testing Remove badge 2", null);
  184. $insertedBadge2 = API\DAO\BadgeDao::insertAndUpdateBadge($badge2);
  185. $this->assertNotNull($insertedBadge2);
  186. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge2);
  187. // Failure
  188. $resultRemoveFailure = API\DAO\BadgeDao::removeUserBadge($userId, $insertedBadge2->getId());
  189. $this->assertEquals("0", $resultRemoveFailure);
  190. }
  191. /**
  192. * @covers API\DAO\BadgeDao::deleteBadge
  193. */
  194. public function testDeleteBadge()
  195. {
  196. UnitTestHelper::teardownDb();
  197. $badge = UnitTestHelper::createBadge();
  198. $insertedBadge = API\DAO\BadgeDao::insertAndUpdateBadge($badge);
  199. $this->assertNotNull($insertedBadge);
  200. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge);
  201. // Success
  202. $resultDelete = API\DAO\BadgeDao::deleteBadge($insertedBadge->getId());
  203. $this->assertEquals("1", $resultDelete);
  204. // Failure
  205. $resultDeleteFailure = API\DAO\BadgeDao::deleteBadge($insertedBadge->getId());
  206. $this->assertEquals("0", $resultDeleteFailure);
  207. }
  208. /**
  209. * @covers API\DAO\BadgeDao::validateUserBadge
  210. */
  211. public function testValidateUserBadge()
  212. {
  213. UnitTestHelper::teardownDb();
  214. $user = UnitTestHelper::createUser();
  215. $insertedUser = API\DAO\UserDao::save($user);
  216. $this->assertNotNull($insertedUser);
  217. $this->assertInstanceOf(UnitTestHelper::PROTO_USER, $insertedUser);
  218. $badge = UnitTestHelper::createBadge();
  219. $insertedBadge = API\DAO\BadgeDao::insertAndUpdateBadge($badge);
  220. $this->assertNotNull($insertedBadge->getId());
  221. $this->assertInstanceOf(UnitTestHelper::PROTO_BADGE, $insertedBadge);
  222. $userAssignedBadge = API\DAO\BadgeDao::assignBadge($insertedUser->getId(), $insertedBadge->getId());
  223. $this->assertEquals("1", $userAssignedBadge);
  224. // Success
  225. $resultValidate = API\DAO\BadgeDao::validateUserBadge($insertedUser->getId(), $insertedBadge->getId());
  226. $this->assertEquals("1", $resultValidate);
  227. $badge2 = UnitTestHelper::createBadge(null, "Badge 2", "Badge 2 Description", null);
  228. // Failure
  229. $resultValidateFailure = API\DAO\BadgeDao::validateUserBadge($insertedUser->getId(), $badge2->getId());
  230. $this->assertEquals("0", $resultValidateFailure);
  231. }
  232. }