mirror of https://github.com/readrops/Readrops.git
Add more tests for sync result notification content
This commit is contained in:
parent
c949ed58f5
commit
896a626eb6
|
@ -34,6 +34,12 @@ class SyncResultAnalyserTest {
|
||||||
private val account2 = Account().apply {
|
private val account2 = Account().apply {
|
||||||
accountName = "test account 2"
|
accountName = "test account 2"
|
||||||
accountType = AccountType.NEXTCLOUD_NEWS
|
accountType = AccountType.NEXTCLOUD_NEWS
|
||||||
|
isNotificationsEnabled = false
|
||||||
|
}
|
||||||
|
|
||||||
|
private val account3 = Account().apply {
|
||||||
|
accountName = "test account 3"
|
||||||
|
accountType = AccountType.LOCAL
|
||||||
isNotificationsEnabled = true
|
isNotificationsEnabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,12 +54,16 @@ class SyncResultAnalyserTest {
|
||||||
var account2Id = 0
|
var account2Id = 0
|
||||||
database.accountDao().insert(account2).subscribe { id -> account2Id = id.toInt() }
|
database.accountDao().insert(account2).subscribe { id -> account2Id = id.toInt() }
|
||||||
|
|
||||||
for (i in 0..3) {
|
var account3Id = 0
|
||||||
|
database.accountDao().insert(account3).subscribe { id -> account3Id = id.toInt() }
|
||||||
|
|
||||||
|
val accountIds = listOf(account1Id, account2Id, account3Id)
|
||||||
|
for (i in 0..2) {
|
||||||
val feed = Feed().apply {
|
val feed = Feed().apply {
|
||||||
name = "feed ${i + 1}"
|
name = "feed ${i + 1}"
|
||||||
iconUrl = "https://i0.wp.com/mrmondialisation.org/wp-content/uploads/2017/05/ico_final.gif"
|
iconUrl = "https://i0.wp.com/mrmondialisation.org/wp-content/uploads/2017/05/ico_final.gif"
|
||||||
this.accountId = if (i % 2 == 0) account1Id else account2Id
|
this.accountId = accountIds.find { it == (i + 1) }!!
|
||||||
isNotificationEnabled = true
|
isNotificationEnabled = i % 2 == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
database.feedDao().insert(feed).subscribe()
|
database.feedDao().insert(feed).subscribe()
|
||||||
|
@ -108,7 +118,7 @@ class SyncResultAnalyserTest {
|
||||||
@Test
|
@Test
|
||||||
fun testMultipleFeeds() {
|
fun testMultipleFeeds() {
|
||||||
val item = Item().apply { feedId = 1 }
|
val item = Item().apply { feedId = 1 }
|
||||||
val item2 = Item().apply { feedId = 2 }
|
val item2 = Item().apply { feedId = 3 }
|
||||||
|
|
||||||
val syncResult = SyncResult().apply { items = listOf(item, item2) }
|
val syncResult = SyncResult().apply { items = listOf(item, item2) }
|
||||||
val notifContent = SyncResultAnalyser(context, mapOf(Pair(account1, syncResult)), database).getSyncNotifContent()
|
val notifContent = SyncResultAnalyser(context, mapOf(Pair(account1, syncResult)), database).getSyncNotifContent()
|
||||||
|
@ -121,14 +131,14 @@ class SyncResultAnalyserTest {
|
||||||
@Test
|
@Test
|
||||||
fun testMultipleAccounts() {
|
fun testMultipleAccounts() {
|
||||||
val item = Item().apply { feedId = 1 }
|
val item = Item().apply { feedId = 1 }
|
||||||
val item2 = Item().apply { feedId = 2 }
|
val item2 = Item().apply { feedId = 3 }
|
||||||
|
|
||||||
val syncResult = SyncResult().apply { items = listOf(item, item2) }
|
val syncResult = SyncResult().apply { items = listOf(item, item2) }
|
||||||
val syncResult2 = SyncResult().apply { items = listOf(item, item2) }
|
val syncResult2 = SyncResult().apply { items = listOf(item, item2) }
|
||||||
|
|
||||||
val syncResults = mutableMapOf<Account, SyncResult>().apply {
|
val syncResults = mutableMapOf<Account, SyncResult>().apply {
|
||||||
put(account1, syncResult)
|
put(account1, syncResult)
|
||||||
put(account2, syncResult2)
|
put(account3, syncResult2)
|
||||||
}
|
}
|
||||||
|
|
||||||
val notifContent = SyncResultAnalyser(context, syncResults, database).getSyncNotifContent()
|
val notifContent = SyncResultAnalyser(context, syncResults, database).getSyncNotifContent()
|
||||||
|
@ -136,4 +146,155 @@ class SyncResultAnalyserTest {
|
||||||
assertEquals("Notifications", notifContent.title)
|
assertEquals("Notifications", notifContent.title)
|
||||||
assertEquals(context.getString(R.string.new_items, 4), notifContent.content)
|
assertEquals(context.getString(R.string.new_items, 4), notifContent.content)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testAccountNotificationsDisabled() {
|
||||||
|
val item1 = Item().apply {
|
||||||
|
title = "testAccountNotificationsDisabled"
|
||||||
|
feedId = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
val item2 = Item().apply {
|
||||||
|
title = "testAccountNotificationsDisabled2"
|
||||||
|
feedId = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
val syncResult = SyncResult().apply { items = listOf(item1, item2) }
|
||||||
|
val notifContent = SyncResultAnalyser(context, mapOf(Pair(account2, syncResult)), database).getSyncNotifContent()
|
||||||
|
|
||||||
|
assert(notifContent.title == null)
|
||||||
|
assert(notifContent.content == null)
|
||||||
|
assert(notifContent.largeIcon == null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testFeedNotificationsDisabled() {
|
||||||
|
val item1 = Item().apply {
|
||||||
|
title = "testAccountNotificationsDisabled"
|
||||||
|
feedId = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
val item2 = Item().apply {
|
||||||
|
title = "testAccountNotificationsDisabled2"
|
||||||
|
feedId = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
val syncResult = SyncResult().apply { items = listOf(item1, item2) }
|
||||||
|
val notifContent = SyncResultAnalyser(context, mapOf(Pair(account1, syncResult)), database).getSyncNotifContent()
|
||||||
|
|
||||||
|
assert(notifContent.title == null)
|
||||||
|
assert(notifContent.content == null)
|
||||||
|
assert(notifContent.largeIcon == null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testTwoAccountsWithOneAccountNotificationsEnabled() {
|
||||||
|
val item1 = Item().apply {
|
||||||
|
title = "testTwoAccountsWithOneAccountNotificationsEnabled"
|
||||||
|
feedId = 1
|
||||||
|
remoteId = "remoteId 1"
|
||||||
|
pubDate = LocalDateTime.now()
|
||||||
|
}
|
||||||
|
|
||||||
|
val item2 = Item().apply {
|
||||||
|
title = "testTwoAccountsWithOneAccountNotificationsEnabled2"
|
||||||
|
feedId = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
val item3 = Item().apply {
|
||||||
|
title = "testTwoAccountsWithOneAccountNotificationsEnabled3"
|
||||||
|
feedId = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
database.itemDao().insert(item1).subscribe()
|
||||||
|
|
||||||
|
val syncResult1 = SyncResult().apply { items = listOf(item1) }
|
||||||
|
val syncResult2 = SyncResult().apply { items = listOf(item2, item3) }
|
||||||
|
|
||||||
|
val syncResults = mutableMapOf<Account, SyncResult>().apply {
|
||||||
|
put(account1, syncResult1)
|
||||||
|
put(account2, syncResult2)
|
||||||
|
}
|
||||||
|
|
||||||
|
val notifContent = SyncResultAnalyser(context, syncResults, database).getSyncNotifContent()
|
||||||
|
|
||||||
|
assertEquals("testTwoAccountsWithOneAccountNotificationsEnabled", notifContent.content)
|
||||||
|
assertEquals("feed 1", notifContent.title)
|
||||||
|
assertTrue(notifContent.largeIcon != null)
|
||||||
|
assertTrue(notifContent.item != null)
|
||||||
|
|
||||||
|
database.itemDao().delete(item1).subscribe()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testTwoAccountsWithOneFeedNotificationEnabled() {
|
||||||
|
val item1 = Item().apply {
|
||||||
|
title = "testTwoAccountsWithOneAccountNotificationsEnabled"
|
||||||
|
feedId = 1
|
||||||
|
remoteId = "remoteId 1"
|
||||||
|
pubDate = LocalDateTime.now()
|
||||||
|
}
|
||||||
|
|
||||||
|
val item2 = Item().apply {
|
||||||
|
title = "testTwoAccountsWithOneAccountNotificationsEnabled2"
|
||||||
|
feedId = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
val item3 = Item().apply {
|
||||||
|
title = "testTwoAccountsWithOneAccountNotificationsEnabled3"
|
||||||
|
feedId = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
database.itemDao().insert(item1).subscribe()
|
||||||
|
|
||||||
|
val syncResult1 = SyncResult().apply { items = listOf(item1) }
|
||||||
|
val syncResult2 = SyncResult().apply { items = listOf(item2, item3) }
|
||||||
|
|
||||||
|
val syncResults = mutableMapOf<Account, SyncResult>().apply {
|
||||||
|
put(account1, syncResult1)
|
||||||
|
put(account2, syncResult2)
|
||||||
|
}
|
||||||
|
|
||||||
|
val notifContent = SyncResultAnalyser(context, syncResults, database).getSyncNotifContent()
|
||||||
|
|
||||||
|
assertEquals("testTwoAccountsWithOneAccountNotificationsEnabled", notifContent.content)
|
||||||
|
assertEquals("feed 1", notifContent.title)
|
||||||
|
assertTrue(notifContent.largeIcon != null)
|
||||||
|
assertTrue(notifContent.item != null)
|
||||||
|
|
||||||
|
database.itemDao().delete(item1).subscribe()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testOneAccountTwoFeedsWithOneFeedNotificationEnabled() {
|
||||||
|
val item1 = Item().apply {
|
||||||
|
title = "testTwoAccountsWithOneAccountNotificationsEnabled"
|
||||||
|
feedId = 1
|
||||||
|
remoteId = "remoteId 1"
|
||||||
|
pubDate = LocalDateTime.now()
|
||||||
|
}
|
||||||
|
|
||||||
|
val item2 = Item().apply {
|
||||||
|
title = "testTwoAccountsWithOneAccountNotificationsEnabled2"
|
||||||
|
feedId = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
val item3 = Item().apply {
|
||||||
|
title = "testTwoAccountsWithOneAccountNotificationsEnabled3"
|
||||||
|
feedId = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
database.itemDao().insert(item1).subscribe()
|
||||||
|
|
||||||
|
val syncResult = SyncResult().apply { items = listOf(item1, item2, item3) }
|
||||||
|
val notifContent = SyncResultAnalyser(context, mapOf(Pair(account1, syncResult)), database).getSyncNotifContent()
|
||||||
|
|
||||||
|
assertEquals("testTwoAccountsWithOneAccountNotificationsEnabled", notifContent.content)
|
||||||
|
assertEquals("feed 1", notifContent.title)
|
||||||
|
assertTrue(notifContent.largeIcon != null)
|
||||||
|
assertTrue(notifContent.item != null)
|
||||||
|
|
||||||
|
database.itemDao().delete(item1).subscribe()
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -37,17 +37,20 @@ class SyncResultAnalyser(val context: Context, private val syncResults: Map<Acco
|
||||||
val feedsIdsForNewItems = getFeedsIdsForNewItems(syncResult)
|
val feedsIdsForNewItems = getFeedsIdsForNewItems(syncResult)
|
||||||
|
|
||||||
if (account.isNotificationsEnabled) {
|
if (account.isNotificationsEnabled) {
|
||||||
|
val feeds = database.feedDao().selectFromIdList(feedsIdsForNewItems)
|
||||||
|
|
||||||
|
val items = syncResult.items.filter { isFeedNotificationEnabledForItem(feeds, it) }
|
||||||
|
val itemCount = items.size
|
||||||
|
|
||||||
// new items from several feeds from one account
|
// new items from several feeds from one account
|
||||||
if (feedsIdsForNewItems.size > 1) {
|
if (feedsIdsForNewItems.size > 1 && itemCount > 1) {
|
||||||
val feeds = database.feedDao().selectFromIdList(feedsIdsForNewItems)
|
|
||||||
|
|
||||||
val itemCount = syncResult.items.filter { isFeedNotificationEnabledForItem(feeds, it) }.size
|
|
||||||
|
|
||||||
notifContent.title = account.accountName
|
notifContent.title = account.accountName
|
||||||
notifContent.content = context.getString(R.string.new_items, itemCount.toString())
|
notifContent.content = context.getString(R.string.new_items, itemCount.toString())
|
||||||
notifContent.largeIcon = Utils.getBitmapFromDrawable(ContextCompat.getDrawable(context, account.accountType.iconRes))
|
notifContent.largeIcon = Utils.getBitmapFromDrawable(ContextCompat.getDrawable(context, account.accountType.iconRes))
|
||||||
} else if (feedsIdsForNewItems.size == 1) // new items from only one feed from one account
|
} else if (feedsIdsForNewItems.size == 1) // new items from only one feed from one account
|
||||||
oneFeedCase(feedsIdsForNewItems.first(), syncResult)
|
oneFeedCase(feedsIdsForNewItems.first(), syncResult.items)
|
||||||
|
else if (itemCount == 1)
|
||||||
|
oneFeedCase(items.first().feedId.toLong(), items)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +58,7 @@ class SyncResultAnalyser(val context: Context, private val syncResults: Map<Acco
|
||||||
return notifContent
|
return notifContent
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun oneFeedCase(feedId: Long, syncResult: SyncResult) {
|
private fun oneFeedCase(feedId: Long, items: List<Item>) {
|
||||||
val feed = database.feedDao().getFeedById(feedId.toInt())
|
val feed = database.feedDao().getFeedById(feedId.toInt())
|
||||||
|
|
||||||
if (feed.isNotificationEnabled) {
|
if (feed.isNotificationEnabled) {
|
||||||
|
@ -71,12 +74,12 @@ class SyncResultAnalyser(val context: Context, private val syncResults: Map<Acco
|
||||||
notifContent.largeIcon = target.get()
|
notifContent.largeIcon = target.get()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (syncResult.items.size == 1) {
|
if (items.size == 1) {
|
||||||
val item = database.itemDao().selectByRemoteId(syncResult.items.first().remoteId,
|
val item = database.itemDao().selectByRemoteId(items.first().remoteId,
|
||||||
syncResult.items.first().feedId)
|
items.first().feedId)
|
||||||
notifContent.content = item.title
|
notifContent.content = item.title
|
||||||
notifContent.item = item
|
notifContent.item = item
|
||||||
} else notifContent.content = context.getString(R.string.new_items, syncResult.items.size.toString())
|
} else notifContent.content = context.getString(R.string.new_items, items.size.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue