package com.kickstarter; import com.kickstarter.factories.ConfigFactory; import com.kickstarter.factories.ProjectFactory; import com.kickstarter.libs.Config; import com.kickstarter.libs.CurrentConfigType; import com.kickstarter.libs.KSCurrency; import com.kickstarter.libs.MockCurrentConfig; import com.kickstarter.models.Project; import junit.framework.TestCase; import java.math.RoundingMode; public class KSCurrencyTest extends TestCase { public void testFormatCurrency_withUserInUS() { final KSCurrency currency = createKSCurrency("US"); assertEquals("$100", currency.format(100.0f, ProjectFactory.project())); assertEquals("$100 CAD", currency.format(100.0f, ProjectFactory.caProject())); assertEquals("£100", currency.format(100.0f, ProjectFactory.ukProject())); } public void testFormatCurrency_withUserInCA() { final KSCurrency currency = createKSCurrency("CA"); assertEquals("$100 USD", currency.format(100.0f, ProjectFactory.project())); assertEquals("$100 CAD", currency.format(100.0f, ProjectFactory.caProject())); assertEquals("£100", currency.format(100.0f, ProjectFactory.ukProject())); } public void testFormatCurrency_withUserInUK() { final KSCurrency currency = createKSCurrency("UK"); assertEquals("$100 USD", currency.format(100.0f, ProjectFactory.project())); assertEquals("$100 CAD", currency.format(100.0f, ProjectFactory.caProject())); assertEquals("£100", currency.format(100.0f, ProjectFactory.ukProject())); } public void testFormatCurrency_withUserInUnlaunchedCountry() { final KSCurrency currency = createKSCurrency("XX"); assertEquals("$100 USD", currency.format(100.0f, ProjectFactory.project())); assertEquals("$100 CAD", currency.format(100.0f, ProjectFactory.caProject())); assertEquals("£100", currency.format(100.0f, ProjectFactory.ukProject())); } public void testFormatCurrency_withCurrencyCodeExcluded() { final KSCurrency currency = createKSCurrency("CA"); assertEquals("$100", currency.format(100.0f, ProjectFactory.project(), true)); } public void testFormatCurrency_withUserInUSAndUSDPreferred() { final KSCurrency currency = createKSCurrency("US"); assertEquals("$150", currency.format(100.0f, ProjectFactory.ukProject(), false, true, RoundingMode.DOWN)); } public void testFormatCurrency_withUserInUKAndUSDPreferred() { final KSCurrency currency = createKSCurrency("UK"); assertEquals("£100", currency.format(100.0f, ProjectFactory.ukProject(), false, true, RoundingMode.DOWN)); } public void testFormatCurrency_roundsDown() { final KSCurrency currency = createKSCurrency("US"); final Project project = ProjectFactory.project(); assertEquals("$100", currency.format(100.4f, project)); assertEquals("$100", currency.format(100.5f, project)); assertEquals("$101", currency.format(101.5f, project)); assertEquals("$100", currency.format(100.9f, project)); } private static KSCurrency createKSCurrency(final String countryCode) { final Config config = ConfigFactory.config().toBuilder() .countryCode(countryCode) .build(); final CurrentConfigType currentConfig = new MockCurrentConfig(); currentConfig.config(config); return new KSCurrency(currentConfig); } }