Skip to content

Commit 63dcb00

Browse files
committed
Failing test for multiple mutations to file storage.
1 parent 3879d2c commit 63dcb00

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

Tests/ComposableArchitectureTests/FileStorageTests.swift

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,29 @@ final class FileStorageTests: XCTestCase {
471471
await fulfillment(of: [publisherExpectation], timeout: 1)
472472
}
473473
}
474+
475+
@MainActor
476+
func testMultipleMutations() async throws {
477+
try? FileManager.default.removeItem(at: .documentsDirectory.appending(component: "counts.json"))
478+
479+
try await withDependencies {
480+
$0.defaultFileStorage = .fileSystem
481+
} operation: {
482+
@Shared(.counts) var counts
483+
let delay = 0.5
484+
let time = 5.0
485+
let limit = Int(time / delay)
486+
while counts.count1 < limit {
487+
try await Task.sleep(for: .seconds(delay))
488+
$counts.withLock { $0.count1 += 1 }
489+
$counts.withLock { $0.count2 += 1 }
490+
$counts.withLock { $0.count3 += 1 }
491+
}
492+
XCTAssertEqual(counts.count1, limit)
493+
XCTAssertEqual(counts.count2, limit)
494+
XCTAssertEqual(counts.count3, limit)
495+
}
496+
}
474497
}
475498

476499
extension PersistenceReaderKey
@@ -513,3 +536,19 @@ extension [URL: Data] {
513536
return try JSONDecoder().decode([User].self, from: data)
514537
}
515538
}
539+
540+
private struct Counts: Equatable, Codable {
541+
var count1 = 0
542+
var count2 = 0
543+
var count3 = 0
544+
}
545+
546+
extension PersistenceReaderKey
547+
where Self == PersistenceKeyDefault<FileStorageKey<Counts>> {
548+
fileprivate static var counts: Self {
549+
PersistenceKeyDefault(
550+
.fileStorage(.documentsDirectory.appending(component: "counts.json")),
551+
Counts()
552+
)
553+
}
554+
}

0 commit comments

Comments
 (0)