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