drop native-route dir again
Some checks failed
CI - Multi-Platform Native / Build iOS (RSSuper) (push) Has been cancelled
CI - Multi-Platform Native / Build macOS (push) Has been cancelled
CI - Multi-Platform Native / Build Android (push) Has been cancelled
CI - Multi-Platform Native / Build Linux (push) Has been cancelled
CI - Multi-Platform Native / Integration Tests (push) Has been cancelled
CI - Multi-Platform Native / Build Summary (push) Has been cancelled

This commit is contained in:
2026-03-31 12:08:01 -04:00
parent 199c711dd4
commit 6a7efebdfc
64 changed files with 536 additions and 8642 deletions

View File

@@ -20,6 +20,7 @@ import org.junit.runner.RunWith
import java.io.File
import java.io.FileReader
import java.util.concurrent.TimeUnit
import kotlinx.coroutines.test.runTest
/**
* Integration tests for cross-platform feed functionality.
@@ -36,6 +37,36 @@ class FeedIntegrationTest {
private lateinit var feedParser: FeedParser
private lateinit var mockServer: MockWebServer
// Sample RSS feed content embedded directly
private val sampleRssContent = """
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Test RSS Feed</title>
<link>https://example.com</link>
<description>Test feed</description>
<item>
<title>Article 1</title>
<link>https://example.com/1</link>
<description>Content 1</description>
<pubDate>Mon, 31 Mar 2026 10:00:00 GMT</pubDate>
</item>
<item>
<title>Article 2</title>
<link>https://example.com/2</link>
<description>Content 2</description>
<pubDate>Mon, 31 Mar 2026 11:00:00 GMT</pubDate>
</item>
<item>
<title>Article 3</title>
<link>https://example.com/3</link>
<description>Content 3</description>
<pubDate>Mon, 31 Mar 2026 12:00:00 GMT</pubDate>
</item>
</channel>
</rss>
""".trimIndent()
@Before
fun setUp() {
context = ApplicationProvider.getApplicationContext()
@@ -60,8 +91,7 @@ class FeedIntegrationTest {
@Test
fun testFetchParseAndStoreFlow() = runBlockingTest {
// Setup mock server to return sample RSS feed
val rssContent = File("tests/fixtures/sample-rss.xml").readText()
mockServer.enqueue(MockResponse().setBody(rssContent).setResponseCode(200))
mockServer.enqueue(MockResponse().setBody(sampleRssContent).setResponseCode(200))
val feedUrl = mockServer.url("/feed.xml").toString()
@@ -72,15 +102,13 @@ class FeedIntegrationTest {
// 2. Parse the feed
val parseResult = feedParser.parse(fetchResult.getOrNull()!!.feedXml, feedUrl)
assertTrue("Parse should succeed", parseResult is ParseResult.Success)
assertNotNull("Parse result should have feeds", (parseResult as ParseResult.Success).feeds)
assertNotNull("Parse result should not be null", parseResult)
// 3. Store the subscription
val feed = (parseResult as ParseResult.Success).feeds!!.first()
database.subscriptionDao().insert(feed.subscription)
database.subscriptionDao().insert(parseResult.feed.subscription)
// 4. Store the feed items
feed.items.forEach { item ->
parseResult.feed.items.forEach { item ->
database.feedItemDao().insert(item)
}
@@ -89,7 +117,7 @@ class FeedIntegrationTest {
assertEquals("Should have 3 feed items", 3, storedItems.size)
val storedSubscription = database.subscriptionDao().getAll().first()
assertEquals("Subscription title should match", feed.subscription.title, storedSubscription.title)
assertEquals("Subscription title should match", parseResult.feed.subscription.title, storedSubscription.title)
}
@Test
@@ -135,9 +163,8 @@ class FeedIntegrationTest {
@Test
fun testBackgroundSyncIntegration() = runBlockingTest {
// Setup mock server with multiple feeds
val feed1Content = File("tests/fixtures/sample-rss.xml").readText()
mockServer.enqueue(MockResponse().setBody(feed1Content).setResponseCode(200))
mockServer.enqueue(MockResponse().setBody(feed1Content).setResponseCode(200))
mockServer.enqueue(MockResponse().setBody(sampleRssContent).setResponseCode(200))
mockServer.enqueue(MockResponse().setBody(sampleRssContent).setResponseCode(200))
val feed1Url = mockServer.url("/feed1.xml").toString()
val feed2Url = mockServer.url("/feed2.xml").toString()
@@ -302,9 +329,9 @@ class FeedIntegrationTest {
val fetchResult = feedFetcher.fetch(feedUrl)
assertTrue("Fetch should succeed", fetchResult.isSuccess())
val parseResult = feedParser.parse(fetchResult.getOrNull()!!.feedXml, feedUrl)
// Parser should handle invalid XML gracefully
assertTrue("Parse should handle error", parseResult is ParseResult.Failure)
assertThrows<Exception> {
feedParser.parse(fetchResult.getOrNull()!!.feedXml, feedUrl)
}
}
@Test
@@ -383,6 +410,6 @@ class FeedIntegrationTest {
}
private suspend fun <T> runBlockingTest(block: suspend () -> T): T {
return block()
return kotlinx.coroutines.test.runTest { block() }
}
}