Compare commits
15 Commits
a2862a2587
...
v122102881
Author | SHA1 | Date | |
---|---|---|---|
|
8b0bbe71c9 | ||
8bfe14c019 | |||
208babbce3 | |||
02098a7aa9 | |||
d0a982f385 | |||
1d1c121aab | |||
fe12819163 | |||
|
023a30c008 | ||
c15bf44032 | |||
0bcd55bd4e | |||
ebef0b3511 | |||
713ceb05bf | |||
dc8381b661 | |||
b5b820c64b | |||
f7055626d9 |
@@ -15,9 +15,6 @@ import androidx.activity.result.contract.ActivityResultContracts
|
|||||||
import androidx.appcompat.app.ActionBarDrawerToggle
|
import androidx.appcompat.app.ActionBarDrawerToggle
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
|
||||||
import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO
|
|
||||||
import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
|
|
||||||
import androidx.appcompat.widget.SearchView
|
import androidx.appcompat.widget.SearchView
|
||||||
import androidx.core.view.doOnNextLayout
|
import androidx.core.view.doOnNextLayout
|
||||||
import androidx.drawerlayout.widget.DrawerLayout
|
import androidx.drawerlayout.widget.DrawerLayout
|
||||||
@@ -98,8 +95,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
private val repository : Repository by instance()
|
private val repository : Repository by instance()
|
||||||
private val appSettingsService : AppSettingsService by instance()
|
private val appSettingsService : AppSettingsService by instance()
|
||||||
|
|
||||||
data class DrawerData(val tags: List<SelfossModel.Tag>?, val sources: List<SelfossModel.Source>?)
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
binding = ActivityHomeBinding.inflate(layoutInflater)
|
binding = ActivityHomeBinding.inflate(layoutInflater)
|
||||||
@@ -352,28 +347,15 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
)
|
)
|
||||||
|
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
val drawerData = DrawerData(repository.getDBTags().map { it.toView() },
|
val tags = repository.getTags()
|
||||||
repository.getDBSources().map { it.toView() })
|
val sources = repository.getSources()
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
// TODO: All this logic should be handled by the repository, simplify and remove direct DB access
|
handleDrawerData(tags, sources)
|
||||||
// Only refresh if there is no data in the DB, or if the `UpdateSources` setting is enabled
|
|
||||||
if (drawerData.sources?.isEmpty() == true || appSettingsService.isUpdateSourcesEnabled()) {
|
|
||||||
drawerApiCalls(drawerData)
|
|
||||||
} else {
|
|
||||||
handleDrawerData(drawerData, loadedFromCache = true)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun drawerApiCalls(drawerData: DrawerData) {
|
private fun handleDrawerData(tags: List<SelfossModel.Tag>, sources: List<SelfossModel.Source>) {
|
||||||
CoroutineScope(Dispatchers.Main).launch {
|
|
||||||
val apiDrawerData = DrawerData(repository.getTags(), repository.getSources())
|
|
||||||
handleDrawerData(if (drawerData != apiDrawerData) apiDrawerData else drawerData)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun handleDrawerData(drawerData: DrawerData, loadedFromCache: Boolean = false) {
|
|
||||||
binding.mainDrawer.itemAdapter.clear()
|
binding.mainDrawer.itemAdapter.clear()
|
||||||
|
|
||||||
// Filters title with clear action
|
// Filters title with clear action
|
||||||
@@ -387,24 +369,24 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Hidden tags
|
// Hidden tags
|
||||||
if (drawerData.tags != null && drawerData.tags.isNotEmpty() && appSettingsService.getHiddenTags().isNotEmpty()) {
|
if (tags.isNotEmpty() && appSettingsService.getHiddenTags().isNotEmpty()) {
|
||||||
secondaryItem(
|
secondaryItem(
|
||||||
withDivider = true,
|
withDivider = true,
|
||||||
R.string.drawer_item_hidden_tags,
|
R.string.drawer_item_hidden_tags,
|
||||||
DRAWER_ID_HIDDEN_TAGS
|
DRAWER_ID_HIDDEN_TAGS
|
||||||
)
|
)
|
||||||
handleHiddenTags(drawerData.tags)
|
handleHiddenTags(tags)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tags
|
// Tags
|
||||||
secondaryItem(withDivider = true, R.string.drawer_item_tags, DRAWER_ID_TAGS)
|
secondaryItem(withDivider = true, R.string.drawer_item_tags, DRAWER_ID_TAGS)
|
||||||
if (drawerData.tags == null && !loadedFromCache) {
|
if (tags.isEmpty()) {
|
||||||
binding.mainDrawer.itemAdapter.add(
|
binding.mainDrawer.itemAdapter.add(
|
||||||
SecondaryDrawerItem()
|
SecondaryDrawerItem()
|
||||||
.apply { nameRes = R.string.drawer_error_loading_tags; isSelectable = false }
|
.apply { nameRes = R.string.drawer_error_loading_tags; isSelectable = false }
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
handleTags(drawerData.tags!!)
|
handleTags(tags)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sources
|
// Sources
|
||||||
@@ -412,15 +394,15 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
startActivity(Intent(v!!.context, SourcesActivity::class.java))
|
startActivity(Intent(v!!.context, SourcesActivity::class.java))
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
if (drawerData.sources == null && !loadedFromCache) {
|
if (sources.isEmpty()) {
|
||||||
binding.mainDrawer.itemAdapter.add(
|
binding.mainDrawer.itemAdapter.add(
|
||||||
SecondaryDrawerItem().apply {
|
SecondaryDrawerItem().apply {
|
||||||
nameRes = R.string.drawer_error_loading_tags
|
nameRes = R.string.drawer_error_loading_sources
|
||||||
isSelectable = false
|
isSelectable = false
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
handleSources(drawerData.sources!!)
|
handleSources(sources)
|
||||||
}
|
}
|
||||||
|
|
||||||
// About action
|
// About action
|
||||||
|
@@ -75,7 +75,6 @@ class MyApp : MultiDexApplication(), DIAware {
|
|||||||
).show()
|
).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleNotificationChannels() {
|
private fun handleNotificationChannels() {
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Thème sombre</string>
|
<string name="mode_dark">Thème sombre</string>
|
||||||
<string name="mode_system">Utiliser les paramètres système</string>
|
<string name="mode_system">Utiliser les paramètres système</string>
|
||||||
<string name="mode_light">Thème clair</string>
|
<string name="mode_light">Thème clair</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">深色模式</string>
|
<string name="mode_dark">深色模式</string>
|
||||||
<string name="mode_system">遵循系统设置</string>
|
<string name="mode_system">遵循系统设置</string>
|
||||||
<string name="mode_light">浅色模式</string>
|
<string name="mode_light">浅色模式</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -132,4 +132,5 @@
|
|||||||
<string name="mode_dark">Dark mode</string>
|
<string name="mode_dark">Dark mode</string>
|
||||||
<string name="mode_system">Follow the system setting</string>
|
<string name="mode_system">Follow the system setting</string>
|
||||||
<string name="mode_light">Light mode</string>
|
<string name="mode_light">Light mode</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -63,6 +63,7 @@
|
|||||||
<string name="card_height_off">Card height will be fixed</string>
|
<string name="card_height_off">Card height will be fixed</string>
|
||||||
<string name="source_code">Source code</string>
|
<string name="source_code">Source code</string>
|
||||||
<string name="drawer_error_loading_tags">Error loading tags…</string>
|
<string name="drawer_error_loading_tags">Error loading tags…</string>
|
||||||
|
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
||||||
<string name="drawer_item_filters">Filters</string>
|
<string name="drawer_item_filters">Filters</string>
|
||||||
<string name="drawer_action_clear">clear</string>
|
<string name="drawer_action_clear">clear</string>
|
||||||
<string name="drawer_item_tags">Tags</string>
|
<string name="drawer_item_tags">Tags</string>
|
||||||
@@ -109,7 +110,7 @@
|
|||||||
<string name="pref_switch_periodic_refresh_on">Articles will periodically be synced</string>
|
<string name="pref_switch_periodic_refresh_on">Articles will periodically be synced</string>
|
||||||
<string name="pref_periodic_refresh_minutes_title"><![CDATA[Sync interval ( >= 15 minutes)]]></string>
|
<string name="pref_periodic_refresh_minutes_title"><![CDATA[Sync interval ( >= 15 minutes)]]></string>
|
||||||
<string name="pref_switch_refresh_when_charging">Only refresh when phone is charging</string>
|
<string name="pref_switch_refresh_when_charging">Only refresh when phone is charging</string>
|
||||||
<string name="loading_notification_title">Loading ...</string>
|
<string name="loading_notification_title">Loading …</string>
|
||||||
<string name="loading_notification_text">Selfoss is syncing your articles</string>
|
<string name="loading_notification_text">Selfoss is syncing your articles</string>
|
||||||
<string name="notification_channel_sync">Sync notification</string>
|
<string name="notification_channel_sync">Sync notification</string>
|
||||||
<string name="new_items_channel_sync">New items notification</string>
|
<string name="new_items_channel_sync">New items notification</string>
|
||||||
|
@@ -42,6 +42,7 @@ class Repository(private val api: SelfossApi, private val appSettingsService: Ap
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
// TODO: Dispatchers.IO not available in KMM, an alternative solution should be found
|
// TODO: Dispatchers.IO not available in KMM, an alternative solution should be found
|
||||||
|
connectivityStatus.start()
|
||||||
runBlocking {
|
runBlocking {
|
||||||
updateApiVersion()
|
updateApiVersion()
|
||||||
dateUtils = DateUtils(appSettingsService)
|
dateUtils = DateUtils(appSettingsService)
|
||||||
@@ -65,12 +66,19 @@ class Repository(private val api: SelfossApi, private val appSettingsService: Ap
|
|||||||
} else {
|
} else {
|
||||||
if (appSettingsService.isItemCachingEnabled()) {
|
if (appSettingsService.isItemCachingEnabled()) {
|
||||||
fromDB = true
|
fromDB = true
|
||||||
|
var dbItems = getDBItems().filter {
|
||||||
|
displayedItems == ItemType.ALL ||
|
||||||
|
(it.unread && displayedItems == ItemType.UNREAD) ||
|
||||||
|
(it.starred && displayedItems == ItemType.STARRED)
|
||||||
|
}
|
||||||
|
if (tagFilter != null) {
|
||||||
|
dbItems = dbItems.filter { it.tags.split(',').contains(tagFilter!!.tag) }
|
||||||
|
}
|
||||||
|
if (sourceFilter != null) {
|
||||||
|
dbItems = dbItems.filter { it.sourcetitle == sourceFilter!!.title }
|
||||||
|
}
|
||||||
fetchedItems = SelfossModel.StatusAndData.succes(
|
fetchedItems = SelfossModel.StatusAndData.succes(
|
||||||
getDBItems().filter {
|
dbItems.map { it.toView() }
|
||||||
displayedItems == ItemType.ALL ||
|
|
||||||
(it.unread && displayedItems == ItemType.UNREAD) ||
|
|
||||||
(it.starred && displayedItems == ItemType.STARRED)
|
|
||||||
}.map { it.toView() }
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -410,11 +418,9 @@ class Repository(private val api: SelfossApi, private val appSettingsService: Ap
|
|||||||
private fun deleteDBAction(action: ACTION) =
|
private fun deleteDBAction(action: ACTION) =
|
||||||
db.actionsQueries.deleteAction(action.id)
|
db.actionsQueries.deleteAction(action.id)
|
||||||
|
|
||||||
// TODO: This function should be private
|
private fun getDBTags(): List<TAG> = db.tagsQueries.tags().executeAsList()
|
||||||
fun getDBTags(): List<TAG> = db.tagsQueries.tags().executeAsList()
|
|
||||||
|
|
||||||
// TODO: This function should be private
|
private fun getDBSources(): List<SOURCE> = db.sourcesQueries.sources().executeAsList()
|
||||||
fun getDBSources(): List<SOURCE> = db.sourcesQueries.sources().executeAsList()
|
|
||||||
|
|
||||||
private fun resetDBTagsWithData(tagEntities: List<SelfossModel.Tag>) {
|
private fun resetDBTagsWithData(tagEntities: List<SelfossModel.Tag>) {
|
||||||
db.tagsQueries.deleteAllTags()
|
db.tagsQueries.deleteAllTags()
|
||||||
|
@@ -65,6 +65,6 @@ fun SelfossModel.Item.toEntity(): ITEM =
|
|||||||
this.thumbnail,
|
this.thumbnail,
|
||||||
this.icon,
|
this.icon,
|
||||||
this.link,
|
this.link,
|
||||||
this.title.getHtmlDecoded(),
|
this.sourcetitle.getHtmlDecoded(),
|
||||||
this.tags.joinToString(",")
|
this.tags.joinToString(",")
|
||||||
)
|
)
|
@@ -42,6 +42,8 @@ class RepositoryTest() {
|
|||||||
every { db.tagsQueries.deleteAllTags() } returns Unit
|
every { db.tagsQueries.deleteAllTags() } returns Unit
|
||||||
every { db.tagsQueries.transaction(any(), any()) } returns Unit
|
every { db.tagsQueries.transaction(any(), any()) } returns Unit
|
||||||
every { db.tagsQueries.insertTag(any()) } returns Unit
|
every { db.tagsQueries.insertTag(any()) } returns Unit
|
||||||
|
|
||||||
|
every { connectivityStatus.start() } returns Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -171,6 +173,60 @@ class RepositoryTest() {
|
|||||||
verify(atLeast = 1) { db.itemsQueries.items().executeAsList()}
|
verify(atLeast = 1) { db.itemsQueries.items().executeAsList()}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `Get newer items without connectivity and tag filter`() {
|
||||||
|
val itemParameter1 = FakeItemParameters()
|
||||||
|
val itemParameter2 = FakeItemParameters()
|
||||||
|
val itemParameter3 = FakeItemParameters()
|
||||||
|
itemParameter2.tags = "Test, Stuff"
|
||||||
|
itemParameter2.id = "2"
|
||||||
|
itemParameter3.tags = "Other, Tag"
|
||||||
|
itemParameter3.id = "3"
|
||||||
|
coEvery { db.itemsQueries.items().executeAsList() } returns generateTestDBItems(itemParameter1) +
|
||||||
|
generateTestDBItems(itemParameter2) +
|
||||||
|
generateTestDBItems(itemParameter3)
|
||||||
|
|
||||||
|
every { connectivityStatus.isNetworkConnected } returns MutableStateFlow(false)
|
||||||
|
every { appSettingsService.isItemCachingEnabled() } returns true
|
||||||
|
|
||||||
|
val repository = Repository(api, appSettingsService, connectivityStatus, db)
|
||||||
|
repository.tagFilter = SelfossModel.Tag("Test", "red", 3)
|
||||||
|
runBlocking {
|
||||||
|
repository.getNewerItems()
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSame(repository.items.size, 1)
|
||||||
|
coVerify(exactly = 0) { api.getItems("unread", 0, null, null, null, null, any()) }
|
||||||
|
verify(atLeast = 1) { db.itemsQueries.items().executeAsList()}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `Get newer items without connectivity and source filter`() {
|
||||||
|
val itemParameter1 = FakeItemParameters()
|
||||||
|
val itemParameter2 = FakeItemParameters()
|
||||||
|
val itemParameter3 = FakeItemParameters()
|
||||||
|
itemParameter2.sourcetitle = "Test"
|
||||||
|
itemParameter2.id = "2"
|
||||||
|
itemParameter3.sourcetitle = "Other"
|
||||||
|
itemParameter3.id = "3"
|
||||||
|
coEvery { db.itemsQueries.items().executeAsList() } returns generateTestDBItems(itemParameter1) +
|
||||||
|
generateTestDBItems(itemParameter2) +
|
||||||
|
generateTestDBItems(itemParameter3)
|
||||||
|
|
||||||
|
every { connectivityStatus.isNetworkConnected } returns MutableStateFlow(false)
|
||||||
|
every { appSettingsService.isItemCachingEnabled() } returns true
|
||||||
|
|
||||||
|
val repository = Repository(api, appSettingsService, connectivityStatus, db)
|
||||||
|
repository.sourceFilter = SelfossModel.Source(1, "Test", listOf("tags"),"spouts\\rss\\fulltextrss", "", "b3aa8a664d08eb15d6ff1db2fa83e0d9.png")
|
||||||
|
runBlocking {
|
||||||
|
repository.getNewerItems()
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSame(repository.items.size, 1)
|
||||||
|
coVerify(exactly = 0) { api.getItems("unread", 0, null, null, null, null, any()) }
|
||||||
|
verify(atLeast = 1) { db.itemsQueries.items().executeAsList()}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `Get older items`() {
|
fun `Get older items`() {
|
||||||
coEvery { api.getItems(any(), any(), any(), any(), any(), any(), any()) } returns
|
coEvery { api.getItems(any(), any(), any(), any(), any(), any(), any()) } returns
|
||||||
@@ -996,6 +1052,6 @@ class FakeItemParameters() {
|
|||||||
val thumbnail = null
|
val thumbnail = null
|
||||||
val icon = "ba79e238383ce83c23a169929c8906ef.png"
|
val icon = "ba79e238383ce83c23a169929c8906ef.png"
|
||||||
val link = "https://ilblogdellasci.wordpress.com/2022/09/09/etica-della-ricerca-sotto-i-riflettori/"
|
val link = "https://ilblogdellasci.wordpress.com/2022/09/09/etica-della-ricerca-sotto-i-riflettori/"
|
||||||
val sourcetitle = "La Chimica e la Società"
|
var sourcetitle = "La Chimica e la Società"
|
||||||
val tags = "Chimica, Testing"
|
var tags = "Chimica, Testing"
|
||||||
}
|
}
|
Reference in New Issue
Block a user