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
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:
@@ -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() }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user