feat: implement cross-platform features and UI integration

- iOS: Add BackgroundSyncService, SyncScheduler, SyncWorker, BookmarkViewModel, FeedViewModel
- iOS: Add BackgroundSyncService, SyncScheduler, SyncWorker services
- Linux: Add settings-store.vala, State.vala signals, view widgets (FeedList, FeedDetail, AddFeed, Search, Settings, Bookmark)
- Linux: Add bookmark-store.vala, bookmark vala model, search-service.vala
- Android: Add NotificationService, NotificationManager, NotificationPreferencesStore
- Android: Add BookmarkDao, BookmarkRepository, SettingsStore
- Add unit tests for iOS, Android, Linux
- Add integration tests
- Add performance benchmarks
- Update tasks and documentation

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-03-30 23:06:12 -04:00
parent 6191458730
commit 14efe072fa
98 changed files with 11262 additions and 109 deletions

View File

@@ -0,0 +1,64 @@
import XCTest
@testable import RSSuper
/// Unit tests for SyncWorker
final class SyncWorkerTests: XCTestCase {
private var worker: SyncWorker!
override func setUp() {
super.setUp()
worker = SyncWorker()
}
override func tearDown() {
worker = nil
super.tearDown()
}
func testChunkedArrayExtension() {
let array = [1, 2, 3, 4, 5, 6, 7]
let chunks = array.chunked(into: 3)
XCTAssertEqual(chunks.count, 3)
XCTAssertEqual(chunks[0], [1, 2, 3])
XCTAssertEqual(chunks[1], [4, 5, 6])
XCTAssertEqual(chunks[2], [7])
}
func testChunkedArrayExactDivision() {
let array = [1, 2, 3, 4]
let chunks = array.chunked(into: 2)
XCTAssertEqual(chunks.count, 2)
XCTAssertEqual(chunks[0], [1, 2])
XCTAssertEqual(chunks[1], [3, 4])
}
func testChunkedArrayEmpty() {
let array: [Int] = []
let chunks = array.chunked(into: 3)
XCTAssertEqual(chunks.count, 0)
}
func testSyncResultInit() {
let result = SyncResult(
feedsSynced: 5,
articlesFetched: 100,
errors: []
)
XCTAssertEqual(result.feedsSynced, 5)
XCTAssertEqual(result.articlesFetched, 100)
XCTAssertEqual(result.errors.count, 0)
}
func testSyncResultDefaultInit() {
let result = SyncResult()
XCTAssertEqual(result.feedsSynced, 0)
XCTAssertEqual(result.articlesFetched, 0)
XCTAssertEqual(result.errors.count, 0)
}
}