| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- import Foundation
- import Testing
- @testable import Trio
- @Suite("File Storage Tests") struct FileStorageTests {
- let storage = BaseFileStorage()
- struct DummyObject: JSON, Equatable {
- let id: String
- let value: Decimal
- }
- @Test("Can save and retrieve object") func testSaveAndRetrieve() {
- // Given
- let dummy = DummyObject(id: "123", value: 78.2)
- // When
- storage.save(dummy, as: "dummy")
- let retrieved = storage.retrieve("dummy", as: DummyObject.self)
- // Then
- #expect(retrieved == dummy)
- }
- @Test("Can save and retrieve async") func testAsyncSaveAndRetrieve() async {
- // Given
- let dummy = DummyObject(id: "123", value: 78.2)
- // When
- await storage.saveAsync(dummy, as: "dummy_async")
- let retrieved = await storage.retrieveAsync("dummy_async", as: DummyObject.self)
- // Then
- #expect(retrieved == dummy)
- }
- @Test("Can append single value") func testAppendSingleValue() {
- // Given
- let dummy1 = DummyObject(id: "1", value: 10.0)
- let dummy2 = DummyObject(id: "2", value: 20.0)
- // When
- storage.save([dummy1], as: "dummies")
- storage.append(dummy2, to: "dummies")
- // Then
- let retrieved = storage.retrieve("dummies", as: [DummyObject].self)
- #expect(retrieved?.count == 2)
- #expect(retrieved?.contains(dummy1) == true)
- #expect(retrieved?.contains(dummy2) == true)
- }
- @Test("Can append multiple values") func testAppendMultipleValues() {
- // Given
- let dummy1 = DummyObject(id: "1", value: 10.0)
- let newDummies = [
- DummyObject(id: "2", value: 20.0),
- DummyObject(id: "3", value: 30.0)
- ]
- // When
- storage.save([dummy1], as: "dummies_multiple")
- storage.append(newDummies, to: "dummies_multiple")
- // Then
- let retrieved = storage.retrieve("dummies_multiple", as: [DummyObject].self)
- #expect(retrieved?.count == 3)
- }
- @Test("Can append unique values by key path") func testAppendUniqueByKeyPath() {
- // Given
- let dummy1 = DummyObject(id: "1", value: 10.0)
- let dummy2 = DummyObject(id: "1", value: 20.0) // Same id
- // When
- storage.save([dummy1], as: "unique_dummies")
- storage.append(dummy2, to: "unique_dummies", uniqBy: \.id)
- // Then
- let retrieved = storage.retrieve("unique_dummies", as: [DummyObject].self)
- #expect(retrieved?.count == 1, "Should not append duplicate id")
- }
- @Test("Can remove file") func testRemoveFile() {
- // Given
- let dummy = DummyObject(id: "123", value: 78.2)
- storage.save(dummy, as: "to_delete")
- // When
- storage.remove("to_delete")
- // Then
- let retrieved = storage.retrieve("to_delete", as: DummyObject.self)
- #expect(retrieved == nil)
- }
- @Test("Can rename file") func testRenameFile() {
- // Given
- let dummy = DummyObject(id: "123", value: 78.2)
- storage.save(dummy, as: "old_name")
- // When
- storage.rename("old_name", to: "new_name")
- // Then
- let oldRetrieved = storage.retrieve("old_name", as: DummyObject.self)
- let newRetrieved = storage.retrieve("new_name", as: DummyObject.self)
- #expect(oldRetrieved == nil)
- #expect(newRetrieved == dummy)
- }
- @Test("Can execute transaction") func testTransaction() {
- // Given
- let dummy = DummyObject(id: "123", value: 78.2)
- // When
- storage.transaction { storage in
- storage.save(dummy, as: "transaction_test")
- }
- // Then
- let retrieved = storage.retrieve("transaction_test", as: DummyObject.self)
- #expect(retrieved == dummy)
- }
- @Test("Can parse mmol/L settings to mg/dL") func testParseSettingsToMgdL() {
- // Given
- var preferences = Preferences()
- preferences.threshold_setting = 5.5 // mmol/L
- storage.save(preferences, as: OpenAPS.Settings.preferences)
- // When
- let wasParsed = storage.parseOnFileSettingsToMgdL()
- // Then
- #expect(wasParsed == true)
- let parsed = storage.retrieve(OpenAPS.Settings.preferences, as: Preferences.self)
- #expect(parsed?.threshold_setting == 100) // default mg/dL value
- }
- }
|