test: Add basic snapshot test coverage for EventView

This commit adds a basic snapshot test for EventView, and also adds some testing infrastructure to help with mocking NostrDB behavior.

Test
----

PASS

Device: iOS 17.0 Simulator
iOS: 17.0
Damus: This commit
Steps: Run `EventViewTests`
Results: Snapshot matches baseline reference added
This commit is contained in:
Daniel D’Aquino
2023-10-13 12:28:41 -07:00
committed by William Casarin
parent edb23e4e70
commit 3b76fcb743
5 changed files with 155 additions and 3 deletions

View File

@@ -0,0 +1,66 @@
//
// MockDamusState.swift
// damusTests
//
// Created by Daniel DAquino on 2023-10-13.
//
import Foundation
@testable import damus
// Generates a test damus state with configurable mock parameters
func generate_test_damus_state(
mock_profile_info: [Pubkey: Profile]?
) -> DamusState {
// Create a unique temporary directory
var tempDir: String!
do {
let fileManager = FileManager.default
let temp = fileManager.temporaryDirectory.appendingPathComponent(UUID().uuidString)
try fileManager.createDirectory(at: temp, withIntermediateDirectories: true, attributes: nil)
tempDir = temp.absoluteString
} catch {
tempDir = "."
}
print("opening \(tempDir!)")
let ndb = Ndb(path: tempDir)!
let our_pubkey = test_pubkey
let pool = RelayPool(ndb: ndb)
let settings = UserSettingsStore()
let profiles: Profiles = {
guard let mock_profile_info, let profiles: Profiles = MockProfiles(mocked_profiles: mock_profile_info, ndb: ndb) else {
return Profiles.init(ndb: ndb)
}
return profiles
}()
let damus = DamusState(pool: pool,
keypair: test_keypair,
likes: .init(our_pubkey: our_pubkey),
boosts: .init(our_pubkey: our_pubkey),
contacts: .init(our_pubkey: our_pubkey),
profiles: profiles,
dms: .init(our_pubkey: our_pubkey),
previews: .init(),
zaps: .init(our_pubkey: our_pubkey),
lnurls: .init(),
settings: settings,
relay_filters: .init(our_pubkey: our_pubkey),
relay_model_cache: .init(),
drafts: .init(),
events: .init(ndb: ndb),
bookmarks: .init(pubkey: our_pubkey),
postbox: .init(pool: pool),
bootstrap_relays: .init(),
replies: .init(our_pubkey: our_pubkey),
muted_threads: .init(keypair: test_keypair),
wallet: .init(settings: settings),
nav: .init(),
music: .init(onChange: {_ in }),
video: .init(),
ndb: ndb)
return damus
}