This is an automated email from the ASF dual-hosted git repository.

rajanmaurya154 pushed a commit to branch development
in repository https://gitbox.apache.org/repos/asf/fineract-cn-mobile.git


The following commit(s) were added to refs/heads/development by this push:
     new 10a2baa  feat: unit test
10a2baa is described below

commit 10a2baa26309ece5780363a49925977a0ec8b45b
Author: Mohak <[email protected]>
AuthorDate: Tue Aug 7 07:21:15 2018 +0530

    feat: unit test
---
 .../online/accounting/ledgers/LedgerPresenter.kt   |  5 +-
 .../customers/customerlist/CustomersPresenter.java |  2 -
 .../IdentificationsPresenter.java                  |  2 +-
 .../fineract/ui/online/login/LoginPresenter.java   | 44 +++++-----
 .../ui/online/roles/roleslist/RolesPresenter.java  |  2 +-
 .../apache/fineract/online/AccountPresenterTest.kt | 85 +++++++++++++++++++
 .../fineract/online/CustomerPresenterTest.kt       | 97 ++++++++++++++++++++++
 .../fineract/online/IdentificationPresenterTest.kt | 90 ++++++++++++++++++++
 .../apache/fineract/online/LedgerPresenterTest.kt  | 85 +++++++++++++++++++
 .../fineract/online/LoanAccountPresenterTest.kt    | 96 +++++++++++++++++++++
 .../apache/fineract/online/LoginPresenterTest.kt   | 76 +++++++++++++++++
 .../apache/fineract/online/RolesPresenterTest.kt   | 82 ++++++++++++++++++
 .../fineract/util/RxSchedulersOverrideRule.kt      | 47 +++++++++++
 .../org.mockito.plugins.MockMaker                  |  1 +
 14 files changed, 685 insertions(+), 29 deletions(-)

diff --git 
a/app/src/main/java/org/apache/fineract/ui/online/accounting/ledgers/LedgerPresenter.kt
 
