package com.liato.bankdroid.appwidget;
import com.liato.bankdroid.banking.Account;
import com.liato.bankdroid.banking.Bank;
import com.liato.bankdroid.db.DBAdapter;
import com.liato.bankdroid.provider.IBankTypes;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
public class DataRetrieverTaskTest {
private static class TestableBank extends Bank {
private final int balanceBeforeUpdate;
private final int balanceAfterUpdate;
private boolean hasUpdated = false;
public TestableBank(int balanceBeforeUpdate, int balanceAfterUpdate) {
super(Mockito.mock(Context.class), 0);
this.balanceBeforeUpdate = balanceBeforeUpdate;
this.balanceAfterUpdate = balanceAfterUpdate;
}
@Override
public void update() {
hasUpdated = true;
}
@Override
public ArrayList<Account> getAccounts() {
int balance;
if (hasUpdated) {
balance = balanceAfterUpdate;
} else {
balance = balanceBeforeUpdate;
}
Account account = Mockito.mock(Account.class);
Mockito.when(account.getBalance()).thenReturn(BigDecimal.valueOf(balance));
ArrayList<Account> accounts = new ArrayList<>();
accounts.add(account);
return accounts;
}
@Override
public BigDecimal getBalance() {
return getAccounts().get(0).getBalance();
}
@Override
public int getBanktypeId() {
return IBankTypes.TESTBANK;
}
@Override
public String getName() {
return "Testbanken";
}
}
private static class TestableDataRetrieverTask extends AutoRefreshService.DataRetrieverTask {
private final Bank bank;
private boolean hasRefreshedWidget = false;
private TestableDataRetrieverTask(
AutoRefreshService autoRefreshService, SharedPreferences prefs, Bank bank) {
super(autoRefreshService, prefs);
this.bank = bank;
}
@Override
protected List<Bank> getBanks() {
List<Bank> returnMe = new ArrayList<>();
returnMe.add(bank);
return returnMe;
}
@NonNull
@Override
protected DBAdapter getDBAdapter() {
return Mockito.mock(DBAdapter.class);
}
@Override
protected void sendWidgetRefresh() {
hasRefreshedWidget = true;
}
}
@Test
public void testIncreaseLessThanNotificationThreshold() throws Exception {
AutoRefreshService autoRefreshService = Mockito.mock(AutoRefreshService.class);
SharedPreferences prefs = Mockito.mock(SharedPreferences.class);
Mockito.when(prefs.getString("notify_min_delta", "0")).thenReturn("300");
TestableDataRetrieverTask testMe =
new TestableDataRetrieverTask(autoRefreshService, prefs, new TestableBank(100, 200));
testMe.doInBackground();
Assert.assertTrue("Widget should have been refreshed", testMe.hasRefreshedWidget);
}
@Test
public void testNoChange() throws Exception {
AutoRefreshService autoRefreshService = Mockito.mock(AutoRefreshService.class);
SharedPreferences prefs = Mockito.mock(SharedPreferences.class);
Mockito.when(prefs.getString("notify_min_delta", "0")).thenReturn("0");
TestableDataRetrieverTask testMe =
new TestableDataRetrieverTask(autoRefreshService, prefs, new TestableBank(100, 100));
testMe.doInBackground();
Assert.assertFalse("Widget shouldn't have been refreshed", testMe.hasRefreshedWidget);
}
}