This commit is contained in:
2026-03-30 11:26:33 -04:00
parent 533dc1ba14
commit 1fe72401f0
1655 changed files with 531 additions and 45407 deletions

View File

@@ -0,0 +1,106 @@
package com.rssuper.services
import org.junit.Assert.assertTrue
import org.junit.Test
class FeedFetcherIntegrationTest {
@Test
fun testFetchRealFeed() {
val feedFetcher = FeedFetcher(timeoutMs = 15000)
val result = feedFetcher.fetch("https://example.com/feed.xml")
assertTrue(result.isSuccess() || result.isFailure())
}
@Test
fun testFetchAndParseRealFeed() {
val feedFetcher = FeedFetcher(timeoutMs = 15000)
val result = feedFetcher.fetchAndParse("https://example.com/feed.xml")
assertTrue(result.isSuccess() || result.isFailure())
}
@Test
fun testFetchWithHTTPAuthCredentials() {
val feedFetcher = FeedFetcher(timeoutMs = 15000)
val auth = HTTPAuthCredentials("testuser", "testpass")
val credentials = auth.toCredentials()
assertTrue(credentials.startsWith("Basic "))
}
@Test
fun testFetchWithCacheControl() {
val feedFetcher = FeedFetcher(timeoutMs = 15000)
val result = feedFetcher.fetch("https://example.com/feed.xml")
assertTrue(result.isSuccess() || result.isFailure())
}
@Test
fun testFetchPerformance() {
val feedFetcher = FeedFetcher(timeoutMs = 15000)
val startTime = System.currentTimeMillis()
val result = feedFetcher.fetch("https://example.com/feed.xml")
val duration = System.currentTimeMillis() - startTime
assertTrue(duration < 20000 || result.isFailure())
}
@Test
fun testFetchWithIfNoneMatch() {
val feedFetcher = FeedFetcher(timeoutMs = 15000)
val etag = "test-etag-value"
val result = feedFetcher.fetch("https://example.com/feed.xml", ifNoneMatch = etag)
assertTrue(result.isSuccess() || result.isFailure())
}
@Test
fun testFetchWithIfModifiedSince() {
val feedFetcher = FeedFetcher(timeoutMs = 15000)
val lastModified = "Mon, 01 Jan 2024 00:00:00 GMT"
val result = feedFetcher.fetch("https://example.com/feed.xml", ifModifiedSince = lastModified)
assertTrue(result.isSuccess() || result.isFailure())
}
@Test
fun testFetchMultipleFeeds() {
val feedFetcher = FeedFetcher(timeoutMs = 15000)
val urls = listOf(
"https://example.com/feed1.xml",
"https://example.com/feed2.xml"
)
for (url in urls) {
val result = feedFetcher.fetch(url)
assertTrue(result.isSuccess() || result.isFailure())
}
}
@Test
fun testFetchWithDifferentTimeouts() {
val shortTimeoutFetcher = FeedFetcher(timeoutMs = 1000)
val longTimeoutFetcher = FeedFetcher(timeoutMs = 30000)
val shortClientField = FeedFetcher::class.java.getDeclaredField("client")
shortClientField.isAccessible = true
val shortClient = shortClientField.get(shortTimeoutFetcher) as okhttp3.OkHttpClient
val longClientField = FeedFetcher::class.java.getDeclaredField("client")
longClientField.isAccessible = true
val longClient = longClientField.get(longTimeoutFetcher) as okhttp3.OkHttpClient
assertTrue(shortClient.connectTimeoutMillis < longClient.connectTimeoutMillis)
}
}

View File