b/app/src/main/java/org/apache/fineract/ui/online/accounting/ledgers/LedgerPresenter.kt
index dde25b3..361bc51 100644
--- 
a/app/src/main/java/org/apache/fineract/ui/online/accounting/ledgers/LedgerPresenter.kt
+++ 
b/app/src/main/java/org/apache/fineract/ui/online/accounting/ledgers/LedgerPresenter.kt
@@ -60,15 +60,12 @@ class LedgerPresenter @Inject 
constructor(@ApplicationContext context: Context,
 
     override fun searchLedger(ledgerList: List<Ledger>, identifier: String) {
         checkViewAttached()
-
         mvpView.searchedLedger(Observable.fromIterable(ledgerList)
-                .filter(object: Predicate<Ledger> {
+                .filter(object : Predicate<Ledger> {
                     override fun test(ledger: Ledger): Boolean {
                         return ledger.identifier?.toLowerCase()
                                 
?.contains(identifier.toLowerCase()).toString().toBoolean()
                     }
                 }).toList().blockingGet())
     }
-
-
 }
\ No newline at end of file
diff --git 
a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java
 
b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java
index 5466c7f..398b615 100644
--- 
a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java
+++ 
b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java
@@ -1,7 +1,6 @@
 package org.apache.fineract.ui.online.customers.customerlist;
 
 import android.content.Context;
-import android.util.Log;
 
 import org.apache.fineract.R;
 import org.apache.fineract.data.datamanager.contracts.ManagerCustomer;
@@ -85,7 +84,6 @@ public class CustomersPresenter extends 
BasePresenter<CustomersContract.View>
 
                     @Override
                     public void onError(Throwable throwable) {
-                        Log.d("mytag", throwable.toString());
                         getMvpView().hideProgressbar();
                         if (loadmore) {
                             getMvpView().showMessage(
diff --git 
a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java
 
b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java
index dd7f3b6..1e6bd61 100644
--- 
a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java
+++ 
b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java
@@ -33,7 +33,7 @@ public class IdentificationsPresenter extends 
BasePresenter<IdentificationsContr
 
     @Inject
     public IdentificationsPresenter(@ApplicationContext Context context,
-            DataManagerCustomer dataManagerCustomer) {
+                                    DataManagerCustomer dataManagerCustomer) {
         super(context);
         this.dataManagerCustomer = dataManagerCustomer;
         compositeDisposable = new CompositeDisposable();
diff --git 
a/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java 
b/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java
index 44f1c11..a32ad48 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java
@@ -30,7 +30,7 @@ import retrofit2.Response;
 
 /**
  * @author Rajan Maurya
- *         On 17/06/17.
+ * On 17/06/17.
  */
 @ConfigPersistent
 public class LoginPresenter extends BasePresenter<LoginContract.View>
@@ -78,28 +78,30 @@ public class LoginPresenter extends 
BasePresenter<LoginContract.View>
                         getMvpView().hideProgressDialog();
                         if (throwable instanceof NoConnectivityException) {
                             getMvpView().showNoInternetConnection();
-                        }
-
-                        MifosError mifosError = new MifosError();
-                        Converter<ResponseBody, MifosError> errorConverter =
-                                
retrofit.responseBodyConverter(MifosError.class, new Annotation[0]);
-                        if (throwable instanceof HttpException) {
-                            HttpException httpException = (HttpException) 
throwable;
-                            Response response = httpException.response();
-
-                            if (response.errorBody() != null) {
-                                try {
-                                    mifosError = 
errorConverter.convert(response.errorBody());
-                                } catch (IOException e) {
-                                    Log.d(LOG_TAG, e.getLocalizedMessage());
+                        } else {
+
+                            MifosError mifosError = new MifosError();
+                            Converter<ResponseBody, MifosError> errorConverter 
=
+                                    
retrofit.responseBodyConverter(MifosError.class,
+                                            new Annotation[0]);
+                            if (throwable instanceof HttpException) {
+                                HttpException httpException = (HttpException) 
throwable;
+                                Response response = httpException.response();
+
+                                if (response.errorBody() != null) {
+                                    try {
+                                        mifosError = 
errorConverter.convert(response.errorBody());
+                                    } catch (IOException e) {
+                                        Log.d(LOG_TAG, 
e.getLocalizedMessage());
+                                    }
                                 }
-                            }
 
-                            if (mifosError.getMessage() == null) {
-                                getMvpView().showError(
-                                        
context.getString(R.string.wrong_username_or_password));
-                            } else {
-                                
getMvpView().showError(mifosError.getMessage());
+                                if (mifosError.getMessage() == null) {
+                                    getMvpView().showError(
+                                            
context.getString(R.string.wrong_username_or_password));
+                                } else {
+                                    
getMvpView().showError(mifosError.getMessage());
+                                }
                             }
                         }
                     }
diff --git 
a/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java
 
b/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java
index feb7591..9aa070f 100644
--- 
a/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java
+++ 
b/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java
@@ -30,7 +30,7 @@ public class RolesPresenter extends 
BasePresenter<RolesContract.View>
     private CompositeDisposable compositeDisposable;
 
     @Inject
-    protected RolesPresenter(@ApplicationContext Context context,
+    public RolesPresenter(@ApplicationContext Context context,
             DataManagerRoles dataManagerRoles) {
         super(context);
         this.dataManagerRoles = dataManagerRoles;
diff --git 
a/app/src/test/java/org/apache/fineract/online/AccountPresenterTest.kt 
b/app/src/test/java/org/apache/fineract/online/AccountPresenterTest.kt
new file mode 100644
index 0000000..96cddcf
--- /dev/null
+++ b/app/src/test/java/org/apache/fineract/online/AccountPresenterTest.kt
@@ -0,0 +1,85 @@
+package org.apache.fineract.online
+
+import android.content.Context
+import io.reactivex.Observable
+import org.apache.fineract.FakeRemoteDataSource
+import org.apache.fineract.data.datamanager.DataManagerAccounting
+import org.apache.fineract.data.models.accounts.AccountPage
+import org.apache.fineract.exceptions.NoConnectivityException
+import org.apache.fineract.ui.online.accounting.accounts.AccountContract
+import org.apache.fineract.ui.online.accounting.accounts.AccountsPresenter
+import org.apache.fineract.util.RxSchedulersOverrideRule
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.Mockito.verify
+import org.mockito.junit.MockitoJUnitRunner
+
+@RunWith(MockitoJUnitRunner::class)
+class AccountPresenterTest {
+
+    @Rule
+    @JvmField
+    val overrideSchedulersRule = RxSchedulersOverrideRule()
+
+    @Mock
+    lateinit var mockedView: AccountContract.View
+
+    @Mock
+    lateinit var mockedAccountingDataManager: DataManagerAccounting
+
+    @Mock
+    lateinit var mockedContext: Context
+
+    lateinit var accountPresenter: AccountsPresenter
+
+    lateinit var accountPage: AccountPage
+
+    @Before
+    fun setup() {
+        accountPresenter = AccountsPresenter(mockedContext, 
mockedAccountingDataManager)
+        accountPresenter.attachView(mockedView)
+        accountPage = FakeRemoteDataSource.getAccountPage()
+    }
+
+    @Test
+    fun testGetAccountsPage() {
+        
`when`(mockedAccountingDataManager.getAccounts()).thenReturn(Observable.just(accountPage))
+        accountPresenter.getAccountsPage()
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showAccounts(accountPage.accounts!!)
+    }
+
+    @Test
+    fun testGetAccountsPageEmpty() {
+        `when`(mockedAccountingDataManager.getAccounts())
+                .thenReturn(Observable.just(AccountPage(accounts = 
ArrayList())))
+        accountPresenter.getAccountsPage()
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showEmptyAccounts()
+    }
+
+    @Test
+    fun testGetAccountsPageFail() {
+        val exception = NoConnectivityException()
+        `when`(mockedAccountingDataManager.getAccounts())
+                .thenReturn(Observable.error(exception))
+        accountPresenter.getAccountsPage()
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showNoInternetConnection()
+    }
+
+    @After
+    fun tearDown() {
+        accountPresenter.detachView()
+    }
+
+}
\ No newline at end of file
diff --git 
a/app/src/test/java/org/apache/fineract/online/CustomerPresenterTest.kt 
b/app/src/test/java/org/apache/fineract/online/CustomerPresenterTest.kt
new file mode 100644
index 0000000..031a215
--- /dev/null
+++ b/app/src/test/java/org/apache/fineract/online/CustomerPresenterTest.kt
@@ -0,0 +1,97 @@
+package org.apache.fineract.online
+
+import android.content.Context
+import io.reactivex.Observable
+import org.apache.fineract.FakeRemoteDataSource
+import org.apache.fineract.R
+import org.apache.fineract.data.datamanager.contracts.ManagerCustomer
+import org.apache.fineract.data.datamanager.database.DbManagerCustomer
+import org.apache.fineract.data.models.customer.CustomerPage
+import org.apache.fineract.exceptions.NoConnectivityException
+import org.apache.fineract.ui.online.customers.customerlist.CustomersContract
+import org.apache.fineract.ui.online.customers.customerlist.CustomersPresenter
+import org.apache.fineract.util.RxSchedulersOverrideRule
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.Mockito.verify
+import org.mockito.junit.MockitoJUnitRunner
+
+@RunWith(MockitoJUnitRunner::class)
+class CustomerPresenterTest {
+
+    @Rule
+    @JvmField
+    val overrideSchedulersRule = RxSchedulersOverrideRule()
+
+    @Mock
+    lateinit var mockedView: CustomersContract.View
+
+    @Mock
+    lateinit var mockedCustomerDataManager: DbManagerCustomer
+
+    lateinit var mockedManagerCustomer: ManagerCustomer
+
+    @Mock
+    lateinit var mockedContext: Context
+
+    lateinit var customerPresenter: CustomersPresenter
+
+    lateinit var customerPage: CustomerPage
+
+    val size = 10
+
+    val pageIndex: Int = 1
+
+    @Before
+    fun setup() {
+        customerPresenter = CustomersPresenter(mockedContext, 
mockedCustomerDataManager)
+        customerPresenter.attachView(mockedView)
+        customerPage = FakeRemoteDataSource.getCustomerPage()
+        mockedManagerCustomer = mockedCustomerDataManager
+    }
+
+    @Test
+    fun testGetCustomerPage() {
+        `when`(mockedManagerCustomer.fetchCustomers(pageIndex, size))
+                .thenReturn(Observable.just(customerPage))
+        customerPresenter.fetchCustomers(pageIndex, size)
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showCustomers(customerPage.customers)
+    }
+
+    @Test
+    fun testGetAccountsPageEmpty() {
+        `when`(mockedManagerCustomer.fetchCustomers(pageIndex, size))
+                .thenReturn(Observable.just(CustomerPage(totalPages = 0)))
+        `when`(mockedContext.getString(R.string.empty_customer_list))
+                .thenReturn("Empty customer list")
+        customerPresenter.fetchCustomers(pageIndex, size)
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showEmptyCustomers("Empty customer list")
+    }
+
+
+    @Test
+    fun testGetAccountsPageFail() {
+        val exception = NoConnectivityException()
+        `when`(mockedCustomerDataManager.fetchCustomers(pageIndex, size))
+                .thenReturn(Observable.error(exception))
+        customerPresenter.fetchCustomers(pageIndex, size)
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showNoInternetConnection()
+    }
+
+    @After
+    fun tearDown() {
+        customerPresenter.detachView()
+    }
+
+}
\ No newline at end of file
diff --git 
a/app/src/test/java/org/apache/fineract/online/IdentificationPresenterTest.kt 
b/app/src/test/java/org/apache/fineract/online/IdentificationPresenterTest.kt
new file mode 100644
index 0000000..fe6e402
--- /dev/null
+++ 
b/app/src/test/java/org/apache/fineract/online/IdentificationPresenterTest.kt
@@ -0,0 +1,90 @@
+package org.apache.fineract.online
+
+import android.content.Context
+import io.reactivex.Observable
+import org.apache.fineract.FakeRemoteDataSource
+import org.apache.fineract.R
+import org.apache.fineract.data.datamanager.api.DataManagerCustomer
+import org.apache.fineract.data.models.customer.identification.Identification
+import org.apache.fineract.exceptions.NoConnectivityException
+import 
org.apache.fineract.ui.online.identification.identificationlist.IdentificationsContract
+import 
org.apache.fineract.ui.online.identification.identificationlist.IdentificationsPresenter
+import org.apache.fineract.util.RxSchedulersOverrideRule
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.Mockito.verify
+import org.mockito.junit.MockitoJUnitRunner
+
+@RunWith(MockitoJUnitRunner::class)
+class IdentificationPresenterTest {
+
+    @Rule
+    @JvmField
+    val overrideSchedulersRule = RxSchedulersOverrideRule()
+
+    @Mock
+    lateinit var mockedView: IdentificationsContract.View
+
+    @Mock
+    lateinit var mockedDataManagerCustomer: DataManagerCustomer
+
+    @Mock
+    lateinit var mockedContext: Context
+
+    lateinit var identificationPresenter: IdentificationsPresenter
+
+    lateinit var identifications: List<Identification>
+
+    val customerIdentifier: String = "identifier1"
+
+    @Before
+    fun setup() {
+        identificationPresenter = IdentificationsPresenter(mockedContext,
+                mockedDataManagerCustomer)
+        identificationPresenter.attachView(mockedView)
+        identifications = FakeRemoteDataSource.getIdentifications()
+    }
+
+    @Test
+    fun testGetIdentifications() {
+        
`when`(mockedDataManagerCustomer.fetchIdentifications(customerIdentifier))
+                .thenReturn(Observable.just(identifications))
+        identificationPresenter.fetchIdentifications(customerIdentifier)
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showIdentification(identifications)
+    }
+
+    @Test
+    fun testGetIdentificationsFail() {
+        
`when`(mockedDataManagerCustomer.fetchIdentifications(customerIdentifier))
+                .thenReturn(Observable.error(RuntimeException()))
+        
`when`(mockedContext.getString(R.string.error_fetching_identification_list))
+                .thenReturn("Error while fetching identification cards")
+        identificationPresenter.fetchIdentifications(customerIdentifier)
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showError("Error while fetching identification 
cards")
+    }
+
+    @Test
+    fun testGetIdentificationsFailDueToInternet() {
+        
`when`(mockedDataManagerCustomer.fetchIdentifications(customerIdentifier))
+                .thenReturn(Observable.error(NoConnectivityException()))
+        identificationPresenter.fetchIdentifications(customerIdentifier)
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showNoInternetConnection()
+    }
+
+    @After
+    fun tearDown() {
+        identificationPresenter.detachView()
+    }
+
+}
\ No newline at end of file
diff --git 
a/app/src/test/java/org/apache/fineract/online/LedgerPresenterTest.kt 
b/app/src/test/java/org/apache/fineract/online/LedgerPresenterTest.kt
new file mode 100644
index 0000000..b3ad2ef
--- /dev/null
+++ b/app/src/test/java/org/apache/fineract/online/LedgerPresenterTest.kt
@@ -0,0 +1,85 @@
+package org.apache.fineract.online
+
+import android.content.Context
+import io.reactivex.Observable
+import org.apache.fineract.FakeRemoteDataSource
+import org.apache.fineract.data.datamanager.DataManagerAccounting
+import org.apache.fineract.data.models.accounts.LedgerPage
+import org.apache.fineract.exceptions.NoConnectivityException
+import org.apache.fineract.ui.online.accounting.accounts.LedgerContract
+import org.apache.fineract.ui.online.accounting.ledgers.LedgerPresenter
+import org.apache.fineract.util.RxSchedulersOverrideRule
+import org.junit.After
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.Mockito.verify
+import org.mockito.junit.MockitoJUnitRunner
+
+@RunWith(MockitoJUnitRunner::class)
+class LedgerPresenterTest {
+
+    @Rule
+    @JvmField
+    val overrideSchedulersRule = RxSchedulersOverrideRule()
+
+    @Mock
+    lateinit var mockedView: LedgerContract.View
+
+    @Mock
+    lateinit var mockedAccountingDataManager: DataManagerAccounting
+
+    @Mock
+    lateinit var mockedContext: Context
+
+    lateinit var ledgerPresenter: LedgerPresenter
+
+    lateinit var ledgerPage: LedgerPage
+
+    @Before
+    fun setup() {
+        ledgerPresenter = LedgerPresenter(mockedContext, 
mockedAccountingDataManager)
+        ledgerPresenter.attachView(mockedView)
+        ledgerPage = FakeRemoteDataSource.getLedgerPage()
+    }
+
+    @Test
+    fun testGetLedgerPage() {
+        
`when`(mockedAccountingDataManager.fetchLedgers()).thenReturn(Observable.just(ledgerPage))
+        ledgerPresenter.getLedgersPage()
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showLedgers(ledgerPage.ledgers!!)
+    }
+
+    @Test
+    fun testGetLedgerPageEmpty() {
+        `when`(mockedAccountingDataManager.fetchLedgers())
+                .thenReturn(Observable.just(LedgerPage(ledgers = ArrayList())))
+        ledgerPresenter.getLedgersPage()
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showEmptyLedgers()
+    }
+
+    @Test
+    fun testGetLedgerPageFail() {
+        val exception = NoConnectivityException()
+        `when`(mockedAccountingDataManager.fetchLedgers())
+                .thenReturn(Observable.error(exception))
+        ledgerPresenter.getLedgersPage()
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showNoInternetConnection()
+    }
+
+    @After
+    fun tearDown() {
+        ledgerPresenter.detachView()
+    }
+
+}
\ No newline at end of file
diff --git 
a/app/src/test/java/org/apache/fineract/online/LoanAccountPresenterTest.kt 
b/app/src/test/java/org/apache/fineract/online/LoanAccountPresenterTest.kt
new file mode 100644
index 0000000..d148d97
--- /dev/null
+++ b/app/src/test/java/org/apache/fineract/online/LoanAccountPresenterTest.kt
@@ -0,0 +1,96 @@
+package org.apache.fineract.online
+
+import android.content.Context
+import io.reactivex.Observable
+import org.apache.fineract.FakeRemoteDataSource
+import org.apache.fineract.R
+import org.apache.fineract.data.datamanager.api.DataManagerLoans
+import org.apache.fineract.data.models.loan.LoanAccountPage
+import org.apache.fineract.exceptions.NoConnectivityException
+import 
org.apache.fineract.ui.online.loanaccounts.loanaccountlist.LoanAccountsContract
+import 
org.apache.fineract.ui.online.loanaccounts.loanaccountlist.LoanAccountsPresenter
+import org.apache.fineract.util.RxSchedulersOverrideRule
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.Mockito.verify
+import org.mockito.junit.MockitoJUnitRunner
+
+@RunWith(MockitoJUnitRunner::class)
+class LoanAccountPresenterTest {
+
+    @Rule
+    @JvmField
+    val overrideSchedulersRule = RxSchedulersOverrideRule()
+
+    @Mock
+    lateinit var mockedView: LoanAccountsContract.View
+
+    @Mock
+    lateinit var mockedLoansDataManager: DataManagerLoans
+
+    @Mock
+    lateinit var mockedContext: Context
+
+    lateinit var loanAccountsPresenter: LoanAccountsPresenter
+
+    lateinit var loanAccountPage: LoanAccountPage
+
+    val customerIdentifier: String = "identifier1"
+    val pageIndex: Int = 1
+    val size = 50
+
+    @Before
+    fun setup() {
+        loanAccountsPresenter = LoanAccountsPresenter(mockedContext, 
mockedLoansDataManager)
+        loanAccountsPresenter.attachView(mockedView)
+        loanAccountPage = FakeRemoteDataSource.getloanAccountPage()
+    }
+
+    @Test
+    fun testGetLoanAccounts() {
+        `when`(mockedLoansDataManager
+                .fetchCustomerLoanAccounts(customerIdentifier, pageIndex, 
size))
+                .thenReturn(Observable.just(loanAccountPage))
+        loanAccountsPresenter.fetchCustomerLoanAccounts(customerIdentifier, 
pageIndex)
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showLoanAccounts(loanAccountPage.loanAccounts)
+    }
+
+    @Test
+    fun testGetEmptyLoanAccounts() {
+        `when`(mockedLoansDataManager
+                .fetchCustomerLoanAccounts(customerIdentifier, pageIndex, 
size))
+                .thenReturn(Observable.just(LoanAccountPage(totalElements = 
0)))
+        `when`(mockedContext.getString(R.string.empty_customer_loans))
+                .thenReturn("Empty customer loans list")
+        loanAccountsPresenter.fetchCustomerLoanAccounts(customerIdentifier, 
pageIndex)
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showEmptyLoanAccounts(mockedContext
+                .getString(R.string.empty_customer_loans))
+    }
+
+    @Test
+    fun testGetAccountsPageFail() {
+        val exception = NoConnectivityException()
+        `when`(mockedLoansDataManager
+                .fetchCustomerLoanAccounts(customerIdentifier, pageIndex, 
size))
+                .thenReturn(Observable.error(exception))
+        loanAccountsPresenter.fetchCustomerLoanAccounts(customerIdentifier, 
pageIndex)
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showNoInternetConnection()
+    }
+
+    @After
+    fun tearDown() {
+        loanAccountsPresenter.detachView()
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/test/java/org/apache/fineract/online/LoginPresenterTest.kt 
b/app/src/test/java/org/apache/fineract/online/LoginPresenterTest.kt
new file mode 100644
index 0000000..fcac6b3
--- /dev/null
+++ b/app/src/test/java/org/apache/fineract/online/LoginPresenterTest.kt
@@ -0,0 +1,76 @@
+package org.apache.fineract.online
+
+import android.content.Context
+import io.reactivex.Observable
+import org.apache.fineract.FakeRemoteDataSource
+import org.apache.fineract.data.datamanager.api.DataManagerAuth
+import org.apache.fineract.data.models.Authentication
+import org.apache.fineract.exceptions.NoConnectivityException
+import org.apache.fineract.ui.online.login.LoginContract
+import org.apache.fineract.ui.online.login.LoginPresenter
+import org.apache.fineract.util.RxSchedulersOverrideRule
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.*
+import org.mockito.junit.MockitoJUnitRunner
+
+@RunWith(MockitoJUnitRunner::class)
+class LoginPresenterTest {
+
+    @Rule
+    @JvmField
+    val overrideSchedulersRule = RxSchedulersOverrideRule()
+
+    @Mock
+    lateinit var mockedView: LoginContract.View
+
+    @Mock
+    lateinit var mockedAuthDataManager: DataManagerAuth
+
+    @Mock
+    lateinit var mockedContext: Context
+
+    lateinit var loginPresenter: LoginPresenter
+
+    lateinit var authentication: Authentication
+
+    val username = "username"
+
+    val password = "password"
+
+    @Before
+    fun setup() {
+        loginPresenter = LoginPresenter(mockedAuthDataManager, mockedContext)
+        loginPresenter.attachView(mockedView)
+        authentication = FakeRemoteDataSource.getAuth()
+    }
+
+    @Test
+    fun testValidAuthentication() {
+        `when`(mockedAuthDataManager.login(username, 
password)).thenReturn(Observable.just(authentication))
+        loginPresenter.login(username, password)
+        verify(mockedView).showProgressDialog()
+        verify(mockedView).hideProgressDialog()
+        verify(mockedView).showUserLoginSuccessfully(authentication)
+    }
+
+    @Test
+    fun testFailedAuthenticationDueToConnectivity() {
+        val exception = NoConnectivityException()
+        `when`(mockedAuthDataManager.login(username, 
password)).thenReturn(Observable.error(exception))
+        loginPresenter.login(username, password)
+        verify(mockedView).showProgressDialog()
+        verify(mockedView).hideProgressDialog()
+        verify(mockedView, never()).showUserLoginSuccessfully(authentication)
+    }
+
+    @After
+    fun tearDown() {
+        loginPresenter.detachView()
+    }
+
+}
\ No newline at end of file
diff --git a/app/src/test/java/org/apache/fineract/online/RolesPresenterTest.kt 
b/app/src/test/java/org/apache/fineract/online/RolesPresenterTest.kt
new file mode 100644
index 0000000..8814edf
--- /dev/null
+++ b/app/src/test/java/org/apache/fineract/online/RolesPresenterTest.kt
@@ -0,0 +1,82 @@
+package org.apache.fineract.online
+
+import android.content.Context
+import io.reactivex.Observable
+import org.apache.fineract.FakeRemoteDataSource
+import org.apache.fineract.data.datamanager.api.DataManagerRoles
+import org.apache.fineract.data.models.rolesandpermission.Role
+import org.apache.fineract.exceptions.NoConnectivityException
+import org.apache.fineract.ui.online.roles.roleslist.RolesContract
+import org.apache.fineract.ui.online.roles.roleslist.RolesPresenter
+import org.apache.fineract.util.RxSchedulersOverrideRule
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.`when`
+import org.mockito.Mockito.verify
+import org.mockito.junit.MockitoJUnitRunner
+
+@RunWith(MockitoJUnitRunner::class)
+class RolesPresenterTest {
+
+    @Rule
+    @JvmField
+    val overrideSchedulersRule = RxSchedulersOverrideRule()
+
+    @Mock
+    lateinit var mockedView: RolesContract.View
+
+    @Mock
+    lateinit var mockedRoleDataManager: DataManagerRoles
+
+    @Mock
+    lateinit var mockedContext: Context
+
+    lateinit var rolePresenter: RolesPresenter
+
+    lateinit var roles: List<Role>
+
+    @Before
+    fun setup() {
+        rolePresenter = RolesPresenter(mockedContext, mockedRoleDataManager)
+        rolePresenter.attachView(mockedView)
+        roles = FakeRemoteDataSource.getRoles()
+    }
+
+    @Test
+    fun testGetRoles() {
+        
`when`(mockedRoleDataManager.getRoles()).thenReturn(Observable.just(roles))
+        rolePresenter.fetchRoles()
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showRoles(roles)
+    }
+
+    @Test
+    fun testGetRolesEmpty() {
+        
`when`(mockedRoleDataManager.getRoles()).thenReturn(Observable.just(ArrayList()))
+        rolePresenter.fetchRoles()
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showEmptyRoles()
+    }
+
+    @Test
+    fun testGetAccountsPageFail() {
+        val exception = NoConnectivityException()
+        
`when`(mockedRoleDataManager.getRoles()).thenReturn(Observable.error(exception))
+        rolePresenter.fetchRoles()
+        verify(mockedView).showProgressbar()
+        verify(mockedView).hideProgressbar()
+        verify(mockedView).showNoInternetConnection()
+    }
+
+    @After
+    fun tearDown() {
+        rolePresenter.detachView()
+    }
+
+}
\ No newline at end of file
diff --git 
a/app/src/test/java/org/apache/fineract/util/RxSchedulersOverrideRule.kt 
b/app/src/test/java/org/apache/fineract/util/RxSchedulersOverrideRule.kt
new file mode 100644
index 0000000..93b8bf0
--- /dev/null
+++ b/app/src/test/java/org/apache/fineract/util/RxSchedulersOverrideRule.kt
@@ -0,0 +1,47 @@
+package org.apache.fineract.util
+
+import io.reactivex.Scheduler
+import io.reactivex.android.plugins.RxAndroidPlugins
+import io.reactivex.functions.Function
+import io.reactivex.plugins.RxJavaPlugins
+import io.reactivex.schedulers.Schedulers
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
+import java.util.concurrent.Callable
+
+
+/**
+ * This rule registers SchedulerHooks for RxJava and RxAndroid to ensure that 
subscriptions
+ * always subscribeOn and observeOn Schedulers.immediate().
+ * Warning, this rule will reset RxAndroidPlugins and RxJavaPlugins before and 
after each test so
+ * if the application code uses RxJava plugins this may affect the behaviour 
of the testing method.
+ */
+class RxSchedulersOverrideRule : TestRule {
+
+    private val SCHEDULER_INSTANCE = Schedulers.trampoline()
+
+    private val schedulerFunction = Function<Scheduler, Scheduler> { 
SCHEDULER_INSTANCE }
+
+    private val schedulerFunctionLazy = Function<Callable<Scheduler>, 
Scheduler> { SCHEDULER_INSTANCE }
+
+    override fun apply(base: Statement, description: Description): Statement {
+        return object : Statement() {
+            @Throws(Throwable::class)
+            override fun evaluate() {
+                RxAndroidPlugins.reset()
+                
RxAndroidPlugins.setInitMainThreadSchedulerHandler(schedulerFunctionLazy)
+
+                RxJavaPlugins.reset()
+                RxJavaPlugins.setIoSchedulerHandler(schedulerFunction)
+                RxJavaPlugins.setNewThreadSchedulerHandler(schedulerFunction)
+                RxJavaPlugins.setComputationSchedulerHandler(schedulerFunction)
+
+                base.evaluate()
+
+                RxAndroidPlugins.reset()
+                RxJavaPlugins.reset()
+            }
+        }
+    }
+}
diff --git 
a/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker 
b/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000..ca6ee9c
--- /dev/null
+++ b/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
\ No newline at end of file

Reply via email to