From 14c45b87ca08a0211d167d96ccccb786831261c6 Mon Sep 17 00:00:00 2001 From: hmalik144 Date: Fri, 26 Aug 2022 00:36:40 +0100 Subject: [PATCH] Issue resolved (#8) Took 1 hour 48 minutes --- .../data/network/response/CurrencyResponse.kt | 4 ---- .../easycc/data/prefs/PreferenceProvider.kt | 7 ------ .../h_mal/easycc/helper/WidgetHelper.kt | 4 ++-- .../easycc/widget/WidgetServiceIntent.kt | 5 ++-- .../repository/RepositoryNetworkTest.kt | 3 +-- .../h_mal/easycc/ui/main/MainViewModelTest.kt | 24 +++++++++++-------- 6 files changed, 19 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/appttude/h_mal/easycc/data/network/response/CurrencyResponse.kt b/app/src/main/java/com/appttude/h_mal/easycc/data/network/response/CurrencyResponse.kt index 02b585d..91da559 100644 --- a/app/src/main/java/com/appttude/h_mal/easycc/data/network/response/CurrencyResponse.kt +++ b/app/src/main/java/com/appttude/h_mal/easycc/data/network/response/CurrencyResponse.kt @@ -5,16 +5,12 @@ import com.appttude.h_mal.easycc.models.CurrencyModelInterface import com.google.gson.annotations.SerializedName data class CurrencyResponse( - @field:SerializedName("date") val date: String? = null, - @field:SerializedName("amount") val amount: Double? = null, - @field:SerializedName("rates") var rates: Map? = null, - @field:SerializedName("base") val base: String? = null ) : CurrencyModelInterface { diff --git a/app/src/main/java/com/appttude/h_mal/easycc/data/prefs/PreferenceProvider.kt b/app/src/main/java/com/appttude/h_mal/easycc/data/prefs/PreferenceProvider.kt index f59fee9..68af85c 100644 --- a/app/src/main/java/com/appttude/h_mal/easycc/data/prefs/PreferenceProvider.kt +++ b/app/src/main/java/com/appttude/h_mal/easycc/data/prefs/PreferenceProvider.kt @@ -19,7 +19,6 @@ class PreferenceProvider @Inject constructor(@ApplicationContext context: Contex private val appContext = context.applicationContext - // Instance of Shared preferences private val preference: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext) @@ -28,7 +27,6 @@ class PreferenceProvider @Inject constructor(@ApplicationContext context: Contex context.resources.getStringArray(R.array.currency_arrays)[0] } - // Save currency pairs into prefs fun saveConversionPair(s1: String, s2: String) { preference.edit() .putString(CURRENCY_ONE, s1) @@ -36,8 +34,6 @@ class PreferenceProvider @Inject constructor(@ApplicationContext context: Contex .apply() } - // Retrieve Currency pairs from prefs - // Returns Pairs fun getConversionPair(): Pair { val fromString = getConversionString(CURRENCY_ONE) val toString = getConversionString(CURRENCY_TWO) @@ -45,18 +41,15 @@ class PreferenceProvider @Inject constructor(@ApplicationContext context: Contex return Pair(fromString, toString) } - private fun getConversionString(conversionName: String): String? { return preference .getString(conversionName, defaultRate) } - // Save currency pairs for widget fun saveWidgetConversionPair( fromString: String, toString: String, appWidgetId: Int ) { - preference.edit() .putString("${appWidgetId}_$CURRENCY_ONE", fromString) .putString("${appWidgetId}_$CURRENCY_TWO", toString) diff --git a/app/src/main/java/com/appttude/h_mal/easycc/helper/WidgetHelper.kt b/app/src/main/java/com/appttude/h_mal/easycc/helper/WidgetHelper.kt index 7713f91..8fdbbf6 100644 --- a/app/src/main/java/com/appttude/h_mal/easycc/helper/WidgetHelper.kt +++ b/app/src/main/java/com/appttude/h_mal/easycc/helper/WidgetHelper.kt @@ -10,9 +10,9 @@ class WidgetHelper @Inject constructor( val repository: Repository ) { - suspend fun getWidgetData(): CurrencyModel? { + suspend fun getWidgetData(appWidgetId: Int): CurrencyModel? { try { - val pair = repository.getConversionPair() + val pair = repository.getWidgetConversionPairs(appWidgetId) val s1 = pair.first?.trimToThree() ?: return null val s2 = pair.second?.trimToThree() ?: return null diff --git a/app/src/main/java/com/appttude/h_mal/easycc/widget/WidgetServiceIntent.kt b/app/src/main/java/com/appttude/h_mal/easycc/widget/WidgetServiceIntent.kt index 0f2bc70..213ff3b 100644 --- a/app/src/main/java/com/appttude/h_mal/easycc/widget/WidgetServiceIntent.kt +++ b/app/src/main/java/com/appttude/h_mal/easycc/widget/WidgetServiceIntent.kt @@ -22,7 +22,6 @@ import javax.inject.Inject @AndroidEntryPoint class WidgetServiceIntent : JobIntentService() { - //DI with kodein to use in CurrencyAppWidgetKotlin @Inject lateinit var helper: WidgetHelper @@ -45,7 +44,7 @@ class WidgetServiceIntent : JobIntentService() { val views = RemoteViews(context.packageName, R.layout.currency_app_widget) CoroutineScope(Dispatchers.Main).launch { - val exchangeResponse = helper.getWidgetData() + val exchangeResponse = helper.getWidgetData(appWidgetId) exchangeResponse?.let { val titleString = "${it.from}${it.to}" @@ -63,7 +62,7 @@ class WidgetServiceIntent : JobIntentService() { val configPendingIntent = PendingIntent.getActivity( context, appWidgetId, clickIntentTemplate, - PendingIntent.FLAG_UPDATE_CURRENT or FLAG_IMMUTABLE + FLAG_UPDATE_CURRENT or FLAG_IMMUTABLE ) views.setOnClickPendingIntent(R.id.widget_view, configPendingIntent) } diff --git a/app/src/test/java/com/appttude/h_mal/easycc/repository/RepositoryNetworkTest.kt b/app/src/test/java/com/appttude/h_mal/easycc/repository/RepositoryNetworkTest.kt index ff264da..3a67271 100644 --- a/app/src/test/java/com/appttude/h_mal/easycc/repository/RepositoryNetworkTest.kt +++ b/app/src/test/java/com/appttude/h_mal/easycc/repository/RepositoryNetworkTest.kt @@ -79,8 +79,7 @@ class RepositoryNetworkTest { val ioExceptionReturned = assertFailsWith { repository.getDataFromApi(s1, s2) } - assertNotNull(ioExceptionReturned) - assertNotNull(ioExceptionReturned.message) + assertEquals(ioExceptionReturned.message, "Error Code: 0") } } \ No newline at end of file diff --git a/app/src/test/java/com/appttude/h_mal/easycc/ui/main/MainViewModelTest.kt b/app/src/test/java/com/appttude/h_mal/easycc/ui/main/MainViewModelTest.kt index 3bc877c..49e7b98 100644 --- a/app/src/test/java/com/appttude/h_mal/easycc/ui/main/MainViewModelTest.kt +++ b/app/src/test/java/com/appttude/h_mal/easycc/ui/main/MainViewModelTest.kt @@ -8,6 +8,7 @@ import com.appttude.h_mal.easycc.data.repository.Repository import com.appttude.h_mal.easycc.helper.CurrencyDataHelper import com.appttude.h_mal.easycc.utils.MainCoroutineRule import com.appttude.h_mal.easycc.utils.observeOnce +import com.nhaarman.mockitokotlin2.doAnswer import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.runBlocking import org.junit.Assert.* @@ -18,7 +19,9 @@ import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito.mock import org.mockito.MockitoAnnotations +import java.io.IOException +@OptIn(ExperimentalCoroutinesApi::class) class MainViewModelTest { // Run tasks synchronously @@ -70,24 +73,25 @@ class MainViewModelTest { @Test fun initiate_invalidBundleValues_successfulResponse() = runBlocking { //GIVEN - val currencyOne = "AUD - Australian Dollar" - val currencyTwo = "GBP - British Pound" - val pair = Pair(currencyOne, currencyTwo) - val responseObject = mock(ResponseObject::class.java) + val currencyOne = "corrupted data" + val currencyTwo = "corrupted data again" + val bundle = mock(Bundle()::class.java) + val error = "Corrupted data found" //WHEN - Mockito.`when`(repository.getConversionPair()).thenReturn(pair) - Mockito.`when`(repository.getDataFromApi(currencyOne, currencyTwo)) - .thenReturn(responseObject) + Mockito.`when`(bundle.getString("parse_1")).thenReturn(currencyOne) + Mockito.`when`(bundle.getString("parse_2")).thenReturn(currencyTwo) + Mockito.`when`(helper.getDataFromApi(currencyOne, currencyTwo)) + .doAnswer { throw IOException(error) } //THEN - viewModel.initiate(null) + viewModel.initiate(bundle) viewModel.operationStartedListener.observeOnce { assertEquals(true, it) } viewModel.operationFinishedListener.observeOnce { - assertEquals(true, it.first) - assertNull(it.second) + assertEquals(false, it.first) + assertEquals(it.second, error) } }