StorageTests.swift 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. // Copyright 2021 Google LLC
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. @testable import FirebaseCoreInternal
  15. import XCTest
  16. private enum Constants {
  17. static let testData = "test_data".data(using: .utf8)!
  18. }
  19. // MARK: - FileStorageTests
  20. class FileStorageTests: XCTestCase {
  21. func testRead_WhenFileDoesNotExist_ThrowsError() throws {
  22. // Given
  23. let fileStorage = FileStorage(url: makeTemporaryFileURL())
  24. // Then
  25. XCTAssertThrowsError(try fileStorage.read())
  26. }
  27. func testRead_WhenFileExists_ReturnsFileContents() throws {
  28. // Given
  29. let fileStorage = FileStorage(url: makeTemporaryFileURL())
  30. XCTAssertNoThrow(try fileStorage.write(Constants.testData))
  31. // When
  32. let storedData = try fileStorage.read()
  33. // Then
  34. XCTAssertEqual(storedData, Constants.testData)
  35. }
  36. func testWriteData_WhenFileDoesNotExist_CreatesFile() throws {
  37. // Given
  38. let fileStorage = FileStorage(url: makeTemporaryFileURL())
  39. XCTAssertThrowsError(try fileStorage.read())
  40. // When
  41. XCTAssertNoThrow(try fileStorage.write(Constants.testData))
  42. // Then
  43. let storedData = try fileStorage.read()
  44. XCTAssertEqual(storedData, Constants.testData)
  45. }
  46. func testWriteData_WhenFileExists_ModifiesFile() throws {
  47. // Given
  48. let fileStorage = FileStorage(url: makeTemporaryFileURL())
  49. XCTAssertNoThrow(try fileStorage.write(Constants.testData))
  50. // When
  51. let modifiedData = "modified_data".data(using: .utf8)
  52. XCTAssertNoThrow(try fileStorage.write(modifiedData))
  53. // Then
  54. let storedData = try fileStorage.read()
  55. XCTAssertEqual(storedData, modifiedData)
  56. }
  57. func testWriteNil_WhenFileDoesNotExist_CreatesEmptyFile() throws {
  58. // Given
  59. let fileStorage = FileStorage(url: makeTemporaryFileURL())
  60. XCTAssertThrowsError(try fileStorage.read())
  61. // When
  62. XCTAssertNoThrow(try fileStorage.write(nil))
  63. // Then
  64. let emptyData = try fileStorage.read()
  65. XCTAssertTrue(emptyData.isEmpty)
  66. }
  67. func testWriteNil_WhenFileExists_EmptiesFile() throws {
  68. // Given
  69. let fileStorage = FileStorage(url: makeTemporaryFileURL())
  70. XCTAssertNoThrow(try fileStorage.write(Constants.testData))
  71. // When
  72. XCTAssertNoThrow(try fileStorage.write(nil))
  73. // Then
  74. let emptyData = try fileStorage.read()
  75. XCTAssertTrue(emptyData.isEmpty)
  76. }
  77. private func makeTemporaryFileURL(testName: String = #function) -> URL {
  78. let temporaryPath = NSTemporaryDirectory() + testName
  79. let temporaryURL = URL(fileURLWithPath: temporaryPath)
  80. try? FileManager.default.removeItem(at: temporaryURL)
  81. return temporaryURL
  82. }
  83. }
  84. // MARK: - UserDefaultsStorageTests
  85. class UserDefaultsStorageTests: XCTestCase {
  86. var defaults: UserDefaults!
  87. let suiteName = "com.firebase.userdefaults.storageTests"
  88. override func setUpWithError() throws {
  89. // Clear the user default suite before testing.
  90. UserDefaults(suiteName: suiteName)?.removePersistentDomain(forName: suiteName)
  91. }
  92. func testRead_WhenDefaultDoesNotExist_ThrowsError() throws {
  93. // Given
  94. let defaultsStorage = UserDefaultsStorage(suiteName: suiteName, key: #function)
  95. // Then
  96. XCTAssertThrowsError(try defaultsStorage.read())
  97. }
  98. func testRead_WhenDefaultExists_ReturnsDefault() throws {
  99. // Given
  100. let defaultsStorage = UserDefaultsStorage(suiteName: suiteName, key: #function)
  101. XCTAssertNoThrow(try defaultsStorage.write(Constants.testData))
  102. // When
  103. let storedData = try defaultsStorage.read()
  104. // Then
  105. XCTAssertEqual(storedData, Constants.testData)
  106. }
  107. func testWriteData_WhenDefaultDoesNotExist_CreatesDefault() throws {
  108. // Given
  109. let defaultsStorage = UserDefaultsStorage(suiteName: suiteName, key: #function)
  110. XCTAssertThrowsError(try defaultsStorage.read())
  111. // When
  112. XCTAssertNoThrow(try defaultsStorage.write(Constants.testData))
  113. // Then
  114. let storedData = try defaultsStorage.read()
  115. XCTAssertEqual(storedData, Constants.testData)
  116. }
  117. func testWriteData_WhenDefaultExists_ModifiesDefault() throws {
  118. // Given
  119. let defaultsStorage = UserDefaultsStorage(suiteName: suiteName, key: #function)
  120. XCTAssertNoThrow(try defaultsStorage.write(Constants.testData))
  121. // When
  122. let modifiedData = #function.data(using: .utf8)
  123. XCTAssertNoThrow(try defaultsStorage.write(modifiedData))
  124. // Then
  125. let storedData = try defaultsStorage.read()
  126. XCTAssertEqual(storedData, modifiedData)
  127. }
  128. func testWriteNil_WhenDefaultDoesNotExist_RemovesDefault() throws {
  129. // Given
  130. let defaultsStorage = UserDefaultsStorage(suiteName: suiteName, key: #function)
  131. XCTAssertThrowsError(try defaultsStorage.read())
  132. // When
  133. XCTAssertNoThrow(try defaultsStorage.write(nil))
  134. // Then
  135. XCTAssertThrowsError(try defaultsStorage.read())
  136. }
  137. func testWriteNil_WhenDefaultExists_RemovesDefault() throws {
  138. // Given
  139. let defaultsStorage = UserDefaultsStorage(suiteName: suiteName, key: #function)
  140. XCTAssertNoThrow(try defaultsStorage.write(Constants.testData))
  141. // When
  142. XCTAssertNoThrow(try defaultsStorage.write(nil))
  143. // Then
  144. XCTAssertThrowsError(try defaultsStorage.read())
  145. }
  146. }