filter messages by also looking at media descriptions (#2285)

This commit is contained in:
Mélanie Chauvel 2022-01-04 19:28:49 +01:00 committed by GitHub
parent a221a7b916
commit c0c8eec36b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 3 deletions

View file

@ -29,9 +29,16 @@ class FilterModel @Inject constructor() {
}
val spoilerText = status.actionableStatus.spoilerText
val attachmentsDescriptions = status.attachments
.mapNotNull { it.description }
return (
matcher.reset(status.actionableStatus.content).find() ||
spoilerText.isNotEmpty() && matcher.reset(spoilerText).find()
(spoilerText.isNotEmpty() && matcher.reset(spoilerText).find()) ||
(
attachmentsDescriptions.isNotEmpty() &&
matcher.reset(attachmentsDescriptions.joinToString("\n")).find()
)
)
}

View file

@ -2,6 +2,7 @@ package com.keylesspalace.tusky
import android.text.SpannedString
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.keylesspalace.tusky.entity.Attachment
import com.keylesspalace.tusky.entity.Filter
import com.keylesspalace.tusky.entity.Poll
import com.keylesspalace.tusky.entity.PollOption
@ -14,6 +15,7 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.annotation.Config
import java.util.ArrayList
import java.util.Date
@Config(sdk = [28])
@ -125,6 +127,19 @@ class FilterTest {
)
}
@Test
fun shouldFilter_whenMediaDescriptionDoesMatch() {
assertTrue(
filterModel.shouldFilterStatus(
mockStatus(
content = "should not be filtered",
spoilerText = "should not be filtered",
attachmentsDescriptions = listOf("should not be filtered", "badWord"),
)
)
)
}
@Test
fun shouldFilterPartialWord_whenWholeWordFilterContainsNonAlphanumericCharacters() {
assertTrue(
@ -137,7 +152,8 @@ class FilterTest {
private fun mockStatus(
content: String = "",
spoilerText: String = "",
pollOptions: List<String>? = null
pollOptions: List<String>? = null,
attachmentsDescriptions: List<String>? = null
): Status {
return Status(
id = "123",
@ -157,7 +173,21 @@ class FilterTest {
sensitive = false,
spoilerText = spoilerText,
visibility = Status.Visibility.PUBLIC,
attachments = arrayListOf(),
attachments = if (attachmentsDescriptions != null) {
ArrayList(
attachmentsDescriptions.map {
Attachment(
id = "1234",
url = "",
previewUrl = null,
meta = null,
type = Attachment.Type.IMAGE,
description = it,
blurhash = null
)
}
)
} else arrayListOf(),
mentions = listOf(),
application = null,
pinned = false,