FileStorageTests.swift 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. @testable import FreeAPS
  2. import XCTest
  3. class FileStorageTests: XCTestCase {
  4. let fileStorage = BaseFileStorage()
  5. struct DummyObject: JSON {
  6. let id: String
  7. let value: Decimal
  8. }
  9. override func setUpWithError() throws {
  10. // Put setup code here. This method is called before the invocation of each test method in the class.
  11. }
  12. override func tearDownWithError() throws {
  13. // Put teardown code here. This method is called after the invocation of each test method in the class.
  14. }
  15. func testStorage() throws {
  16. let uniqID = UUID().uuidString
  17. let object1 = DummyObject(id: uniqID, value: 1.0)
  18. let object2 = DummyObject(id: UUID().uuidString, value: 1.2)
  19. let object3 = DummyObject(id: UUID().uuidString, value: 1.4)
  20. let object4 = DummyObject(id: uniqID, value: 1.0)
  21. do {
  22. try fileStorage.save(object1, as: "tests/testStorage1.json")
  23. } catch {
  24. XCTFail(error.localizedDescription)
  25. }
  26. do {
  27. try fileStorage.save([object1, object2], as: "tests/testStorage2.json")
  28. } catch {
  29. XCTFail(error.localizedDescription)
  30. }
  31. do {
  32. let value = try fileStorage.retrieve("tests/testStorage1.json", as: DummyObject.self)
  33. XCTAssert(value.rawJSON == object1.rawJSON)
  34. } catch {
  35. XCTFail(error.localizedDescription)
  36. }
  37. do {
  38. let values = try fileStorage.retrieve("tests/testStorage2.json", as: [DummyObject].self)
  39. XCTAssert(values.rawJSON == [object1, object2].rawJSON)
  40. } catch {
  41. XCTFail(error.localizedDescription)
  42. }
  43. do {
  44. try fileStorage.append(object3, to: "tests/testStorage1.json")
  45. let values = try fileStorage.retrieve("tests/testStorage1.json", as: [DummyObject].self)
  46. XCTAssert(values.rawJSON == [object1, object3].rawJSON)
  47. } catch {
  48. XCTFail(error.localizedDescription)
  49. }
  50. do {
  51. try fileStorage.append([object2, object4], to: "tests/testStorage1.json")
  52. let values = try fileStorage.retrieve("tests/testStorage1.json", as: [DummyObject].self)
  53. XCTAssert(values.rawJSON == [object1, object3, object2, object4].rawJSON)
  54. } catch {
  55. XCTFail(error.localizedDescription)
  56. }
  57. do {
  58. try fileStorage.append([object3, object4], to: "tests/testStorage2.json", uniqBy: \.id)
  59. let values = try fileStorage.retrieve("tests/testStorage2.json", as: [DummyObject].self)
  60. XCTAssert(values.rawJSON == [object1, object2, object3].rawJSON)
  61. } catch {
  62. XCTFail(error.localizedDescription)
  63. }
  64. do {
  65. try fileStorage.remove("tests/testStorage1.json")
  66. try fileStorage.rename("tests/testStorage2.json", to: "tests/testStorage1.json")
  67. let values = try fileStorage.retrieve("tests/testStorage1.json", as: [DummyObject].self)
  68. XCTAssert(values.rawJSON == [object1, object2, object3].rawJSON)
  69. } catch {
  70. XCTFail(error.localizedDescription)
  71. }
  72. }
  73. }