mirror of
git://jb55.com/damus
synced 2024-09-05 21:03:51 +00:00
125 lines
4.6 KiB
Swift
125 lines
4.6 KiB
Swift
//
|
|
// ProfileDatabaseTests.swift
|
|
// damusTests
|
|
//
|
|
// Created by Bryan Montz on 5/13/23.
|
|
//
|
|
|
|
import XCTest
|
|
@testable import damus
|
|
|
|
class ProfileDatabaseTests: XCTestCase {
|
|
|
|
static let cache_url = (FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first?.appendingPathComponent("test-profiles"))!
|
|
let database = ProfileDatabase(cache_url: ProfileDatabaseTests.cache_url)
|
|
|
|
override func tearDownWithError() throws {
|
|
// This method is called after the invocation of each test method in the class.
|
|
try database.remove_all_profiles()
|
|
}
|
|
|
|
var test_profile: Profile {
|
|
Profile(name: "test-name",
|
|
display_name: "test-display-name",
|
|
about: "test-about",
|
|
picture: "test-picture",
|
|
banner: "test-banner",
|
|
website: "test-website",
|
|
lud06: "test-lud06",
|
|
lud16: "test-lud16",
|
|
nip05: "test-nip05",
|
|
damus_donation: 100)
|
|
}
|
|
|
|
func testStoreAndRetrieveProfile() async throws {
|
|
let id = "test-id"
|
|
|
|
let profile = test_profile
|
|
|
|
// make sure it's not there yet
|
|
XCTAssertNil(database.get(id: id))
|
|
|
|
// store the profile
|
|
try await database.upsert(id: id, profile: profile, last_update: .now)
|
|
|
|
// read the profile out of the database
|
|
let retrievedProfile = try XCTUnwrap(database.get(id: id))
|
|
|
|
XCTAssertEqual(profile.name, retrievedProfile.name)
|
|
XCTAssertEqual(profile.display_name, retrievedProfile.display_name)
|
|
XCTAssertEqual(profile.about, retrievedProfile.about)
|
|
XCTAssertEqual(profile.picture, retrievedProfile.picture)
|
|
XCTAssertEqual(profile.banner, retrievedProfile.banner)
|
|
XCTAssertEqual(profile.website, retrievedProfile.website)
|
|
XCTAssertEqual(profile.lud06, retrievedProfile.lud06)
|
|
XCTAssertEqual(profile.lud16, retrievedProfile.lud16)
|
|
XCTAssertEqual(profile.nip05, retrievedProfile.nip05)
|
|
XCTAssertEqual(profile.damus_donation, retrievedProfile.damus_donation)
|
|
}
|
|
|
|
func testRejectOutdatedProfile() async throws {
|
|
let id = "test-id"
|
|
|
|
// store a profile
|
|
let profile = test_profile
|
|
let profile_last_updated = Date.now
|
|
try await database.upsert(id: id, profile: profile, last_update: profile_last_updated)
|
|
|
|
// try to store a profile with the same id but the last_update date is older than the previously stored profile
|
|
let outdatedProfile = test_profile
|
|
let outdated_last_updated = profile_last_updated.addingTimeInterval(-60)
|
|
|
|
do {
|
|
try await database.upsert(id: id, profile: outdatedProfile, last_update: outdated_last_updated)
|
|
XCTFail("expected to throw error")
|
|
} catch let error as ProfileDatabaseError {
|
|
XCTAssertEqual(error, ProfileDatabaseError.outdated_input)
|
|
} catch {
|
|
XCTFail("not the expected error")
|
|
}
|
|
}
|
|
|
|
func testUpdateExistingProfile() async throws {
|
|
let id = "test-id"
|
|
|
|
// store a profile
|
|
let profile = test_profile
|
|
let profile_last_update = Date.now
|
|
try await database.upsert(id: id, profile: profile, last_update: profile_last_update)
|
|
|
|
// update the same profile
|
|
let updated_profile = test_profile
|
|
updated_profile.nip05 = "updated-nip05"
|
|
let updated_profile_last_update = profile_last_update.addingTimeInterval(60)
|
|
try await database.upsert(id: id, profile: updated_profile, last_update: updated_profile_last_update)
|
|
|
|
// retrieve the profile and make sure it was updated
|
|
let retrieved_profile = database.get(id: id)
|
|
XCTAssertEqual(retrieved_profile?.nip05, "updated-nip05")
|
|
}
|
|
|
|
func testStoreMultipleAndRemoveAllProfiles() async throws {
|
|
XCTAssertEqual(database.count, 0)
|
|
|
|
// store a profile
|
|
let id = "test-id"
|
|
let profile = test_profile
|
|
let profile_last_update = Date.now
|
|
try await database.upsert(id: id, profile: profile, last_update: profile_last_update)
|
|
|
|
XCTAssertEqual(database.count, 1)
|
|
|
|
// store another profile
|
|
let id2 = "test-id-2"
|
|
let profile2 = test_profile
|
|
let profile_last_update2 = Date.now
|
|
try await database.upsert(id: id2, profile: profile2, last_update: profile_last_update2)
|
|
|
|
XCTAssertEqual(database.count, 2)
|
|
|
|
try database.remove_all_profiles()
|
|
|
|
XCTAssertEqual(database.count, 0)
|
|
}
|
|
}
|