package org.thoughtcrime.securesms.recipients import android.graphics.Color import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Ignore import org.junit.Test import org.powermock.api.mockito.PowerMockito import org.thoughtcrime.securesms.conversation.colors.ChatColors import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette import org.thoughtcrime.securesms.database.RecipientDatabaseTestUtils.createRecipient import org.thoughtcrime.securesms.keyvalue.ChatColorsValues import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.keyvalue.WallpaperValues import org.thoughtcrime.securesms.wallpaper.ChatWallpaper @Ignore("PowerMock failing") @Suppress("ClassName") class Recipient_getChatColorsTest : BaseRecipientTest() { private val defaultChatColors = ChatColorsPalette.Bubbles.default.withId(ChatColors.Id.Auto) private val globalWallpaperChatColor = ChatColors.forColor(ChatColors.Id.BuiltIn, Color.RED) private val globalChatColor = ChatColors.forColor(ChatColors.Id.BuiltIn, Color.GREEN) private lateinit var wallpaperValues: WallpaperValues private lateinit var chatColorsValues: ChatColorsValues @Before fun setUp() { wallpaperValues = PowerMockito.mock(WallpaperValues::class.java) chatColorsValues = PowerMockito.mock(ChatColorsValues::class.java) val globalWallpaper = createWallpaper(globalWallpaperChatColor) PowerMockito.`when`(wallpaperValues.wallpaper).thenReturn(globalWallpaper) PowerMockito.`when`(chatColorsValues.chatColors).thenReturn(globalChatColor) PowerMockito.`when`(SignalStore.wallpaper()).thenReturn(wallpaperValues) PowerMockito.`when`(SignalStore.chatColorsValues()).thenReturn(chatColorsValues) } @Test fun `Given recipient has custom chat color set, when I getChatColors, then I expect the custom chat color`() { // GIVEN val expected = ChatColors.forColor(ChatColors.Id.Custom(12), Color.BLACK) val recipient = createRecipient(chatColors = expected) // WHEN val actual = recipient.chatColors // THEN assertEquals(expected, actual) } @Test fun `Given recipient has built in chat color set, when I getChatColors, then I expect the custom chat color`() { // GIVEN val expected = ChatColors.forColor(ChatColors.Id.BuiltIn, Color.BLACK) val recipient = createRecipient(chatColors = expected) // WHEN val actual = recipient.chatColors // THEN assertEquals(expected, actual) } @Test fun `Given recipient has auto chat color set and wallpaper set, when I getChatColors, then I expect the wallpaper chat color`() { // GIVEN val auto = ChatColors.forColor(ChatColors.Id.Auto, Color.BLACK) val expected = ChatColors.forColor(ChatColors.Id.BuiltIn, Color.WHITE) val wallpaper = createWallpaper(chatColors = expected) val recipient = createRecipient(chatColors = auto, wallpaper = wallpaper) // WHEN val actual = recipient.chatColors // THEN assertEquals(expected, actual) } @Test fun `Given recipient has auto chat color set and no wallpaper set and global wallpaper set, when I getChatColors, then I expect the global wallpaper chat color`() { // GIVEN val auto = ChatColors.forColor(ChatColors.Id.Auto, Color.BLACK) val recipient = createRecipient(chatColors = auto) // WHEN val actual = recipient.chatColors // THEN assertEquals(globalWallpaperChatColor, actual) } @Test fun `Given recipient has auto chat color set and no wallpaper set and no global wallpaper set, when I getChatColors, then I expect the default chat color`() { // GIVEN PowerMockito.`when`(wallpaperValues.wallpaper).thenReturn(null) val auto = ChatColors.forColor(ChatColors.Id.Auto, Color.BLACK) val recipient = createRecipient(chatColors = auto) // WHEN val actual = recipient.chatColors // THEN assertEquals(defaultChatColors, actual) } @Test fun `Given recipient has no chat color set and there is a custom global chat color, when I getChatColors, then I expect the global chat color`() { // GIVEN val expected = globalChatColor.withId(ChatColors.Id.Custom(12)) PowerMockito.`when`(chatColorsValues.chatColors).thenReturn(expected) val recipient = createRecipient() // WHEN val actual = recipient.chatColors // THEN assertEquals(expected, actual) } @Test fun `Given recipient has no chat color set and there is a built in global chat color, when I getChatColors, then I expect the global chat color`() { // GIVEN val recipient = createRecipient() // WHEN val actual = recipient.chatColors // THEN assertEquals(globalChatColor, actual) } @Test fun `Given recipient has no chat color set and there is an auto global chat color and the recipient has a wallpaper, when I getChatColors, then I expect the wallpaper chat color`() { // GIVEN PowerMockito.`when`(chatColorsValues.chatColors).thenReturn(globalChatColor.withId(ChatColors.Id.Auto)) val color = ChatColors.forColor(ChatColors.Id.BuiltIn, Color.CYAN) val recipient = createRecipient(wallpaper = createWallpaper(color)) // WHEN val actual = recipient.chatColors // THEN assertEquals(color, actual) } @Test fun `Given recipient has no chat color set and there is no global chat color and the recipient has a wallpaper, when I getChatColors, then I expect the wallpaper chat color`() { // GIVEN PowerMockito.`when`(chatColorsValues.chatColors).thenReturn(null) val color = ChatColors.forColor(ChatColors.Id.BuiltIn, Color.CYAN) val recipient = createRecipient(wallpaper = createWallpaper(color)) // WHEN val actual = recipient.chatColors // THEN assertEquals(color, actual) } @Test fun `Given recipient has no chat color set and there is an auto global chat color and the recipient has no wallpaper and global wallpaper set, when I getChatColors, then I expect the global wallpaper chat color`() { // GIVEN PowerMockito.`when`(chatColorsValues.chatColors).thenReturn(globalChatColor.withId(ChatColors.Id.Auto)) val recipient = createRecipient() // WHEN val actual = recipient.chatColors // THEN assertEquals(globalWallpaperChatColor, actual) } @Test fun `Given recipient has no chat color set and there is no global chat color and the recipient has no wallpaper and global wallpaper set, when I getChatColors, then I expect the global wallpaper chat color`() { // GIVEN PowerMockito.`when`(chatColorsValues.chatColors).thenReturn(null) val recipient = createRecipient() // WHEN val actual = recipient.chatColors // THEN assertEquals(globalWallpaperChatColor, actual) } @Test fun `Given no recipient colors and auto global colors and no wallpaper set, when I getChatColors, then I expect default blue`() { // GIVEN PowerMockito.`when`(wallpaperValues.wallpaper).thenReturn(null) PowerMockito.`when`(chatColorsValues.chatColors).thenReturn(globalChatColor.withId(ChatColors.Id.Auto)) val recipient = createRecipient() // WHEN val actual = recipient.chatColors // THEN assertEquals(defaultChatColors, actual) } @Test fun `Given no colors or wallpaper set, when I getChatColors, then I expect default blue`() { // GIVEN PowerMockito.`when`(wallpaperValues.wallpaper).thenReturn(null) PowerMockito.`when`(chatColorsValues.chatColors).thenReturn(null) val recipient = createRecipient() // WHEN val actual = recipient.chatColors // THEN assertEquals(defaultChatColors, actual) } private fun createWallpaper( chatColors: ChatColors? ): ChatWallpaper = PowerMockito.mock(ChatWallpaper::class.java).apply { PowerMockito.`when`(autoChatColors).thenReturn(chatColors) } }