PageRenderTime 26ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/core/src/test/scala/com/trailmagic/jumper/core/mongodb/MongoUserRepositoryTest.scala

https://github.com/cyrusinnovation/inquisition
Scala | 181 lines | 142 code | 39 blank | 0 comment | 0 complexity | 327a59a9ae5df1961a0010194dbc9f11 MD5 | raw file
  1. package com.trailmagic.jumper.core.mongodb
  2. import org.junit.{Test, Before}
  3. import org.junit.Assert._
  4. import com.trailmagic.jumper.core._
  5. import com.trailmagic.jumper.core.security._
  6. import com.mongodb.casbah.MongoConnection
  7. class MongoUserRepositoryTest {
  8. val con = MongoConnection()
  9. val TestDbName = "test_inquisition"
  10. val db = con(TestDbName)
  11. val users = db("users")
  12. var repository: MongoUserRepository = _
  13. val TestUser = User("testy@example.com", "Tester", "Testy", "McTesterton", "4879b790020a04377613fd860a4e754add628f6bfdd5c1e675a28c286d379ebd", "cc11ce5ba1cd05411aa492b1a2f6bd78")
  14. val AnotherUser = User("another@example.com", "anoTher", "Another", "User", "password", "salt")
  15. @Before
  16. def setUp() {
  17. users.drop()
  18. repository = new MongoUserRepository(db)
  19. }
  20. @Test
  21. def testSaveAndFindUserById() {
  22. val savedUser = repository.save(TestUser)
  23. val foundUser = repository.findById(savedUser.id).get
  24. assertEquals(savedUser, foundUser)
  25. assertEquals(TestUser, foundUser.user)
  26. assertEquals(TestUser, savedUser.user)
  27. }
  28. @Test
  29. def testFindByUsername() {
  30. val savedUser = repository.save(TestUser)
  31. repository.save(AnotherUser)
  32. val foundUser = repository.findByUsername(TestUser.username).get
  33. assertEquals(savedUser, foundUser)
  34. assertEquals(TestUser, foundUser.user)
  35. assertEquals(TestUser.username, foundUser.username)
  36. }
  37. @Test
  38. def testFindUsersFindsAllSpecifiedExistingUsers() {
  39. val savedUsers = List(TestUser, AnotherUser).map(repository.save)
  40. val foundUsers = repository.findUsers(List(TestUser.username, AnotherUser.username))
  41. assertEquals(savedUsers(0), foundUsers(TestUser.username))
  42. assertEquals(savedUsers(1), foundUsers(AnotherUser.username))
  43. assertEquals(2, foundUsers.size)
  44. }
  45. @Test
  46. def testFindUsersFindsAllUsersIrrespectiveOfCase() {
  47. val savedUsers = List(TestUser, AnotherUser).map(repository.save)
  48. val foundUsers = repository.findUsers(List("TesTeR", "aNoTHer"))
  49. assertEquals(savedUsers(0), foundUsers(TestUser.username))
  50. assertEquals(savedUsers(1), foundUsers(AnotherUser.username))
  51. assertEquals(2, foundUsers.size)
  52. }
  53. @Test
  54. def testFindUsersIgnoresUnknownUsernames() {
  55. val foundUsers = repository.findUsers(List("junk"))
  56. assertEquals(Map(), foundUsers)
  57. }
  58. @Test(expected = classOf[NonUniqueUsernameException])
  59. def testCannotInsertUserWithDuplicateUsername() {
  60. repository.save(AnotherUser)
  61. repository.save(AnotherUser.copy(email = "notanother@email.com"))
  62. }
  63. @Test(expected = classOf[NonUniqueUsernameException])
  64. def testDifferentCaseUsernameCountsAsDuplicateId() {
  65. repository.save(AnotherUser)
  66. repository.save(AnotherUser.copy(username = AnotherUser.username.toUpperCase, email = "notanother@email.com"))
  67. }
  68. @Test(expected = classOf[NonUniqueEmailException])
  69. def testCannotInsertUserWithDuplicateEmail() {
  70. repository.save(AnotherUser)
  71. repository.save(AnotherUser.copy(username = "notanother"))
  72. }
  73. @Test(expected = classOf[NonUniqueEmailException])
  74. def testCannotChangeUserEmailToDuplicate() {
  75. repository.save(TestUser)
  76. val savedUser: SavedUser = repository.save(AnotherUser)
  77. repository.save(SavedUser(savedUser.id, savedUser.user.copy(email = TestUser.email)))
  78. }
  79. @Test
  80. def testUserIdIsLowercaseUsername() {
  81. val savedUser = repository.save(TestUser.copy(username = "TesTeR"))
  82. assertEquals("tester", savedUser.id)
  83. assertEquals("TesTeR", savedUser.username)
  84. assertEquals(savedUser, repository.findById(savedUser.id).get)
  85. assertEquals("TesTeR", repository.findByUsername(savedUser.username).get.username)
  86. }
  87. @Test
  88. def testFindByIdAlwaysUsesLowercase() {
  89. val savedUser = repository.save(TestUser.copy(username = "TesTeR"))
  90. assertEquals("tester", savedUser.id)
  91. assertEquals(savedUser, repository.findById(savedUser.username).get)
  92. }
  93. @Test
  94. def testFindByUsernameAlwaysUsesLowercase() {
  95. val savedUser = repository.save(TestUser.copy(username = "TesTeR"))
  96. assertEquals("tester", savedUser.id)
  97. assertEquals(savedUser, repository.findByUsername("tEStEr").get)
  98. }
  99. @Test
  100. def testCanUpdateSavedUser() {
  101. val savedUser = repository.save(TestUser.copy(username = "TesTeR"))
  102. val updatedUser = repository.save(SavedUser(savedUser.id, savedUser.user.copy(lastName = "Testleton")))
  103. assertEquals("Testleton", updatedUser.lastName)
  104. assertEquals("Testleton", repository.findById(savedUser.id).get.lastName)
  105. }
  106. @Test
  107. def testCanSaveAndRetrieveUserWithFriends() {
  108. val facebookFriend = Friend(None, Some("12345"))
  109. val localFriend = Friend(Some("another"), None)
  110. val facebookAndLocalFriend = Friend(Some("third"), Some("4567"))
  111. val user = TestUser.copy(friends = Set(facebookFriend, localFriend, facebookAndLocalFriend))
  112. val savedUser = repository.save(user)
  113. val foundUser = repository.findById(savedUser.id).get
  114. assertTrue(foundUser.friends.contains(facebookFriend))
  115. assertTrue(foundUser.friends.contains(localFriend))
  116. assertTrue(foundUser.friends.contains(facebookAndLocalFriend))
  117. }
  118. @Test
  119. def testCanAddFacebookIdToExistingUser() {
  120. val savedUser = repository.save(TestUser)
  121. assertEquals(None, repository.findById(savedUser.id).get.facebookId)
  122. val updatedUser = repository.save(SavedUser(savedUser.id, savedUser.user.copy(facebookId = Some("1234"))))
  123. assertEquals(Some("1234"), updatedUser.facebookId)
  124. assertEquals(Some("1234"), repository.findById(savedUser.id).get.facebookId)
  125. }
  126. @Test
  127. def testCanFindByFacebookId() {
  128. val savedUser = repository.save(TestUser.copy(facebookId = Some("1234")))
  129. val results = repository.findWithFacebookIds(Set("1234"))
  130. assertEquals(Set(savedUser), results)
  131. }
  132. @Test
  133. def testCanFindMultipleByFacebookId() {
  134. val ids = Set("1234", "2345", "4567", "7878")
  135. val savedUsers = ids.map((id) => repository.save(TestUser.copy(username = id, facebookId = Some(id), email = id + "@foo.com")))
  136. assertEquals(savedUsers.toSet, repository.findWithFacebookIds(ids))
  137. }
  138. @Test
  139. def testFindByFacebookWithNoIdsYieldsEmptySet() {
  140. assertEquals(Set(), repository.findWithFacebookIds(Set()))
  141. }
  142. }