Add more tests

This commit is contained in:
Thomas Ricouard 2023-12-30 15:40:04 +01:00
parent fe66acbd39
commit 781121d1d4
5 changed files with 43 additions and 28 deletions

View file

@ -13,6 +13,13 @@ public struct List: Codable, Identifiable, Equatable, Hashable {
case followed, list, none case followed, list, none
} }
public init(id: String, title: String, repliesPolicy: RepliesPolicy? = nil, exclusive: Bool? = nil) {
self.id = id
self.title = title
self.repliesPolicy = repliesPolicy
self.exclusive = exclusive
}
} }
extension List: Sendable {} extension List: Sendable {}

View file

@ -23,11 +23,6 @@ struct TimelineQuickAccessPills: View {
} }
.scrollClipDisabled() .scrollClipDisabled()
.scrollIndicators(.never) .scrollIndicators(.never)
.listRowInsets(EdgeInsets(top: 8, leading: .layoutPadding, bottom: 8, trailing: .layoutPadding))
#if !os(visionOS)
.listRowBackground(theme.primaryBackgroundColor)
#endif
.listRowSeparator(.hidden)
} }
@ViewBuilder @ViewBuilder

View file

@ -41,7 +41,7 @@ import SwiftUI
} }
} }
private var timelineTask: Task<Void, Never>? private(set) var timelineTask: Task<Void, Never>?
var tag: Tag? var tag: Tag?
@ -133,8 +133,9 @@ import SwiftUI
} else if let event = event as? StreamEventStatusUpdate { } else if let event = event as? StreamEventStatusUpdate {
if let originalIndex = await datasource.indexOf(statusId: event.status.id) { if let originalIndex = await datasource.indexOf(statusId: event.status.id) {
await datasource.replace(event.status, at: originalIndex) await datasource.replace(event.status, at: originalIndex)
let statuses = await datasource.get()
await cacheHome() await cacheHome()
statusesState = await .display(statuses: datasource.get(), nextPageState: .hasNextPage) statusesState = .display(statuses: statuses, nextPageState: .hasNextPage)
} }
} }
} }

View file

@ -0,0 +1,25 @@
@testable import Timeline
import XCTest
import Network
import Models
final class TimelineFilterTests: XCTestCase {
func testCodableHome() throws {
XCTAssertTrue(try testCodableOn(filter: .home))
XCTAssertTrue(try testCodableOn(filter: .local))
XCTAssertTrue(try testCodableOn(filter: .federated))
XCTAssertTrue(try testCodableOn(filter: .remoteLocal(server: "me.dm", filter: .local)))
XCTAssertTrue(try testCodableOn(filter: .tagGroup(title: "test", tags: ["test"])))
XCTAssertTrue(try testCodableOn(filter: .hashtag(tag: "test", accountId: nil)))
XCTAssertTrue(try testCodableOn(filter: .list(list: .init(id: "test", title: "test"))))
}
private func testCodableOn(filter: TimelineFilter) throws -> Bool {
let encoder = JSONEncoder()
let decoder = JSONDecoder()
let data = try encoder.encode(filter)
let newFilter = try decoder.decode(TimelineFilter.self, from: data)
return newFilter == filter
}
}

View file

@ -5,13 +5,18 @@ import Models
@MainActor @MainActor
final class TimelineViewModelTests: XCTestCase { final class TimelineViewModelTests: XCTestCase {
func testStreamEventInsertNewStatus() async throws { var subject = TimelineViewModel()
let subject = TimelineViewModel()
override func setUp() async throws {
subject = TimelineViewModel()
let client = Client(server: "localhost") let client = Client(server: "localhost")
subject.client = client subject.client = client
subject.timeline = .home subject.timeline = .home
subject.isTimelineVisible = true subject.isTimelineVisible = true
subject.timelineTask?.cancel()
}
func testStreamEventInsertNewStatus() async throws {
let isEmpty = await subject.datasource.isEmpty let isEmpty = await subject.datasource.isEmpty
XCTAssertTrue(isEmpty) XCTAssertTrue(isEmpty)
await subject.datasource.append(.placeholder()) await subject.datasource.append(.placeholder())
@ -23,12 +28,6 @@ final class TimelineViewModelTests: XCTestCase {
} }
func testStreamEventInsertDuplicateStatus() async throws { func testStreamEventInsertDuplicateStatus() async throws {
let subject = TimelineViewModel()
let client = Client(server: "localhost")
subject.client = client
subject.timeline = .home
subject.isTimelineVisible = true
let isEmpty = await subject.datasource.isEmpty let isEmpty = await subject.datasource.isEmpty
XCTAssertTrue(isEmpty) XCTAssertTrue(isEmpty)
let status = Status.placeholder() let status = Status.placeholder()
@ -41,12 +40,6 @@ final class TimelineViewModelTests: XCTestCase {
} }
func testStreamEventRemove() async throws { func testStreamEventRemove() async throws {
let subject = TimelineViewModel()
let client = Client(server: "localhost")
subject.client = client
subject.timeline = .home
subject.isTimelineVisible = true
let isEmpty = await subject.datasource.isEmpty let isEmpty = await subject.datasource.isEmpty
XCTAssertTrue(isEmpty) XCTAssertTrue(isEmpty)
let status = Status.placeholder() let status = Status.placeholder()
@ -59,12 +52,6 @@ final class TimelineViewModelTests: XCTestCase {
} }
func testStreamEventUpdateStatus() async throws { func testStreamEventUpdateStatus() async throws {
let subject = TimelineViewModel()
let client = Client(server: "localhost")
subject.client = client
subject.timeline = .home
subject.isTimelineVisible = true
var status = Status.placeholder() var status = Status.placeholder()
let isEmpty = await subject.datasource.isEmpty let isEmpty = await subject.datasource.isEmpty
XCTAssertTrue(isEmpty) XCTAssertTrue(isEmpty)