Guest User

Untitled

a guest
Jan 3rd, 2018
362
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. struct ChangePasswordRequest: Encodable {
  2. var email: String
  3. var newPassword: String
  4. var token: String
  5. }
  6.  
  7. import XCTest
  8. @testable import MyProject
  9.  
  10. class ChangePasswordRequestTests: XCTestCase {
  11.  
  12. var changePasswordRequest: ChangePasswordRequest!
  13.  
  14. override func tearDown() {
  15. // Put teardown code here. This method is called after the invocation of each test method in the class.
  16. changePasswordRequest = nil
  17. super.tearDown()
  18. }
  19.  
  20. func testChangePasswordRequest() {
  21.  
  22. // given
  23. let email = "abc@def.com.br"
  24. let newPassword = "abc123"
  25. let token =
  26. """
  27. rF1rHbYVCpcfyo6K2e7Q68QvKYdeOMt0vDXYehggGU3kx8XiuGmQylXabxbGAyUmSK9RnbL
  28. """
  29.  
  30. // when
  31. changePasswordRequest = ChangePasswordRequest(email: email, newPassword: newPassword, token: token)
  32.  
  33. let requestJSON = """
  34. {"email":"(email)","token":"(token)","newPassword":"(newPassword)"}
  35. """
  36.  
  37. changePasswordRequest = ChangePasswordRequest(email: email, newPassword: newPassword, token: token)
  38. guard let encodedRequest = try? JSONEncoder().encode(changePasswordRequest) else {
  39. XCTFail()
  40. return
  41. }
  42.  
  43. // then
  44. XCTAssertEqual(String(data: encodedRequest, encoding: .utf8)!, requestJSON, "Any JSON key differs from model.")
  45.  
  46. }
  47.  
  48. }
  49.  
  50. class UserManager: UserManagerType {
  51. let database: DatabaseType
  52. init(database: DatabaseType) {
  53. self.database = database
  54. }
  55.  
  56. func getUser(withId id: String) -> User? {
  57. return database.getItem(withPredicate: "id == (id)")
  58. }
  59.  
  60. func getAdmins() -> [User] {
  61. return database.getItems(withPredicate: "type == admin")
  62. }
  63. }
  64.  
  65. protocol DatabaseType {
  66. func getItems(withPredicate predicate: String) -> [User]
  67. func getItem(withPredicate predicate: String) -> User?
  68. }
  69.  
  70. // create mock for database.
  71. // Try to avoid any external dependencies in tests
  72. class DatabaseMock: DatabaseType {
  73. var itemsToReturn: [User] = []
  74. var userToReturn: User?
  75.  
  76. func getItems(withPredicate predicate: String) -> [User] {
  77. return itemsToReturn
  78. }
  79.  
  80. func getItem(withPredicate predicate: String) -> User? {
  81. return userToReturn
  82. }
  83. }
  84.  
  85. // actual test case
  86. class UserManagerTests: XCTestCase {
  87. var database: DatabaseMock = DatabaseMock()
  88. var manager: UserManager!
  89. // setup before each test
  90. func setUp() {
  91. database = DatabaseMock()
  92. manager = UserManager(database: database)
  93. }
  94.  
  95. func testReturnsCorrectUserForId() {
  96. let expectedUser = User(id: "123")
  97. database.userToReturn = expectedUser
  98. let actualUser = manager.getUser(withId: "123")
  99. XCTAssertNotNil(actualUser)
  100. XCTAsseerEqual(actualUser.id, expectedUser.id)
  101. }
  102.  
  103. // other tests ...
  104. }
Add Comment
Please, Sign In to add comment