Implement the majority of the Donor UI.

This commit is contained in:
Alex Hart
2021-10-12 15:55:54 -03:00
committed by GitHub
parent 6cbc2f684d
commit 43e4cba3d7
96 changed files with 3601 additions and 266 deletions

View File

@@ -0,0 +1,135 @@
package org.thoughtcrime.securesms.components.settings.app.subscription.boost
import android.app.Application
import android.text.SpannableStringBuilder
import junit.framework.Assert.assertEquals
import junit.framework.Assert.assertNotNull
import junit.framework.Assert.assertNull
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import java.util.Currency
import java.util.Locale
@Suppress("ClassName")
@RunWith(RobolectricTestRunner::class)
@Config(manifest = Config.NONE, application = Application::class)
class BoostTest__MoneyFilter {
private val usd = Currency.getInstance("USD")
private val yen = Currency.getInstance("JPY")
@Before
fun setUp() {
Locale.setDefault(Locale.US)
}
@Test
fun `Given USD, when I enter 5, then I expect $ 5`() {
val testSubject = Boost.MoneyFilter(usd)
val editable = SpannableStringBuilder("5")
testSubject.afterTextChanged(editable)
assertEquals("$ 5", editable.toString())
}
@Test
fun `Given USD, when I enter 5dot00, then I expect successful filter`() {
val testSubject = Boost.MoneyFilter(usd)
val editable = SpannableStringBuilder("5.00")
val dest = SpannableStringBuilder()
testSubject.afterTextChanged(editable)
val filterResult = testSubject.filter(editable, 0, editable.length, dest, 0, 0)
assertNull(filterResult)
}
@Test
fun `Given USD, when I enter 5dot00, then I expect 5dot00 from text change`() {
var result = ""
val testSubject = Boost.MoneyFilter(usd) {
result = it
}
val editable = SpannableStringBuilder("5.00")
testSubject.afterTextChanged(editable)
assertEquals("5.00", result)
}
@Test
fun `Given USD, when I enter 5dot000, then I expect unsuccessful filter`() {
val testSubject = Boost.MoneyFilter(yen)
val editable = SpannableStringBuilder("5.000")
val dest = SpannableStringBuilder()
testSubject.afterTextChanged(editable)
val filterResult = testSubject.filter(editable, 0, editable.length, dest, 0, 0)
assertNotNull(filterResult)
}
@Test
fun `Given USD, when I enter 5dot, then I expect successful filter`() {
val testSubject = Boost.MoneyFilter(usd)
val editable = SpannableStringBuilder("5.")
val dest = SpannableStringBuilder()
testSubject.afterTextChanged(editable)
val filterResult = testSubject.filter(editable, 0, editable.length, dest, 0, 0)
assertNull(filterResult)
}
@Test
fun `Given JPY, when I enter 5, then I expect yen 5`() {
val testSubject = Boost.MoneyFilter(yen)
val editable = SpannableStringBuilder("5")
testSubject.afterTextChanged(editable)
assertEquals("¥ 5", editable.toString())
}
@Test
fun `Given JPY, when I enter 5, then I expect 5 from text change`() {
var result = ""
val testSubject = Boost.MoneyFilter(yen) {
result = it
}
val editable = SpannableStringBuilder("5")
testSubject.afterTextChanged(editable)
assertEquals("5", result)
}
@Test
fun `Given JPY, when I enter 5, then I expect successful filter`() {
val testSubject = Boost.MoneyFilter(yen)
val editable = SpannableStringBuilder("5")
val dest = SpannableStringBuilder()
testSubject.afterTextChanged(editable)
val filterResult = testSubject.filter(editable, 0, editable.length, dest, 0, 0)
assertNull(filterResult)
}
@Test
fun `Given JPY, when I enter 5dot, then I expect unsuccessful filter`() {
val testSubject = Boost.MoneyFilter(yen)
val editable = SpannableStringBuilder("5.")
val dest = SpannableStringBuilder()
testSubject.afterTextChanged(editable)
val filterResult = testSubject.filter(editable, 0, editable.length, dest, 0, 0)
assertNotNull(filterResult)
}
}

View File

@@ -0,0 +1,79 @@
package org.thoughtcrime.securesms.components.settings.app.subscription.currency
import junit.framework.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import java.util.Currency
@Suppress("ClassName")
@RunWith(JUnit4::class)
class SetCurrencyViewModel__CurrencyComparatorTest {
private val currencyComparator = SetCurrencyViewModel.CurrencyComparator(listOf("AUD", "EUR", "CAD"))
@Test
fun givenAListOfCurrencies_whenISort_thenIExpectTheProperOrder() {
// GIVEN
val currencies = listOf("EUR", "AUD", "JPY", "USD", "CAD", "BWP", "BIF").map { Currency.getInstance(it) }
val expected = listOf("USD", "AUD", "CAD", "EUR", "BWP", "BIF", "JPY").map { Currency.getInstance(it) }
// WHEN
val sorted: List<Currency> = currencies.sortedWith(currencyComparator)
// THEN
assertEquals(expected, sorted)
}
@Test
fun givenUSDAndADefaultCurrency_whenISort_thenIExpectUSDFirst() {
// GIVEN
val currencies = listOf("EUR", "USD").map { Currency.getInstance(it) }
val expected = listOf("USD", "EUR").map { Currency.getInstance(it) }
// WHEN
val sorted: List<Currency> = currencies.sortedWith(currencyComparator)
// THEN
assertEquals(expected, sorted)
}
@Test
fun givenADefaultCurrencyAndANonDefaultCurrency_whenISort_thenIExpectUSDFirst() {
// GIVEN
val currencies = listOf("JPY", "EUR").map { Currency.getInstance(it) }
val expected = listOf("EUR", "JPY").map { Currency.getInstance(it) }
// WHEN
val sorted: List<Currency> = currencies.sortedWith(currencyComparator)
// THEN
assertEquals(expected, sorted)
}
@Test
fun givenTwoDefaultCurrencies_whenISort_thenIExpectOrderedByDisplayName() {
// GIVEN
val currencies = listOf("EUR", "AUD").map { Currency.getInstance(it) }
val expected = listOf("AUD", "EUR").map { Currency.getInstance(it) }
// WHEN
val sorted = currencies.sortedWith(currencyComparator)
// THEN
assertEquals(expected, sorted)
}
@Test
fun givenTwoNonDefaultCurrencies_whenISort_thenIExpectOrderedByDisplayName() {
// GIVEN
val currencies = listOf("XPF", "BIF").map { Currency.getInstance(it) }
val expected = listOf("BIF", "XPF").map { Currency.getInstance(it) }
// WHEN
val sorted = currencies.sortedWith(currencyComparator)
// THEN
assertEquals(expected, sorted)
}
}