@@ -0,0 +1,57 @@
package com.rssuper.services
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Test
class FeedFetcherTest {
@Test
fun testOkHttpConfiguration() {
val feedFetcher = FeedFetcher(timeoutMs = 5000)
val clientField = FeedFetcher::class.java.getDeclaredField("client")
clientField.isAccessible = true
val okHttpClient = clientField.get(feedFetcher) as okhttp3.OkHttpClient
assertEquals(5000, okHttpClient.connectTimeoutMillis)
assertEquals(5000, okHttpClient.readTimeoutMillis)
assertEquals(5000, okHttpClient.writeTimeoutMillis)
assertNotNull(okHttpClient.eventListenerFactory)
}
@Test
fun testFetchWithHTTPAuth() {
val auth = HTTPAuthCredentials("user", "pass")
val credentials = auth.toCredentials()
assertNotNull(credentials)
assertTrue(credentials.startsWith("Basic "))
}
@Test
fun testFetchWithETag() {
val feedFetcher = FeedFetcher(timeoutMs = 15000)
val etag = "test-etag-123"
val result = feedFetcher.fetch("https://example.com/feed.xml", ifNoneMatch = etag)
assertTrue(result.isSuccess() || result.isFailure())
}
@Test
fun testFetchWithLastModified() {
val feedFetcher = FeedFetcher(timeoutMs = 15000)
val lastModified = "Mon, 01 Jan 2024 00:00:00 GMT"
val result = feedFetcher.fetch("https://example.com/feed.xml", ifModifiedSince = lastModified)
assertTrue(result.isSuccess() || result.isFailure())
}
@Test
fun testFetchRetrySuccess() {
val feedFetcher = FeedFetcher(timeoutMs = 15000, maxRetries = 3)
val result = feedFetcher.fetch("https://example.com/feed.xml")
assertTrue(result.isSuccess() || result.isFailure())
}
}

View File

@@ -0,0 +1,79 @@
package com.rssuper.services
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Test
class FetchResultTest {
@Test
fun testFetchResultCreation() {
val result = FetchResult(
feedXml = "<rss>test</rss>",
url = "https://example.com/feed.xml",
cacheControl = null,
isCached = false
)
assertEquals("<rss>test</rss>", result.feedXml)
assertEquals("https://example.com/feed.xml", result.url)
assertEquals(false, result.isCached)
assertEquals(null, result.cacheControl)
}
@Test
fun testFetchResultWithETag() {
val result = FetchResult(
feedXml = "<rss>test</rss>",
url = "https://example.com/feed.xml",
cacheControl = null,
isCached = false,
etag = "test-etag-123"
)
assertEquals("test-etag-123", result.etag)
}
@Test
fun testFetchResultWithLastModified() {
val result = FetchResult(
feedXml = "<rss>test</rss>",
url = "https://example.com/feed.xml",
cacheControl = null,
isCached = false,
lastModified = "Mon, 01 Jan 2024 00:00:00 GMT"
)
assertEquals("Mon, 01 Jan 2024 00:00:00 GMT", result.lastModified)
}
@Test
fun testFetchResultIsCached() {
val result = FetchResult(
feedXml = "<rss>test</rss>",
url = "https://example.com/feed.xml",
cacheControl = null,
isCached = true
)
assertTrue(result.isCached)
}
@Test
fun testFetchResultWithCacheControl() {
val cacheControl = okhttp3.CacheControl.Builder()
.noCache()
.build()
val result = FetchResult(
feedXml = "<rss>test</rss>",
url = "https://example.com/feed.xml",
cacheControl = cacheControl,
isCached = false
)
assertNotNull(result.cacheControl)
assertTrue(result.cacheControl!!.noCache)
}
}

View File

@@ -0,0 +1,53 @@
package com.rssuper.services
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Test
class HTTPAuthCredentialsTest {
@Test
fun testBasicAuthCredentials() {
val auth = HTTPAuthCredentials("username", "password")
val credentials = auth.toCredentials()
assertNotNull(credentials)
assertTrue(credentials.startsWith("Basic "))
}
@Test
fun testBasicAuthCredentialsWithSpecialChars() {
val auth = HTTPAuthCredentials("user@domain", "pass!@#")
val credentials = auth.toCredentials()
assertNotNull(credentials)
assertTrue(credentials.startsWith("Basic "))
}
@Test
fun testUsernameAndPassword() {
val auth = HTTPAuthCredentials("testuser", "testpass")
assertEquals("testuser", auth.username)
assertEquals("testpass", auth.password)
}
@Test
fun testEmptyUsername() {
val auth = HTTPAuthCredentials("", "password")
val credentials = auth.toCredentials()
assertNotNull(credentials)
assertTrue(credentials.startsWith("Basic "))
}
@Test
fun testEmptyPassword() {
val auth = HTTPAuthCredentials("username", "")
val credentials = auth.toCredentials()
assertNotNull(credentials)
assertTrue(credentials.startsWith("Basic "))
}
}