diff --git a/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationTypeMappers.kt b/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationTypeMappers.kt index d3248a672..0ad4deffc 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationTypeMappers.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationTypeMappers.kt @@ -47,7 +47,7 @@ fun Notification.toEntity( type = type, id = id, accountId = account.id, - statusId = status?.id, + statusId = status?.reblog?.id ?: status?.id, reportId = report?.id, loading = false ) diff --git a/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsRemoteMediator.kt b/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsRemoteMediator.kt index d6627da58..d3b71f750 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsRemoteMediator.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsRemoteMediator.kt @@ -164,10 +164,10 @@ class NotificationsRemoteMediator( val contentShowing = oldStatus?.contentShowing ?: (activeAccount.alwaysShowSensitiveMedia || !status.sensitive) val contentCollapsed = oldStatus?.contentCollapsed ?: true - accountDao.insert(status.account.toEntity(activeAccount.id)) - + val statusToInsert = status.reblog ?: status + accountDao.insert(statusToInsert.account.toEntity(activeAccount.id)) statusDao.insert( - status.toEntity( + statusToInsert.toEntity( tuskyAccountId = activeAccount.id, expanded = expanded, contentShowing = contentShowing, diff --git a/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsViewModel.kt b/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsViewModel.kt index 3777b84fe..5e74003ec 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsViewModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/notifications/NotificationsViewModel.kt @@ -345,10 +345,11 @@ class NotificationsViewModel @Inject constructor( notificationsDao.insertReport(report.toEntity(account.id)) } notification.status?.let { status -> - accountDao.insert(status.account.toEntity(account.id)) + val statusToInsert = status.reblog ?: status + accountDao.insert(statusToInsert.account.toEntity(account.id)) statusDao.insert( - status.toEntity( + statusToInsert.toEntity( tuskyAccountId = account.id, expanded = account.alwaysOpenSpoiler, contentShowing = account.alwaysShowSensitiveMedia || !status.sensitive, diff --git a/app/src/test/java/com/keylesspalace/tusky/components/notifications/NotificationsRemoteMediatorTest.kt b/app/src/test/java/com/keylesspalace/tusky/components/notifications/NotificationsRemoteMediatorTest.kt index 0f2c9abb4..34ae432bb 100644 --- a/app/src/test/java/com/keylesspalace/tusky/components/notifications/NotificationsRemoteMediatorTest.kt +++ b/app/src/test/java/com/keylesspalace/tusky/components/notifications/NotificationsRemoteMediatorTest.kt @@ -11,6 +11,7 @@ import androidx.room.Room import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import com.keylesspalace.tusky.components.timeline.Placeholder +import com.keylesspalace.tusky.components.timeline.fakeStatus import com.keylesspalace.tusky.db.AccountManager import com.keylesspalace.tusky.db.AppDatabase import com.keylesspalace.tusky.db.Converters @@ -215,7 +216,17 @@ class NotificationsRemoteMediatorTest { api = mock { onBlocking { notifications(limit = 20, excludes = emptySet()) } doReturn Response.success( listOf( - fakeNotification(id = "8"), + // testing for https://github.com/tuskyapp/Tusky/issues/4563 + fakeNotification( + id = "8", + status = fakeStatus( + id = "r1", + reblog = fakeStatus( + id = "8", + authorServerId = "r1" + ) + ) + ), fakeNotification(id = "7"), fakeNotification(id = "5") ) @@ -249,7 +260,13 @@ class NotificationsRemoteMediatorTest { db.assertNotifications( listOf( - fakeNotification(id = "8").toNotificationDataEntity(1), + fakeNotification( + id = "8", + status = fakeStatus( + id = "8", + authorServerId = "r1" + ) + ).toNotificationDataEntity(1), fakeNotification(id = "7").toNotificationDataEntity(1), fakeNotification(id = "5").toNotificationDataEntity(1), fakeNotification(id = "3").toNotificationDataEntity(1), diff --git a/app/src/test/java/com/keylesspalace/tusky/components/timeline/TimelineFaker.kt b/app/src/test/java/com/keylesspalace/tusky/components/timeline/TimelineFaker.kt index 2351347dc..80fc0c25d 100644 --- a/app/src/test/java/com/keylesspalace/tusky/components/timeline/TimelineFaker.kt +++ b/app/src/test/java/com/keylesspalace/tusky/components/timeline/TimelineFaker.kt @@ -35,7 +35,8 @@ fun fakeStatus( reblogged: Boolean = false, favourited: Boolean = true, bookmarked: Boolean = true, - domain: String = "mastodon.example" + domain: String = "mastodon.example", + reblog: Status? = null ) = Status( id = id, url = "https://$domain/@ConnyDuck/$id", @@ -45,7 +46,7 @@ fun fakeStatus( ), inReplyToId = inReplyToId, inReplyToAccountId = inReplyToAccountId, - reblog = null, + reblog = reblog, content = "Test", createdAt = fixedDate, editedAt = null,