From c285c6d886b423bd90dd00123d47570c620f76df Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Thu, 18 Feb 2016 14:16:58 +0200 Subject: [PATCH 1/8] Temp commit. --- app/build.gradle | 2 + .../moneytracker/repo/AccountRepoTest.java | 16 ++++++ .../moneytracker/repo/AccountRepoTest.java | 51 +++++++++++++++++++ build.gradle | 2 +- 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java create mode 100644 app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java diff --git a/app/build.gradle b/app/build.gradle index 0bdbd53..55eb919 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,4 +54,6 @@ dependencies { compile 'com.google.dagger:dagger:2.0.1' apt 'com.google.dagger:dagger-compiler:2.0.1' provided 'org.glassfish:javax.annotation:10.0-b28' + + testCompile 'junit:junit:4.12' } \ No newline at end of file diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java new file mode 100644 index 0000000..40c7679 --- /dev/null +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java @@ -0,0 +1,16 @@ +package com.blogspot.e_kanivets.moneytracker.repo; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Created by evgenii_kanivets on 2/17/16. + */ +public class AccountRepoTest { + + @Test + public void testGetTable() throws Exception { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java new file mode 100644 index 0000000..48d92a0 --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java @@ -0,0 +1,51 @@ +package com.blogspot.e_kanivets.moneytracker.repo; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Created by evgenii_kanivets on 2/17/16. + */ +public class AccountRepoTest { + + @Test + public void testGetTable() throws Exception { + + } + + @Test + public void testCreate() throws Exception { + + } + + @Test + public void testUpdate() throws Exception { + + } + + @Test + public void testGetListFromCursor() throws Exception { + + } + + @Test + public void testRead() throws Exception { + + } + + @Test + public void testReadAll() throws Exception { + + } + + @Test + public void testDelete() throws Exception { + + } + + @Test + public void testReadWithCondition() throws Exception { + + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 8d36b58..75bc9f6 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.0' + classpath 'com.android.tools.build:gradle:1.5.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' } } From 6c8329f40bad5bea6a5a8ce29f0d3b518c7827bc Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 1 Mar 2016 11:32:07 +0200 Subject: [PATCH 2/8] #17[1h]. Add tests for AccountRepo. --- app/build.gradle | 11 ++-- .../moneytracker/repo/AccountRepoTest.java | 64 +++++++++++++++++-- .../moneytracker/repo/AccountRepoTest.java | 51 --------------- 3 files changed, 66 insertions(+), 60 deletions(-) delete mode 100644 app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java diff --git a/app/build.gradle b/app/build.gradle index 55eb919..ad57eee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,16 +44,19 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') + compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v4:23.0.0' compile 'com.android.support:appcompat-v7:23.0.0' - compile 'junit:junit:4.12' - compile 'org.mockito:mockito-core:2.0.2-beta' compile 'com.jakewharton:butterknife:7.0.1' - compile 'com.google.dagger:dagger:2.0.1' + apt 'com.google.dagger:dagger-compiler:2.0.1' provided 'org.glassfish:javax.annotation:10.0-b28' testCompile 'junit:junit:4.12' + testCompile 'org.mockito:mockito-core:2.0.43-beta' + + androidTestCompile "com.crittercism.dexmaker:dexmaker:1.4" + androidTestCompile "com.crittercism.dexmaker:dexmaker-dx:1.4" + androidTestCompile "com.crittercism.dexmaker:dexmaker-mockito:1.4" } \ No newline at end of file diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java index 40c7679..f240593 100644 --- a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java @@ -1,16 +1,70 @@ package com.blogspot.e_kanivets.moneytracker.repo; -import org.junit.Test; +import android.content.ContentValues; +import android.database.Cursor; -import static org.junit.Assert.*; +import com.blogspot.e_kanivets.moneytracker.DbHelper; +import com.blogspot.e_kanivets.moneytracker.model.Account; + +import junit.framework.TestCase; + +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; /** - * Created by evgenii_kanivets on 2/17/16. + * Android Test case. + * Created on 3/1/16. + * + * @author Evgenii Kanivets */ -public class AccountRepoTest { +public class AccountRepoTest extends TestCase { + private AccountRepo repo; + + public void setUp() throws Exception { + DbHelper mock = Mockito.mock(DbHelper.class); + repo = new AccountRepo(mock); + } + + public void tearDown() throws Exception { + repo = null; + } - @Test public void testGetTable() throws Exception { + assertEquals(DbHelper.TABLE_ACCOUNTS, repo.getTable()); + } + + public void testContentValues() throws Exception { + Account account = new Account(-1, "title1", 100, "NON"); + + ContentValues expected = new ContentValues(); + expected.put(DbHelper.TITLE_COLUMN, "title1"); + expected.put(DbHelper.CUR_SUM_COLUMN, 100); + expected.put(DbHelper.CURRENCY_COLUMN, "NON"); + + ContentValues actual = repo.contentValues(account); + + assertEquals(expected, actual); + } + + public void testGetListFromCursor() throws Exception { + assertEquals(new ArrayList(), repo.getListFromCursor(Mockito.mock(Cursor.class))); + + Cursor mockCursor = Mockito.mock(Cursor.class); + Mockito.when(mockCursor.moveToFirst()).thenReturn(true); + Mockito.when(mockCursor.getColumnIndex(DbHelper.ID_COLUMN)).thenReturn(1); + Mockito.when(mockCursor.getColumnIndex(DbHelper.TITLE_COLUMN)).thenReturn(2); + Mockito.when(mockCursor.getColumnIndex(DbHelper.CUR_SUM_COLUMN)).thenReturn(3); + Mockito.when(mockCursor.getColumnIndex(DbHelper.CURRENCY_COLUMN)).thenReturn(4); + Mockito.when(mockCursor.getLong(1)).thenReturn(1L); + Mockito.when(mockCursor.getString(2)).thenReturn("title"); + Mockito.when(mockCursor.getInt(3)).thenReturn(100); + Mockito.when(mockCursor.getString(4)).thenReturn("NON"); + + List expected = new ArrayList<>(); + expected.add(new Account(1, "title", 100, "NON")); + assertEquals(expected, repo.getListFromCursor(mockCursor)); } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java deleted file mode 100644 index 48d92a0..0000000 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.blogspot.e_kanivets.moneytracker.repo; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Created by evgenii_kanivets on 2/17/16. - */ -public class AccountRepoTest { - - @Test - public void testGetTable() throws Exception { - - } - - @Test - public void testCreate() throws Exception { - - } - - @Test - public void testUpdate() throws Exception { - - } - - @Test - public void testGetListFromCursor() throws Exception { - - } - - @Test - public void testRead() throws Exception { - - } - - @Test - public void testReadAll() throws Exception { - - } - - @Test - public void testDelete() throws Exception { - - } - - @Test - public void testReadWithCondition() throws Exception { - - } -} \ No newline at end of file From 811807c26b6a83d0b0e48480620460c177fe2314 Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 1 Mar 2016 11:47:46 +0200 Subject: [PATCH 3/8] #17[30m]. Justify Nullable, NonNull annotations. --- .../moneytracker/repo/AccountRepoTest.java | 4 ++++ .../moneytracker/repo/AccountRepo.java | 12 ++++++++--- .../moneytracker/repo/CategoryRepo.java | 12 ++++++++--- .../moneytracker/repo/ExchangeRateRepo.java | 12 ++++++++--- .../moneytracker/repo/RecordRepo.java | 10 ++++++++-- .../moneytracker/repo/TransferRepo.java | 12 ++++++++--- .../moneytracker/repo/base/BaseRepo.java | 20 ++++++++++++------- .../moneytracker/repo/base/IRepo.java | 8 ++++---- 8 files changed, 65 insertions(+), 25 deletions(-) diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java index f240593..fe51129 100644 --- a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java @@ -46,6 +46,8 @@ public void testContentValues() throws Exception { ContentValues actual = repo.contentValues(account); assertEquals(expected, actual); + + assertNull(repo.contentValues(null)); } public void testGetListFromCursor() throws Exception { @@ -66,5 +68,7 @@ public void testGetListFromCursor() throws Exception { expected.add(new Account(1, "title", 100, "NON")); assertEquals(expected, repo.getListFromCursor(mockCursor)); + + assertEquals(new ArrayList<>(), repo.getListFromCursor(null)); } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepo.java index cf46001..595e219 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepo.java @@ -3,6 +3,7 @@ import android.content.ContentValues; import android.database.Cursor; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.model.Account; @@ -26,15 +27,18 @@ public AccountRepo(DbHelper dbHelper) { super(dbHelper); } + @NonNull @Override protected String getTable() { return DbHelper.TABLE_ACCOUNTS; } - @NonNull + @Nullable @Override - protected ContentValues contentValues(Account account) { + protected ContentValues contentValues(@Nullable Account account) { ContentValues contentValues = new ContentValues(); + if (account == null) return null; + contentValues.put(DbHelper.TITLE_COLUMN, account.getTitle()); contentValues.put(DbHelper.CUR_SUM_COLUMN, account.getCurSum()); contentValues.put(DbHelper.CURRENCY_COLUMN, account.getCurrency()); @@ -42,9 +46,11 @@ protected ContentValues contentValues(Account account) { return contentValues; } + @NonNull @Override - protected List getListFromCursor(Cursor cursor) { + protected List getListFromCursor(@Nullable Cursor cursor) { List accountList = new ArrayList<>(); + if (cursor == null) return accountList; if (cursor.moveToFirst()) { // Get indexes of columns diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepo.java index 4d9547b..c0d6b54 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepo.java @@ -3,6 +3,7 @@ import android.content.ContentValues; import android.database.Cursor; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.model.Category; @@ -26,23 +27,28 @@ public CategoryRepo(DbHelper dbHelper) { super(dbHelper); } + @NonNull @Override protected String getTable() { return DbHelper.TABLE_CATEGORIES; } - @NonNull + @Nullable @Override - protected ContentValues contentValues(Category category) { + protected ContentValues contentValues(@Nullable Category category) { ContentValues contentValues = new ContentValues(); + if (category == null) return null; + contentValues.put(DbHelper.NAME_COLUMN, category.getName()); return contentValues; } + @NonNull @Override - protected List getListFromCursor(Cursor cursor) { + protected List getListFromCursor(@Nullable Cursor cursor) { List categoryList = new ArrayList<>(); + if (cursor == null) return categoryList; if (cursor.moveToFirst()) { int idColIndex = cursor.getColumnIndex(DbHelper.ID_COLUMN); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepo.java index 7597900..e81f273 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepo.java @@ -3,6 +3,7 @@ import android.content.ContentValues; import android.database.Cursor; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; @@ -26,15 +27,18 @@ public ExchangeRateRepo(DbHelper dbHelper) { super(dbHelper); } + @NonNull @Override protected String getTable() { return DbHelper.TABLE_RATES; } - @NonNull + @Nullable @Override - protected ContentValues contentValues(ExchangeRate exchangeRate) { + protected ContentValues contentValues(@Nullable ExchangeRate exchangeRate) { ContentValues contentValues = new ContentValues(); + if (exchangeRate == null) return null; + contentValues.put(DbHelper.CREATED_AT_COLUMN, exchangeRate.getCreatedAt()); contentValues.put(DbHelper.FROM_CURRENCY_COLUMN, exchangeRate.getFromCurrency()); contentValues.put(DbHelper.TO_CURRENCY_COLUMN, exchangeRate.getToCurrency()); @@ -43,9 +47,11 @@ protected ContentValues contentValues(ExchangeRate exchangeRate) { return contentValues; } + @NonNull @Override - protected List getListFromCursor(Cursor cursor) { + protected List getListFromCursor(@Nullable Cursor cursor) { List exchangeRateList = new ArrayList<>(); + if (cursor == null) return exchangeRateList; if (cursor.moveToFirst()) { int idColIndex = cursor.getColumnIndex(DbHelper.ID_COLUMN); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepo.java index a48e70e..3d39d70 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepo.java @@ -3,6 +3,7 @@ import android.content.ContentValues; import android.database.Cursor; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.model.Record; @@ -26,15 +27,18 @@ public RecordRepo(DbHelper dbHelper) { super(dbHelper); } + @NonNull @Override protected String getTable() { return DbHelper.TABLE_RECORDS; } - @NonNull + @Nullable @Override - protected ContentValues contentValues(Record record) { + protected ContentValues contentValues(@Nullable Record record) { ContentValues contentValues = new ContentValues(); + if (record == null) return null; + contentValues.put(DbHelper.TIME_COLUMN, record.getTime()); contentValues.put(DbHelper.TYPE_COLUMN, record.getType()); contentValues.put(DbHelper.TITLE_COLUMN, record.getTitle()); @@ -46,9 +50,11 @@ protected ContentValues contentValues(Record record) { return contentValues; } + @NonNull @Override protected List getListFromCursor(Cursor cursor) { List recordList = new ArrayList<>(); + if (cursor == null) return recordList; if (cursor.moveToFirst()) { int idColIndex = cursor.getColumnIndex(DbHelper.ID_COLUMN); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepo.java index 316eed9..9482151 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepo.java @@ -3,6 +3,7 @@ import android.content.ContentValues; import android.database.Cursor; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.model.Transfer; @@ -26,15 +27,18 @@ public TransferRepo(DbHelper dbHelper) { super(dbHelper); } + @NonNull @Override protected String getTable() { return DbHelper.TABLE_TRANSFERS; } - @NonNull + @Nullable @Override - protected ContentValues contentValues(Transfer transfer) { + protected ContentValues contentValues(@Nullable Transfer transfer) { ContentValues contentValues = new ContentValues(); + if (transfer == null) return null; + contentValues.put(DbHelper.TIME_COLUMN, transfer.getTime()); contentValues.put(DbHelper.FROM_ACCOUNT_ID_COLUMN, transfer.getFromAccountId()); contentValues.put(DbHelper.TO_ACCOUNT_ID_COLUMN, transfer.getToAccountId()); @@ -44,9 +48,11 @@ protected ContentValues contentValues(Transfer transfer) { return contentValues; } + @NonNull @Override - protected List getListFromCursor(Cursor cursor) { + protected List getListFromCursor(@Nullable Cursor cursor) { List accountList = new ArrayList<>(); + if (cursor == null) return accountList; if (cursor.moveToFirst()) { // Get indexes of columns diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/BaseRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/BaseRepo.java index 05b093e..c4627ac 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/BaseRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/BaseRepo.java @@ -27,16 +27,18 @@ public BaseRepo(DbHelper dbHelper) { this.dbHelper = dbHelper; } + @NonNull abstract protected String getTable(); - @NonNull - abstract protected ContentValues contentValues(T instance); + @Nullable + abstract protected ContentValues contentValues(@Nullable T instance); - abstract protected List getListFromCursor(Cursor cursor); + @NonNull + abstract protected List getListFromCursor(@Nullable Cursor cursor); @Nullable @Override - public T create(T instance) { + public T create(@Nullable T instance) { SQLiteDatabase db = dbHelper.getWritableDatabase(); long id = db.insert(getTable(), null, contentValues(instance)); @@ -64,7 +66,9 @@ public T read(long id) { @Nullable @Override - public T update(T instance) { + public T update(@Nullable T instance) { + if (instance == null) return null; + SQLiteDatabase db = dbHelper.getWritableDatabase(); String[] args = new String[]{Long.valueOf(instance.getId()).toString()}; @@ -89,7 +93,9 @@ public List readAll() { } @Override - public boolean delete(T instance) { + public boolean delete(@Nullable T instance) { + if (instance == null) return false; + SQLiteDatabase db = dbHelper.getWritableDatabase(); String[] args = new String[]{Long.toString(instance.getId())}; @@ -104,7 +110,7 @@ public boolean delete(T instance) { @NonNull @Override - public List readWithCondition(String condition, String[] args) { + public List readWithCondition(@Nullable String condition, @Nullable String[] args) { SQLiteDatabase db = dbHelper.getReadableDatabase(); // Read accounts table from db diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/IRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/IRepo.java index 497a122..18e2740 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/IRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/IRepo.java @@ -20,7 +20,7 @@ public interface IRepo { * @return created record or null if can't create. */ @Nullable - T create(T instance); + T create(@Nullable T instance); /** * Reads a record from storage. @@ -38,7 +38,7 @@ public interface IRepo { * @return updated record or null if can't update. */ @Nullable - T update(T instance); + T update(@Nullable T instance); /** * Deletes a record from storage. @@ -46,7 +46,7 @@ public interface IRepo { * @param instance is entity instance to be deleted. * @return true if deleted or false if not. */ - boolean delete(T instance); + boolean delete(@Nullable T instance); /** * Reads all records from storage. @@ -65,5 +65,5 @@ public interface IRepo { * @return list of matched records. List can't be null, but may be zero sized. */ @NonNull - List readWithCondition(String condition, String[] args); + List readWithCondition(@Nullable String condition, @Nullable String[] args); } \ No newline at end of file From f361f02a45079c4dceaa851a7cffeadcef254ae7 Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 1 Mar 2016 12:03:09 +0200 Subject: [PATCH 4/8] #17[30m]. Add tests for CategoryRepo. --- .../moneytracker/repo/AccountRepoTest.java | 2 + .../moneytracker/repo/CategoryRepoTest.java | 72 +++++++++++++++++++ .../moneytracker/model/Account.java | 22 +++--- .../moneytracker/model/Category.java | 9 +++ 4 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepoTest.java diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java index fe51129..f556ba9 100644 --- a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java @@ -23,11 +23,13 @@ public class AccountRepoTest extends TestCase { private AccountRepo repo; public void setUp() throws Exception { + super.setUp(); DbHelper mock = Mockito.mock(DbHelper.class); repo = new AccountRepo(mock); } public void tearDown() throws Exception { + super.tearDown(); repo = null; } diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepoTest.java new file mode 100644 index 0000000..a96cf7e --- /dev/null +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepoTest.java @@ -0,0 +1,72 @@ +package com.blogspot.e_kanivets.moneytracker.repo; + +import android.content.ContentValues; +import android.database.Cursor; + +import com.blogspot.e_kanivets.moneytracker.DbHelper; +import com.blogspot.e_kanivets.moneytracker.model.Category; + +import junit.framework.TestCase; + +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; + +/** + * Android Test case. + * Created on 3/1/16. + * + * @author Evgenii Kanivets + */ +public class CategoryRepoTest extends TestCase { + private CategoryRepo repo; + + @Override + public void setUp() throws Exception { + super.setUp(); + DbHelper mock = Mockito.mock(DbHelper.class); + repo = new CategoryRepo(mock); + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + repo = null; + } + + public void testGetTable() throws Exception { + assertEquals(DbHelper.TABLE_CATEGORIES, repo.getTable()); + } + + public void testContentValues() throws Exception { + Category category = new Category(1, "category"); + + ContentValues expected = new ContentValues(); + expected.put(DbHelper.NAME_COLUMN, "category"); + + ContentValues actual = repo.contentValues(category); + + assertEquals(expected, actual); + + assertNull(repo.contentValues(null)); + } + + public void testGetListFromCursor() throws Exception { + assertEquals(new ArrayList(), repo.getListFromCursor(Mockito.mock(Cursor.class))); + + Cursor mockCursor = Mockito.mock(Cursor.class); + Mockito.when(mockCursor.moveToFirst()).thenReturn(true); + Mockito.when(mockCursor.getColumnIndex(DbHelper.ID_COLUMN)).thenReturn(1); + Mockito.when(mockCursor.getColumnIndex(DbHelper.NAME_COLUMN)).thenReturn(2); + Mockito.when(mockCursor.getLong(1)).thenReturn(1L); + Mockito.when(mockCursor.getString(2)).thenReturn("category"); + + List expected = new ArrayList<>(); + expected.add(new Category(1, "category")); + + assertEquals(expected, repo.getListFromCursor(mockCursor)); + + assertEquals(new ArrayList<>(), repo.getListFromCursor(null)); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Account.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Account.java index 68a28a2..f1f6c02 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Account.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Account.java @@ -59,6 +59,18 @@ public void take(int amount) { curSum -= amount; } + @SuppressWarnings("SimplifiableIfStatement") + @Override + public boolean equals(Object o) { + if (o instanceof Account) { + Account account = (Account) o; + return this.id == account.getId() + && this.title.equals(account.getTitle()) + && this.curSum == account.getCurSum() + && this.currency.equals(account.getCurrency()); + } else return false; + } + @SuppressWarnings("StringBufferReplaceableByString") @Override public String toString() { @@ -72,14 +84,4 @@ public String toString() { return sb.toString(); } - - @SuppressWarnings("SimplifiableIfStatement") - @Override - public boolean equals(Object o) { - if (o instanceof Account) { - return ((Account) o).getId() == getId(); - } else { - return false; - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Category.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Category.java index bf77459..15b5e72 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Category.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Category.java @@ -30,6 +30,15 @@ public String getName() { return name; } + @Override + public boolean equals(Object o) { + if (o instanceof Category) { + Category category = (Category) o; + return this.id == category.getId() + && this.name.equals(category.getName()); + } else return false; + } + @SuppressWarnings("StringBufferReplaceableByString") @Override public String toString() { From adb6ac0d04dfbcc410d1d891bf039252e3021595 Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 1 Mar 2016 12:23:32 +0200 Subject: [PATCH 5/8] #17[30m]. Add tests for ExchangeRateRepo. --- .../moneytracker/repo/AccountRepoTest.java | 2 + .../repo/ExchangeRateRepoTest.java | 81 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepoTest.java diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java index f556ba9..88ab486 100644 --- a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java @@ -22,12 +22,14 @@ public class AccountRepoTest extends TestCase { private AccountRepo repo; + @Override public void setUp() throws Exception { super.setUp(); DbHelper mock = Mockito.mock(DbHelper.class); repo = new AccountRepo(mock); } + @Override public void tearDown() throws Exception { super.tearDown(); repo = null; diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepoTest.java new file mode 100644 index 0000000..dc9b203 --- /dev/null +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepoTest.java @@ -0,0 +1,81 @@ +package com.blogspot.e_kanivets.moneytracker.repo; + +import android.content.ContentValues; +import android.database.Cursor; + +import com.blogspot.e_kanivets.moneytracker.DbHelper; +import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; + +import junit.framework.TestCase; + +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; + +/** + * Android Test case. + * Created on 3/1/16. + * + * @author Evgenii Kanivets + */ +public class ExchangeRateRepoTest extends TestCase { + private ExchangeRateRepo repo; + + @Override + public void setUp() throws Exception { + super.setUp(); + DbHelper mock = Mockito.mock(DbHelper.class); + repo = new ExchangeRateRepo(mock); + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + repo = null; + } + + public void testGetTable() throws Exception { + assertEquals(DbHelper.TABLE_RATES, repo.getTable()); + } + + public void testContentValues() throws Exception { + ExchangeRate rate = new ExchangeRate(1, 1, "NON", "USD", 100); + + ContentValues expected = new ContentValues(); + expected.put(DbHelper.CREATED_AT_COLUMN, 1L); + expected.put(DbHelper.FROM_CURRENCY_COLUMN, "NON"); + expected.put(DbHelper.TO_CURRENCY_COLUMN, "USD"); + expected.put(DbHelper.AMOUNT_COLUMN, 100.0); + + ContentValues actual = repo.contentValues(rate); + + assertEquals(expected, actual); + + assertNull(repo.contentValues(null)); + } + + public void testGetListFromCursor() throws Exception { + assertEquals(new ArrayList(), repo.getListFromCursor(Mockito.mock(Cursor.class))); + + Cursor mockCursor = Mockito.mock(Cursor.class); + Mockito.when(mockCursor.moveToFirst()).thenReturn(true); + Mockito.when(mockCursor.getColumnIndex(DbHelper.ID_COLUMN)).thenReturn(1); + Mockito.when(mockCursor.getColumnIndex(DbHelper.CREATED_AT_COLUMN)).thenReturn(2); + Mockito.when(mockCursor.getColumnIndex(DbHelper.FROM_CURRENCY_COLUMN)).thenReturn(3); + Mockito.when(mockCursor.getColumnIndex(DbHelper.TO_CURRENCY_COLUMN)).thenReturn(4); + Mockito.when(mockCursor.getColumnIndex(DbHelper.AMOUNT_COLUMN)).thenReturn(5); + Mockito.when(mockCursor.getLong(1)).thenReturn(1L); + Mockito.when(mockCursor.getLong(2)).thenReturn(1L); + Mockito.when(mockCursor.getString(3)).thenReturn("NON"); + Mockito.when(mockCursor.getString(4)).thenReturn("USD"); + Mockito.when(mockCursor.getDouble(5)).thenReturn(100.0); + + List expected = new ArrayList<>(); + expected.add(new ExchangeRate(1, 1, "NON", "USD", 100.0)); + + assertEquals(expected, repo.getListFromCursor(mockCursor)); + + assertEquals(new ArrayList<>(), repo.getListFromCursor(null)); + } +} \ No newline at end of file From b891412e21842da24f98cc2f15c97272b4d6a6bd Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 1 Mar 2016 16:35:45 +0200 Subject: [PATCH 6/8] #17[2h]. Refactor Record to contain nested objects. Add tests for RecordRepo. --- .../moneytracker/repo/AccountRepoTest.java | 3 +- .../moneytracker/repo/CategoryRepoTest.java | 3 +- .../repo/ExchangeRateRepoTest.java | 3 +- .../moneytracker/repo/RecordRepoTest.java | 91 +++++++++++++ .../activity/AddAccountActivity.java | 2 +- .../activity/AddExchangeRateActivity.java | 2 +- .../activity/AddRecordActivity.java | 24 ++-- .../moneytracker/activity/ReportActivity.java | 2 +- .../activity/TransferActivity.java | 4 +- .../moneytracker/adapter/AccountAdapter.java | 2 +- .../adapter/ExchangeRateAdapter.java | 2 +- .../moneytracker/adapter/RecordAdapter.java | 4 +- .../controller/AccountController.java | 10 +- .../controller/CategoryController.java | 2 +- .../controller/ExchangeRateController.java | 2 +- .../controller/RecordController.java | 60 +++++++-- .../controller/TransferController.java | 2 +- .../{model => entity}/Account.java | 55 +++++--- .../moneytracker/entity/Category.java | 84 ++++++++++++ .../{model => entity}/ExchangeRate.java | 46 ++++++- .../{model => entity}/Record.java | 123 ++++++------------ .../{model => entity}/Transfer.java | 57 +++++++- .../moneytracker/entity/base/BaseEntity.java | 21 +++ .../{model => entity/base}/IEntity.java | 2 +- .../moneytracker/fragment/ExportFragment.java | 4 +- .../fragment/RecordsFragment.java | 4 +- .../moneytracker/model/Category.java | 52 -------- .../moneytracker/repo/AccountRepo.java | 2 +- .../moneytracker/repo/CategoryRepo.java | 2 +- .../moneytracker/repo/ExchangeRateRepo.java | 2 +- .../moneytracker/repo/RecordRepo.java | 10 +- .../moneytracker/repo/TransferRepo.java | 2 +- .../moneytracker/repo/base/BaseRepo.java | 6 +- .../report/ExchangeRateProvider.java | 4 +- .../moneytracker/report/Report.java | 16 +-- .../moneytracker/report/ReportMaker.java | 4 +- .../report/base/IExchangeRateProvider.java | 4 +- .../report/model/SummaryRecord.java | 2 +- 38 files changed, 486 insertions(+), 234 deletions(-) create mode 100644 app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepoTest.java rename app/src/main/java/com/blogspot/e_kanivets/moneytracker/{model => entity}/Account.java (60%) create mode 100644 app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Category.java rename app/src/main/java/com/blogspot/e_kanivets/moneytracker/{model => entity}/ExchangeRate.java (62%) rename app/src/main/java/com/blogspot/e_kanivets/moneytracker/{model => entity}/Record.java (56%) rename app/src/main/java/com/blogspot/e_kanivets/moneytracker/{model => entity}/Transfer.java (53%) create mode 100644 app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/base/BaseEntity.java rename app/src/main/java/com/blogspot/e_kanivets/moneytracker/{model => entity/base}/IEntity.java (73%) delete mode 100644 app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Category.java diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java index 88ab486..01e74ee 100644 --- a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepoTest.java @@ -4,7 +4,7 @@ import android.database.Cursor; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.Account; +import com.blogspot.e_kanivets.moneytracker.entity.Account; import junit.framework.TestCase; @@ -63,6 +63,7 @@ public void testGetListFromCursor() throws Exception { Mockito.when(mockCursor.getColumnIndex(DbHelper.TITLE_COLUMN)).thenReturn(2); Mockito.when(mockCursor.getColumnIndex(DbHelper.CUR_SUM_COLUMN)).thenReturn(3); Mockito.when(mockCursor.getColumnIndex(DbHelper.CURRENCY_COLUMN)).thenReturn(4); + Mockito.when(mockCursor.getLong(1)).thenReturn(1L); Mockito.when(mockCursor.getString(2)).thenReturn("title"); Mockito.when(mockCursor.getInt(3)).thenReturn(100); diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepoTest.java index a96cf7e..3e82695 100644 --- a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepoTest.java +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepoTest.java @@ -4,7 +4,7 @@ import android.database.Cursor; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.Category; +import com.blogspot.e_kanivets.moneytracker.entity.Category; import junit.framework.TestCase; @@ -59,6 +59,7 @@ public void testGetListFromCursor() throws Exception { Mockito.when(mockCursor.moveToFirst()).thenReturn(true); Mockito.when(mockCursor.getColumnIndex(DbHelper.ID_COLUMN)).thenReturn(1); Mockito.when(mockCursor.getColumnIndex(DbHelper.NAME_COLUMN)).thenReturn(2); + Mockito.when(mockCursor.getLong(1)).thenReturn(1L); Mockito.when(mockCursor.getString(2)).thenReturn("category"); diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepoTest.java index dc9b203..ff0f4c8 100644 --- a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepoTest.java +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepoTest.java @@ -4,7 +4,7 @@ import android.database.Cursor; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; import junit.framework.TestCase; @@ -65,6 +65,7 @@ public void testGetListFromCursor() throws Exception { Mockito.when(mockCursor.getColumnIndex(DbHelper.FROM_CURRENCY_COLUMN)).thenReturn(3); Mockito.when(mockCursor.getColumnIndex(DbHelper.TO_CURRENCY_COLUMN)).thenReturn(4); Mockito.when(mockCursor.getColumnIndex(DbHelper.AMOUNT_COLUMN)).thenReturn(5); + Mockito.when(mockCursor.getLong(1)).thenReturn(1L); Mockito.when(mockCursor.getLong(2)).thenReturn(1L); Mockito.when(mockCursor.getString(3)).thenReturn("NON"); diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepoTest.java new file mode 100644 index 0000000..092c9dd --- /dev/null +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepoTest.java @@ -0,0 +1,91 @@ +package com.blogspot.e_kanivets.moneytracker.repo; + +import android.content.ContentValues; +import android.database.Cursor; + +import com.blogspot.e_kanivets.moneytracker.DbHelper; +import com.blogspot.e_kanivets.moneytracker.entity.Record; + +import junit.framework.TestCase; + +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; + +/** + * Android Test case. + * Created on 3/1/16. + * + * @author Evgenii Kanivets + */ +public class RecordRepoTest extends TestCase { + private RecordRepo repo; + + @Override + public void setUp() throws Exception { + super.setUp(); + DbHelper mock = Mockito.mock(DbHelper.class); + repo = new RecordRepo(mock); + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + repo = null; + } + + public void testGetTable() throws Exception { + assertEquals(DbHelper.TABLE_RECORDS, repo.getTable()); + } + + public void testContentValues() throws Exception { + Record record = new Record(1, 1, Record.TYPE_EXPENSE, "title", 1, 100, 1, "NON"); + + ContentValues expected = new ContentValues(); + expected.put(DbHelper.TIME_COLUMN, 1L); + expected.put(DbHelper.TYPE_COLUMN, Record.TYPE_EXPENSE); + expected.put(DbHelper.TITLE_COLUMN, "title"); + expected.put(DbHelper.CATEGORY_ID_COLUMN, 1L); + expected.put(DbHelper.PRICE_COLUMN, 100); + expected.put(DbHelper.ACCOUNT_ID_COLUMN, 1L); + expected.put(DbHelper.CURRENCY_COLUMN, "NON"); + + ContentValues actual = repo.contentValues(record); + + assertEquals(expected, actual); + + assertNull(repo.contentValues(null)); + } + + public void testGetListFromCursor() throws Exception { + assertEquals(new ArrayList(), repo.getListFromCursor(Mockito.mock(Cursor.class))); + + Cursor mockCursor = Mockito.mock(Cursor.class); + Mockito.when(mockCursor.moveToFirst()).thenReturn(true); + Mockito.when(mockCursor.getColumnIndex(DbHelper.ID_COLUMN)).thenReturn(1); + Mockito.when(mockCursor.getColumnIndex(DbHelper.TIME_COLUMN)).thenReturn(2); + Mockito.when(mockCursor.getColumnIndex(DbHelper.TYPE_COLUMN)).thenReturn(3); + Mockito.when(mockCursor.getColumnIndex(DbHelper.TITLE_COLUMN)).thenReturn(4); + Mockito.when(mockCursor.getColumnIndex(DbHelper.CATEGORY_ID_COLUMN)).thenReturn(5); + Mockito.when(mockCursor.getColumnIndex(DbHelper.PRICE_COLUMN)).thenReturn(6); + Mockito.when(mockCursor.getColumnIndex(DbHelper.ACCOUNT_ID_COLUMN)).thenReturn(7); + Mockito.when(mockCursor.getColumnIndex(DbHelper.CURRENCY_COLUMN)).thenReturn(8); + + Mockito.when(mockCursor.getLong(1)).thenReturn(1L); + Mockito.when(mockCursor.getLong(2)).thenReturn(1L); + Mockito.when(mockCursor.getInt(3)).thenReturn(Record.TYPE_EXPENSE); + Mockito.when(mockCursor.getString(4)).thenReturn("title"); + Mockito.when(mockCursor.getLong(5)).thenReturn(1L); + Mockito.when(mockCursor.getInt(6)).thenReturn(100); + Mockito.when(mockCursor.getLong(7)).thenReturn(1L); + Mockito.when(mockCursor.getString(8)).thenReturn("NON"); + + List expected = new ArrayList<>(); + expected.add(new Record(1, 1, Record.TYPE_EXPENSE, "title", 1, 100, 1, "NON")); + + assertEquals(expected, repo.getListFromCursor(mockCursor)); + + assertEquals(new ArrayList<>(), repo.getListFromCursor(null)); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java index 8b14016..8501b3c 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java @@ -10,7 +10,7 @@ import com.blogspot.e_kanivets.moneytracker.activity.base.BaseActivity; import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.controller.AccountController; -import com.blogspot.e_kanivets.moneytracker.model.Account; +import com.blogspot.e_kanivets.moneytracker.entity.Account; import com.blogspot.e_kanivets.moneytracker.repo.AccountRepo; import com.blogspot.e_kanivets.moneytracker.util.CurrencyProvider; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExchangeRateActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExchangeRateActivity.java index 4e48466..8848388 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExchangeRateActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExchangeRateActivity.java @@ -10,7 +10,7 @@ import com.blogspot.e_kanivets.moneytracker.R; import com.blogspot.e_kanivets.moneytracker.activity.base.BaseActivity; import com.blogspot.e_kanivets.moneytracker.controller.ExchangeRateController; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; import com.blogspot.e_kanivets.moneytracker.repo.ExchangeRateRepo; import com.blogspot.e_kanivets.moneytracker.util.CurrencyProvider; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddRecordActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddRecordActivity.java index 1fe3bb3..222ea86 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddRecordActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddRecordActivity.java @@ -17,8 +17,9 @@ import com.blogspot.e_kanivets.moneytracker.controller.CategoryController; import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.controller.RecordController; -import com.blogspot.e_kanivets.moneytracker.model.Account; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Account; +import com.blogspot.e_kanivets.moneytracker.entity.Category; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.repo.AccountRepo; import com.blogspot.e_kanivets.moneytracker.repo.CategoryRepo; import com.blogspot.e_kanivets.moneytracker.repo.RecordRepo; @@ -84,6 +85,7 @@ record = getIntent().getParcelableExtra(KEY_RECORD); return mode != null && type != -1 && (!mode.equals(Mode.MODE_EDIT) || record != null); } + @SuppressWarnings("deprecation") @SuppressLint("SetTextI18n") @Override protected void initViews() { @@ -100,12 +102,12 @@ protected void initViews() { //Add texts to dialog if it's edit dialog if (mode == Mode.MODE_EDIT) { etTitle.setText(record.getTitle()); - etCategory.setText(record.getCategory()); + etCategory.setText(record.getCategory().getName()); etPrice.setText(Integer.toString(record.getPrice())); for (int i = 0; i < accountList.size(); i++) { Account account = accountList.get(i); - if (account.getId() == record.getAccountId()) { + if (account.getId() == record.getAccount().getId()) { spinnerAccount.setSelection(i); } } @@ -190,25 +192,21 @@ protected boolean doRecord(String title, String category, int price, Account acc switch (type) { case Record.TYPE_EXPENSE: recordController.create(new Record(new Date().getTime(), Record.TYPE_EXPENSE, - title, category, price, account.getId(), - account.getCurrency())); + title, new Category(category), price, account, account.getCurrency())); return true; case Record.TYPE_INCOME: recordController.create(new Record(new Date().getTime(), Record.TYPE_INCOME, - title, category, price, account.getId(), account.getCurrency())); + title, new Category(category), price, account, account.getCurrency())); return true; default: return false; } } else if (mode == Mode.MODE_EDIT) { - record.setTitle(title); - record.setCategory(category); - record.setPrice(price); - record.setAccountId(account.getId()); - record.setCurrency(account.getCurrency()); - recordController.update(record); + Record updatedRecord = new Record(record.getId(), record.getTime(), record.getType(), + title, new Category(category), price, account, account.getCurrency()); + recordController.update(updatedRecord); return true; } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/ReportActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/ReportActivity.java index d032b3a..11fed64 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/ReportActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/ReportActivity.java @@ -11,7 +11,7 @@ import com.blogspot.e_kanivets.moneytracker.controller.ExchangeRateController; import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.model.Period; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.repo.AccountRepo; import com.blogspot.e_kanivets.moneytracker.repo.ExchangeRateRepo; import com.blogspot.e_kanivets.moneytracker.report.ReportConverter; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/TransferActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/TransferActivity.java index 6ccc391..690c97a 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/TransferActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/TransferActivity.java @@ -11,8 +11,8 @@ import com.blogspot.e_kanivets.moneytracker.controller.AccountController; import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.controller.TransferController; -import com.blogspot.e_kanivets.moneytracker.model.Account; -import com.blogspot.e_kanivets.moneytracker.model.Transfer; +import com.blogspot.e_kanivets.moneytracker.entity.Account; +import com.blogspot.e_kanivets.moneytracker.entity.Transfer; import com.blogspot.e_kanivets.moneytracker.repo.AccountRepo; import com.blogspot.e_kanivets.moneytracker.repo.TransferRepo; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/AccountAdapter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/AccountAdapter.java index 947b175..8127491 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/AccountAdapter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/AccountAdapter.java @@ -9,7 +9,7 @@ import android.widget.TextView; import com.blogspot.e_kanivets.moneytracker.R; -import com.blogspot.e_kanivets.moneytracker.model.Account; +import com.blogspot.e_kanivets.moneytracker.entity.Account; import java.util.List; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExchangeRateAdapter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExchangeRateAdapter.java index fc579b7..fcfd78b 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExchangeRateAdapter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExchangeRateAdapter.java @@ -9,7 +9,7 @@ import android.widget.TextView; import com.blogspot.e_kanivets.moneytracker.R; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; import java.util.List; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/RecordAdapter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/RecordAdapter.java index 69ef25f..9d13023 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/RecordAdapter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/RecordAdapter.java @@ -9,7 +9,7 @@ import android.widget.TextView; import com.blogspot.e_kanivets.moneytracker.R; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import java.text.SimpleDateFormat; import java.util.Date; @@ -85,7 +85,7 @@ public View getView(final int position, View convertView, ViewGroup parent) { viewHolder.tvPrice.setText((record.isIncome() ? "+ " : "- ") + Integer.toString(record.getPrice())); viewHolder.tvTitle.setText(record.getTitle()); - viewHolder.tvCategory.setText(record.getCategory()); + viewHolder.tvCategory.setText(record.getCategory().getName()); viewHolder.tvCurrency.setText(record.getCurrency()); return convertView; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/AccountController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/AccountController.java index 43c49c6..b5b2231 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/AccountController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/AccountController.java @@ -3,9 +3,9 @@ import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.controller.base.BaseController; -import com.blogspot.e_kanivets.moneytracker.model.Account; -import com.blogspot.e_kanivets.moneytracker.model.Record; -import com.blogspot.e_kanivets.moneytracker.model.Transfer; +import com.blogspot.e_kanivets.moneytracker.entity.Account; +import com.blogspot.e_kanivets.moneytracker.entity.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Transfer; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; /** @@ -25,7 +25,7 @@ public AccountController(IRepo accountRepo) { public boolean recordAdded(@Nullable Record record) { if (record == null) return false; - Account account = repo.read(record.getAccountId()); + Account account = repo.read(record.getAccount().getId()); if (account == null) return false; switch (record.getType()) { @@ -49,7 +49,7 @@ public boolean recordAdded(@Nullable Record record) { public boolean recordDeleted(@Nullable Record record) { if (record == null) return false; - Account account = repo.read(record.getAccountId()); + Account account = repo.read(record.getAccount().getId()); if (account == null) return false; switch (record.getType()) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CategoryController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CategoryController.java index 9a1013e..2e27ea1 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CategoryController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CategoryController.java @@ -2,7 +2,7 @@ import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.controller.base.BaseController; -import com.blogspot.e_kanivets.moneytracker.model.Category; +import com.blogspot.e_kanivets.moneytracker.entity.Category; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; import java.util.List; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/ExchangeRateController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/ExchangeRateController.java index f53ef77..0ddc5c1 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/ExchangeRateController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/ExchangeRateController.java @@ -1,7 +1,7 @@ package com.blogspot.e_kanivets.moneytracker.controller; import com.blogspot.e_kanivets.moneytracker.controller.base.BaseController; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; /** diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/RecordController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/RecordController.java index 73caa25..a8f72e6 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/RecordController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/RecordController.java @@ -1,10 +1,14 @@ package com.blogspot.e_kanivets.moneytracker.controller; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + import com.blogspot.e_kanivets.moneytracker.DbHelper; import com.blogspot.e_kanivets.moneytracker.controller.base.BaseController; -import com.blogspot.e_kanivets.moneytracker.model.Category; +import com.blogspot.e_kanivets.moneytracker.entity.Account; +import com.blogspot.e_kanivets.moneytracker.entity.Category; import com.blogspot.e_kanivets.moneytracker.model.Period; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; import java.util.ArrayList; @@ -30,7 +34,7 @@ public RecordController(IRepo recordRepo, CategoryController categoryCon @Override @SuppressWarnings("SimplifiableIfStatement") public Record create(Record record) { - record.setCategoryId(categoryController.readOrCreate(record.getCategory()).getId()); + record = validateRecord(record); Record createdRecord = repo.create(record); if (createdRecord == null) return null; @@ -43,9 +47,9 @@ public Record create(Record record) { @Override @SuppressWarnings("SimplifiableIfStatement") public Record update(Record record) { - record.setCategoryId(categoryController.readOrCreate(record.getCategory()).getId()); + record = validateRecord(record); - Record oldRecord = repo.read(record.getId()); + Record oldRecord = read(record.getId()); Record updatedRecord = repo.update(record); if (updatedRecord == null) return null; @@ -62,12 +66,45 @@ public boolean delete(Record record) { else return false; } + @Nullable + @Override + public Record read(long id) { + List list = readWithCondition("id=?", new String[]{Long.toString(id)}); + + if (list.size() == 1) return list.get(0); + else return null; + } + + @NonNull + @Override + public List readAll() { + return readWithCondition(null, null); + } + + @NonNull + @Override + public List readWithCondition(String condition, String[] args) { + List recordList = super.readWithCondition(condition, args); + + // Data read from DB through Repo layer doesn't contain right nested objects, so construct them + List completedRecordList = new ArrayList<>(); + for (Record record : recordList) { + Category category = categoryController.read(record.getCategory().getId()); + Account account = accountController.read(record.getAccount().getId()); + + completedRecordList.add(new Record(record.getId(), record.getTime(), record.getType(), + record.getTitle(), category, record.getPrice(), account, record.getCurrency())); + } + + return completedRecordList; + } + public List getRecordsForPeriod(Period period) { String condition = DbHelper.TIME_COLUMN + " BETWEEN ? AND ?"; String[] args = new String[]{Long.toString(period.getFirst().getTime()), Long.toString(period.getLast().getTime())}; - return repo.readWithCondition(condition, args); + return readWithCondition(condition, args); } public List getRecordsForExport(long fromDate, long toDate) { @@ -88,14 +125,14 @@ public List getRecordsForExport(long fromDate, long toDate) { String condition = DbHelper.TIME_COLUMN + " BETWEEN ? AND ?"; String[] args = new String[]{Long.toString(fromDate), Long.toString(toDate)}; - List recordList = repo.readWithCondition(condition, args); + List recordList = readWithCondition(condition, args); for (Record record : recordList) { sb = new StringBuilder(); sb.append(record.getId()).append(DELIMITER); sb.append(record.getTime()).append(DELIMITER); sb.append(record.getTitle()).append(DELIMITER); - Category category = categoryController.read(record.getCategoryId()); + Category category = categoryController.read(record.getCategory().getId()); sb.append(category == null ? "NONE" : category.getName()).append(DELIMITER); sb.append(record.getType() == 0 ? record.getPrice() : -record.getPrice()); @@ -104,4 +141,11 @@ public List getRecordsForExport(long fromDate, long toDate) { return result; } + + private Record validateRecord(Record record) { + Category category = categoryController.readOrCreate(record.getCategory().getName()); + + return new Record(record.getId(), record.getTime(), record.getType(), record.getTitle(), + category, record.getPrice(), record.getAccount(), record.getCurrency()); + } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/TransferController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/TransferController.java index 98d7865..c06927b 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/TransferController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/TransferController.java @@ -1,7 +1,7 @@ package com.blogspot.e_kanivets.moneytracker.controller; import com.blogspot.e_kanivets.moneytracker.controller.base.BaseController; -import com.blogspot.e_kanivets.moneytracker.model.Transfer; +import com.blogspot.e_kanivets.moneytracker.entity.Transfer; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; /** diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Account.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Account.java similarity index 60% rename from app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Account.java rename to app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Account.java index f1f6c02..1693f5e 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Account.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Account.java @@ -1,4 +1,9 @@ -package com.blogspot.e_kanivets.moneytracker.model; +package com.blogspot.e_kanivets.moneytracker.entity; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.blogspot.e_kanivets.moneytracker.entity.base.BaseEntity; /** * Entity class for account. @@ -6,8 +11,7 @@ * * @author Evgenii Kanivets */ -public class Account implements IEntity { - private long id; +public class Account extends BaseEntity implements Parcelable { private String title; private int curSum; private String currency; @@ -26,27 +30,33 @@ public Account(String title, int curSum, String currency) { this.currency = currency; } - @Override - public long getId() { - return id; + protected Account(Parcel in) { + id = in.readLong(); + title = in.readString(); + curSum = in.readInt(); + currency = in.readString(); } + public static final Creator CREATOR = new Creator() { + @Override + public Account createFromParcel(Parcel in) { + return new Account(in); + } + + @Override + public Account[] newArray(int size) { + return new Account[size]; + } + }; + public String getTitle() { return title; } - public void setTitle(String title) { - this.title = title; - } - public int getCurSum() { return curSum; } - public void setCurSum(int curSum) { - this.curSum = curSum; - } - public String getCurrency() { return currency; } @@ -65,9 +75,9 @@ public boolean equals(Object o) { if (o instanceof Account) { Account account = (Account) o; return this.id == account.getId() - && this.title.equals(account.getTitle()) + && equals(this.title, account.getTitle()) && this.curSum == account.getCurSum() - && this.currency.equals(account.getCurrency()); + && equals(this.currency, account.getCurrency()); } else return false; } @@ -84,4 +94,17 @@ public String toString() { return sb.toString(); } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(id); + dest.writeString(title); + dest.writeInt(curSum); + dest.writeString(currency); + } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Category.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Category.java new file mode 100644 index 0000000..330d623 --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Category.java @@ -0,0 +1,84 @@ +package com.blogspot.e_kanivets.moneytracker.entity; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.blogspot.e_kanivets.moneytracker.entity.base.BaseEntity; + +/** + * Entity class for account. + * Created on 01/09/14. + * + * @author Evgenii Kanivets + */ +public class Category extends BaseEntity implements Parcelable { + private String name; + + public Category(long id, String name) { + this.id = id; + this.name = name; + } + + public Category(String name) { + this.id = -1; + this.name = name; + } + + protected Category(Parcel in) { + id = in.readLong(); + name = in.readString(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public Category createFromParcel(Parcel in) { + return new Category(in); + } + + @Override + public Category[] newArray(int size) { + return new Category[size]; + } + }; + + @Override + public long getId() { + return id; + } + + public String getName() { + return name; + } + + @Override + public boolean equals(Object o) { + if (o instanceof Category) { + Category category = (Category) o; + return this.id == category.getId() + && equals(this.name, category.getName()); + } else return false; + } + + @SuppressWarnings("StringBufferReplaceableByString") + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Category {"); + sb.append("id = ").append(id).append(", "); + sb.append("title = ").append(name); + sb.append("}"); + + return sb.toString(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(id); + dest.writeString(name); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/ExchangeRate.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/ExchangeRate.java similarity index 62% rename from app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/ExchangeRate.java rename to app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/ExchangeRate.java index 0935c53..663dfcb 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/ExchangeRate.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/ExchangeRate.java @@ -1,4 +1,9 @@ -package com.blogspot.e_kanivets.moneytracker.model; +package com.blogspot.e_kanivets.moneytracker.entity; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.blogspot.e_kanivets.moneytracker.entity.base.BaseEntity; /** * Entity class to represent exchange rate between two currencies. @@ -6,8 +11,7 @@ * * @author Evgenii Kanivets */ -public class ExchangeRate implements IEntity { - private long id; +public class ExchangeRate extends BaseEntity implements Parcelable { private long createdAt; private String fromCurrency; private String toCurrency; @@ -29,6 +33,25 @@ public ExchangeRate(long createdAt, String fromCurrency, String toCurrency, doub this.amount = amount; } + protected ExchangeRate(Parcel in) { + createdAt = in.readLong(); + fromCurrency = in.readString(); + toCurrency = in.readString(); + amount = in.readDouble(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public ExchangeRate createFromParcel(Parcel in) { + return new ExchangeRate(in); + } + + @Override + public ExchangeRate[] newArray(int size) { + return new ExchangeRate[size]; + } + }; + @Override public long getId() { return id; @@ -56,8 +79,8 @@ public boolean equals(Object o) { ExchangeRate rate = (ExchangeRate) o; return this.id == rate.getId() && this.createdAt == rate.getCreatedAt() - && this.fromCurrency.equals(rate.getFromCurrency()) - && this.toCurrency.equals(rate.getToCurrency()) + && equals(fromCurrency, rate.getFromCurrency()) + && equals(this.toCurrency, rate.getToCurrency()) && this.amount == rate.getAmount(); } else return false; } @@ -76,4 +99,17 @@ public String toString() { return sb.toString(); } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(createdAt); + dest.writeString(fromCurrency); + dest.writeString(toCurrency); + dest.writeDouble(amount); + } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Record.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Record.java similarity index 56% rename from app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Record.java rename to app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Record.java index 5b7e945..19a2756 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Record.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Record.java @@ -1,73 +1,58 @@ -package com.blogspot.e_kanivets.moneytracker.model; +package com.blogspot.e_kanivets.moneytracker.entity; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.NonNull; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.MtApp; -import com.blogspot.e_kanivets.moneytracker.controller.CategoryController; -import com.blogspot.e_kanivets.moneytracker.repo.CategoryRepo; - -import java.io.Serializable; +import com.blogspot.e_kanivets.moneytracker.entity.base.BaseEntity; /** - * Entity class. + * Entity class. Immutable. * Created by eugene on 01/09/14. */ -public class Record implements IEntity, Parcelable { +public class Record extends BaseEntity implements Parcelable { public static final int TYPE_INCOME = 0; public static final int TYPE_EXPENSE = 1; - private long id; - private long time; - private int type; - private String title; - private long categoryId; - private String category; - private int price; - private long accountId; - private String currency; - - public Record(long id, long time, int type, String title, long categoryId, int price, - long accountId, String currency) { + private final long time; + private final int type; + private final String title; + private final Category category; + private final int price; + private final Account account; + private final String currency; + + public Record(long id, long time, int type, String title, long categoryId, int price, long accountId, String currency) { this.id = id; this.time = time; this.type = type; this.title = title; - this.categoryId = categoryId; + this.category = new Category(categoryId, null); this.price = price; - this.accountId = accountId; + this.account = new Account(accountId, null, -1, null); this.currency = currency; - - // TODO: Refactor this shit. - CategoryRepo categoryRepo = new CategoryRepo(new DbHelper(MtApp.get())); - Category categoryActual = new CategoryController(categoryRepo).read(categoryId); - if (categoryActual != null) category = categoryActual.getName(); } - public Record(long time, int type, String title, String category, int price, long accountId, - String currency) { + public Record(long id, long time, int type, String title, Category category, int price, Account account, String currency) { + this.id = id; this.time = time; this.type = type; this.title = title; - this.categoryId = -1; this.category = category; this.price = price; - this.accountId = accountId; + this.account = account; this.currency = currency; } - public Record(@NonNull Record record) { - this.id = record.getId(); - this.time = record.getTime(); - this.type = record.getType(); - this.title = record.getTitle(); - this.categoryId = record.getCategoryId(); - this.category = record.getCategory(); - this.price = record.getPrice(); - this.accountId = record.getAccountId(); - this.currency = record.getCurrency(); + public Record(long time, int type, String title, Category category, int price, Account account, String currency) { + this.id = -1; + this.time = time; + this.type = type; + this.title = title; + this.category = category; + this.price = price; + this.account = account; + this.currency = currency; } protected Record(Parcel in) { @@ -75,10 +60,9 @@ protected Record(Parcel in) { time = in.readLong(); type = in.readInt(); title = in.readString(); - categoryId = in.readLong(); - category = in.readString(); + category = in.readParcelable(Category.class.getClassLoader()); price = in.readInt(); - accountId = in.readLong(); + account = in.readParcelable(Account.class.getClassLoader()); currency = in.readString(); } @@ -107,14 +91,10 @@ public String getTitle() { return title; } - public String getCategory() { + public Category getCategory() { return category; } - public long getCategoryId() { - return categoryId; - } - public int getPrice() { return price; } @@ -127,32 +107,8 @@ public boolean isIncome() { return type == 0; } - public void setTitle(String title) { - this.title = title; - } - - public void setCategoryId(long categoryId) { - this.categoryId = categoryId; - } - - public void setCategory(String category) { - this.category = category; - } - - public void setPrice(int price) { - this.price = price; - } - - public long getAccountId() { - return accountId; - } - - public void setAccountId(long accountId) { - this.accountId = accountId; - } - - public void setCurrency(String currency) { - this.currency = currency; + public Account getAccount() { + return account; } public String getCurrency() { @@ -185,9 +141,8 @@ public String toString() { sb.append("time = ").append(time).append(", "); sb.append("category = ").append(category).append(", "); - sb.append("categoryId = ").append(categoryId).append(", "); sb.append("price = ").append(price).append(", "); - sb.append("accountId = ").append(accountId).append(", "); + sb.append("account = ").append(account).append(", "); sb.append("currency = ").append(currency); sb.append("}"); @@ -201,12 +156,11 @@ public boolean equals(Object o) { return this.id == record.getId() && this.time == record.getTime() && this.type == record.getType() - && this.title.equals(record.getTitle()) - && this.categoryId == record.getCategoryId() + && equals(this.title, record.getTitle()) && this.category.equals(record.getCategory()) && this.price == record.getPrice() - && this.accountId == record.getAccountId() - && this.currency.equals(record.getCurrency()); + && this.account.equals(record.getAccount()) + && equals(this.currency, record.getCurrency()); } else return false; } @@ -221,10 +175,9 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeLong(time); dest.writeInt(type); dest.writeString(title); - dest.writeLong(categoryId); - dest.writeString(category); + dest.writeParcelable(category, 0); dest.writeInt(price); - dest.writeLong(accountId); + dest.writeParcelable(account, 0); dest.writeString(currency); } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Transfer.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Transfer.java similarity index 53% rename from app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Transfer.java rename to app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Transfer.java index ef0dbef..7df4d55 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Transfer.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/Transfer.java @@ -1,4 +1,9 @@ -package com.blogspot.e_kanivets.moneytracker.model; +package com.blogspot.e_kanivets.moneytracker.entity; + +import android.os.Parcel; +import android.os.Parcelable; + +import com.blogspot.e_kanivets.moneytracker.entity.base.BaseEntity; /** * Entity class to represent transfer operation between accounts. @@ -6,8 +11,7 @@ * * @author Evgenii Kanivets */ -public class Transfer implements IEntity { - private long id; +public class Transfer extends BaseEntity implements Parcelable { private long time; private long fromAccountId; private long toAccountId; @@ -31,6 +35,26 @@ public Transfer(long time, long fromAccountId, long toAccountId, int fromAmount, this.toAmount = toAmount; } + protected Transfer(Parcel in) { + time = in.readLong(); + fromAccountId = in.readLong(); + toAccountId = in.readLong(); + fromAmount = in.readInt(); + toAmount = in.readInt(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public Transfer createFromParcel(Parcel in) { + return new Transfer(in); + } + + @Override + public Transfer[] newArray(int size) { + return new Transfer[size]; + } + }; + @Override public long getId() { return id; @@ -56,6 +80,19 @@ public int getToAmount() { return toAmount; } + @Override + public boolean equals(Object o) { + if (o instanceof Transfer) { + Transfer transfer = (Transfer) o; + return this.id == transfer.getId() + && this.time == transfer.getTime() + && this.fromAccountId == transfer.getFromAccountId() + && this.toAccountId == transfer.getToAccountId() + && this.fromAmount == transfer.getFromAmount() + && this.toAmount == transfer.getToAmount(); + } else return false; + } + @SuppressWarnings("StringBufferReplaceableByString") @Override public String toString() { @@ -71,4 +108,18 @@ public String toString() { return sb.toString(); } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(time); + dest.writeLong(fromAccountId); + dest.writeLong(toAccountId); + dest.writeInt(fromAmount); + dest.writeInt(toAmount); + } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/base/BaseEntity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/base/BaseEntity.java new file mode 100644 index 0000000..684f41c --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/base/BaseEntity.java @@ -0,0 +1,21 @@ +package com.blogspot.e_kanivets.moneytracker.entity.base; + +/** + * Base class to encapsulate some common methods. + * Created on 3/1/16. + * + * @author Evgenii Kanivets + */ +public abstract class BaseEntity implements IEntity { + protected long id; + + @Override + public long getId() { + return id; + } + + protected boolean equals(String str1, String str2) { + if (str1 == null) return str2 == null; + else return str1.equals(str2); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/IEntity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/base/IEntity.java similarity index 73% rename from app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/IEntity.java rename to app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/base/IEntity.java index 3512724..11ceb40 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/IEntity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/base/IEntity.java @@ -1,4 +1,4 @@ -package com.blogspot.e_kanivets.moneytracker.model; +package com.blogspot.e_kanivets.moneytracker.entity.base; /** * Interface to represent contract of abstract entity. diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/fragment/ExportFragment.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/fragment/ExportFragment.java index fa1191e..92c2278 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/fragment/ExportFragment.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/fragment/ExportFragment.java @@ -16,8 +16,8 @@ import com.blogspot.e_kanivets.moneytracker.controller.CategoryController; import com.blogspot.e_kanivets.moneytracker.controller.RecordController; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.Category; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Category; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.repo.AccountRepo; import com.blogspot.e_kanivets.moneytracker.repo.CategoryRepo; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/fragment/RecordsFragment.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/fragment/RecordsFragment.java index 8409c35..017780c 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/fragment/RecordsFragment.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/fragment/RecordsFragment.java @@ -31,9 +31,9 @@ import com.blogspot.e_kanivets.moneytracker.controller.PeriodController; import com.blogspot.e_kanivets.moneytracker.controller.RecordController; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.Category; +import com.blogspot.e_kanivets.moneytracker.entity.Category; import com.blogspot.e_kanivets.moneytracker.model.Period; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.repo.AccountRepo; import com.blogspot.e_kanivets.moneytracker.repo.CategoryRepo; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Category.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Category.java deleted file mode 100644 index 15b5e72..0000000 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Category.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.blogspot.e_kanivets.moneytracker.model; - -/** - * Entity class for account. - * Created on 01/09/14. - * - * @author Evgenii Kanivets - */ -public class Category implements IEntity { - - private long id; - private String name; - - public Category(long id, String name) { - this.id = id; - this.name = name; - } - - public Category(String name) { - this.id = -1; - this.name = name; - } - - @Override - public long getId() { - return id; - } - - public String getName() { - return name; - } - - @Override - public boolean equals(Object o) { - if (o instanceof Category) { - Category category = (Category) o; - return this.id == category.getId() - && this.name.equals(category.getName()); - } else return false; - } - - @SuppressWarnings("StringBufferReplaceableByString") - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("Category {"); - sb.append("id = ").append(id); - sb.append("}"); - - return sb.toString(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepo.java index 595e219..e3e4f0f 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/AccountRepo.java @@ -6,7 +6,7 @@ import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.Account; +import com.blogspot.e_kanivets.moneytracker.entity.Account; import com.blogspot.e_kanivets.moneytracker.repo.base.BaseRepo; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepo.java index c0d6b54..59dcdd1 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/CategoryRepo.java @@ -6,7 +6,7 @@ import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.Category; +import com.blogspot.e_kanivets.moneytracker.entity.Category; import com.blogspot.e_kanivets.moneytracker.repo.base.BaseRepo; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepo.java index e81f273..415d58b 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/ExchangeRateRepo.java @@ -6,7 +6,7 @@ import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; import com.blogspot.e_kanivets.moneytracker.repo.base.BaseRepo; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepo.java index 3d39d70..6fdf07f 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/RecordRepo.java @@ -6,7 +6,7 @@ import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.repo.base.BaseRepo; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; @@ -42,9 +42,9 @@ protected ContentValues contentValues(@Nullable Record record) { contentValues.put(DbHelper.TIME_COLUMN, record.getTime()); contentValues.put(DbHelper.TYPE_COLUMN, record.getType()); contentValues.put(DbHelper.TITLE_COLUMN, record.getTitle()); - contentValues.put(DbHelper.CATEGORY_ID_COLUMN, record.getCategoryId()); + contentValues.put(DbHelper.CATEGORY_ID_COLUMN, record.getCategory().getId()); contentValues.put(DbHelper.PRICE_COLUMN, record.getPrice()); - contentValues.put(DbHelper.ACCOUNT_ID_COLUMN, record.getAccountId()); + contentValues.put(DbHelper.ACCOUNT_ID_COLUMN, record.getAccount().getId()); contentValues.put(DbHelper.CURRENCY_COLUMN, record.getCurrency()); return contentValues; @@ -71,9 +71,9 @@ protected List getListFromCursor(Cursor cursor) { cursor.getLong(timeColIndex), cursor.getInt(typeColIndex), cursor.getString(titleColIndex), - cursor.getInt(categoryColIndex), + cursor.getLong(categoryColIndex), cursor.getInt(priceColIndex), - cursor.getInt(accountIdColIndex), + cursor.getLong(accountIdColIndex), cursor.getString(currencyColIndex)); recordList.add(record); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepo.java index 9482151..1fcbb0e 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepo.java @@ -6,7 +6,7 @@ import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.Transfer; +import com.blogspot.e_kanivets.moneytracker.entity.Transfer; import com.blogspot.e_kanivets.moneytracker.repo.base.BaseRepo; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/BaseRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/BaseRepo.java index c4627ac..f172e24 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/BaseRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/base/BaseRepo.java @@ -8,7 +8,7 @@ import android.util.Log; import com.blogspot.e_kanivets.moneytracker.DbHelper; -import com.blogspot.e_kanivets.moneytracker.model.IEntity; +import com.blogspot.e_kanivets.moneytracker.entity.base.IEntity; import java.util.List; @@ -115,11 +115,11 @@ public List readWithCondition(@Nullable String condition, @Nullable String[] // Read accounts table from db Cursor cursor = db.query(getTable(), null, condition, args, null, null, null); - List accountList = getListFromCursor(cursor); + List recordList = getListFromCursor(cursor); cursor.close(); db.close(); - return accountList; + return recordList; } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/ExchangeRateProvider.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/ExchangeRateProvider.java index f053e67..ffc2005 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/ExchangeRateProvider.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/ExchangeRateProvider.java @@ -4,8 +4,8 @@ import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.controller.ExchangeRateController; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.report.base.IExchangeRateProvider; import java.util.Map; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/Report.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/Report.java index 25046fb..800496f 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/Report.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/Report.java @@ -2,9 +2,9 @@ import android.support.annotation.NonNull; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; import com.blogspot.e_kanivets.moneytracker.model.Period; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.report.base.IExchangeRateProvider; import com.blogspot.e_kanivets.moneytracker.report.base.IReport; import com.blogspot.e_kanivets.moneytracker.report.model.CategoryRecord; @@ -104,11 +104,11 @@ private void makeReport(List recordList) { break; } - String category = record.getCategory(); + String categoryName = record.getCategory().getName(); - if (!categorySortedMap.containsKey(category)) - categorySortedMap.put(category, new ArrayList()); - categorySortedMap.get(category).add(record); + if (!categorySortedMap.containsKey(categoryName)) + categorySortedMap.put(categoryName, new ArrayList()); + categorySortedMap.get(categoryName).add(record); } for (String category : categorySortedMap.keySet()) { @@ -136,8 +136,8 @@ private List convertRecordList(List recordList) { convertedPrice *= exchangeRate.getAmount(); } - Record convertedRecord = new Record(record); - convertedRecord.setPrice(convertedPrice); + Record convertedRecord = new Record(record.getId(), record.getTime(), record.getType(), + record.getTitle(), record.getCategory(), convertedPrice, record.getAccount(), currency); convertedRecordList.add(convertedRecord); } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/ReportMaker.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/ReportMaker.java index 4ee32dd..a0b5869 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/ReportMaker.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/ReportMaker.java @@ -4,9 +4,9 @@ import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.controller.ExchangeRateController; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; import com.blogspot.e_kanivets.moneytracker.model.Period; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.report.base.IExchangeRateProvider; import com.blogspot.e_kanivets.moneytracker.report.base.IReport; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/base/IExchangeRateProvider.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/base/IExchangeRateProvider.java index 04d9035..9e9f4e0 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/base/IExchangeRateProvider.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/base/IExchangeRateProvider.java @@ -2,8 +2,8 @@ import android.support.annotation.Nullable; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.Record; /** * Interface that represents a contract of access to currency exchange rate. diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/model/SummaryRecord.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/model/SummaryRecord.java index 065d11d..fe7a12c 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/model/SummaryRecord.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/model/SummaryRecord.java @@ -2,7 +2,7 @@ import android.support.annotation.NonNull; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import java.util.ArrayList; import java.util.List; From 2050b8b10447752aa938b2e5294307e7b5f1c816 Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 1 Mar 2016 16:49:26 +0200 Subject: [PATCH 7/8] #17[30m]. Add tests for TransferRepo. --- .../moneytracker/repo/TransferRepoTest.java | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepoTest.java diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepoTest.java new file mode 100644 index 0000000..d4042a4 --- /dev/null +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/TransferRepoTest.java @@ -0,0 +1,85 @@ +package com.blogspot.e_kanivets.moneytracker.repo; + +import android.content.ContentValues; +import android.database.Cursor; + +import com.blogspot.e_kanivets.moneytracker.DbHelper; +import com.blogspot.e_kanivets.moneytracker.entity.Transfer; + +import junit.framework.TestCase; + +import org.mockito.Mockito; + +import java.util.ArrayList; +import java.util.List; + +/** + * Android Test case. + * Created on 3/1/16. + * + * @author Evgenii Kanivets + */ +public class TransferRepoTest extends TestCase { + private TransferRepo repo; + + @Override + public void setUp() throws Exception { + super.setUp(); + DbHelper mock = Mockito.mock(DbHelper.class); + repo = new TransferRepo(mock); + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + repo = null; + } + + public void testGetTable() throws Exception { + assertEquals(DbHelper.TABLE_TRANSFERS, repo.getTable()); + } + + public void testContentValues() throws Exception { + Transfer transfer = new Transfer(1, 1, 1, 2, 100, 200); + + ContentValues expected = new ContentValues(); + expected.put(DbHelper.TIME_COLUMN, 1L); + expected.put(DbHelper.FROM_ACCOUNT_ID_COLUMN, 1L); + expected.put(DbHelper.TO_ACCOUNT_ID_COLUMN, 2L); + expected.put(DbHelper.FROM_AMOUNT_COLUMN, 100); + expected.put(DbHelper.TO_AMOUNT_COLUMN, 200); + + ContentValues actual = repo.contentValues(transfer); + + assertEquals(expected, actual); + + assertNull(repo.contentValues(null)); + } + + public void testGetListFromCursor() throws Exception { + assertEquals(new ArrayList(), repo.getListFromCursor(Mockito.mock(Cursor.class))); + + Cursor mockCursor = Mockito.mock(Cursor.class); + Mockito.when(mockCursor.moveToFirst()).thenReturn(true); + Mockito.when(mockCursor.getColumnIndex(DbHelper.ID_COLUMN)).thenReturn(1); + Mockito.when(mockCursor.getColumnIndex(DbHelper.TIME_COLUMN)).thenReturn(2); + Mockito.when(mockCursor.getColumnIndex(DbHelper.FROM_ACCOUNT_ID_COLUMN)).thenReturn(3); + Mockito.when(mockCursor.getColumnIndex(DbHelper.TO_ACCOUNT_ID_COLUMN)).thenReturn(4); + Mockito.when(mockCursor.getColumnIndex(DbHelper.FROM_AMOUNT_COLUMN)).thenReturn(5); + Mockito.when(mockCursor.getColumnIndex(DbHelper.TO_AMOUNT_COLUMN)).thenReturn(6); + + Mockito.when(mockCursor.getLong(1)).thenReturn(1L); + Mockito.when(mockCursor.getLong(2)).thenReturn(1L); + Mockito.when(mockCursor.getLong(3)).thenReturn(1L); + Mockito.when(mockCursor.getLong(4)).thenReturn(2L); + Mockito.when(mockCursor.getInt(5)).thenReturn(100); + Mockito.when(mockCursor.getInt(6)).thenReturn(200); + + List expected = new ArrayList<>(); + expected.add(new Transfer(1, 1, 1, 2, 100, 200)); + + assertEquals(expected, repo.getListFromCursor(mockCursor)); + + assertEquals(new ArrayList<>(), repo.getListFromCursor(null)); + } +} \ No newline at end of file From 7e07da4678c1cf2fc25ab9384934afe3fc422b7b Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 1 Mar 2016 17:53:29 +0200 Subject: [PATCH 8/8] #17[30m]. Fix unit tests. --- .../report/ExchangeRateProviderTest.java | 10 +-- .../moneytracker/report/ReportTest.java | 68 ++++++++++++------- 2 files changed, 47 insertions(+), 31 deletions(-) diff --git a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ExchangeRateProviderTest.java b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ExchangeRateProviderTest.java index 741a374..39dd03d 100644 --- a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ExchangeRateProviderTest.java +++ b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ExchangeRateProviderTest.java @@ -4,8 +4,8 @@ import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.controller.ExchangeRateController; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; -import com.blogspot.e_kanivets.moneytracker.model.Record; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; import com.blogspot.e_kanivets.moneytracker.report.base.IExchangeRateProvider; @@ -68,12 +68,12 @@ public void testGetRate() throws Exception { provider = new ExchangeRateProvider("USD", rateController); assertEquals(new ExchangeRate(1, "UAH", "USD", 4), - provider.getRate(new Record(0, 0, "", "", 0, 0, "UAH"))); + provider.getRate(new Record(1, 0, 0, "", 1, 0, 0, "UAH"))); assertEquals(new ExchangeRate(0, "AFN", "USD", 3), - provider.getRate(new Record(0, 0, "", "", 0, 0, "AFN"))); + provider.getRate(new Record(1, 0, 0, "", 1, 0, 0, "AFN"))); - assertNull(provider.getRate(new Record(0, 0, "", "", 0, 0, "SMTH"))); + assertNull(provider.getRate(new Record(1, 0, 0, "", 1, 0, 0, "SMTH"))); } private static class TestRepo implements IRepo { diff --git a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ReportTest.java b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ReportTest.java index b571ac6..4def49d 100644 --- a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ReportTest.java +++ b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ReportTest.java @@ -1,10 +1,13 @@ package com.blogspot.e_kanivets.moneytracker.report; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import com.blogspot.e_kanivets.moneytracker.model.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.Account; +import com.blogspot.e_kanivets.moneytracker.entity.Category; +import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRate; +import com.blogspot.e_kanivets.moneytracker.entity.Record; import com.blogspot.e_kanivets.moneytracker.model.Period; -import com.blogspot.e_kanivets.moneytracker.model.Record; import com.blogspot.e_kanivets.moneytracker.report.base.IExchangeRateProvider; import com.blogspot.e_kanivets.moneytracker.report.base.IReport; import com.blogspot.e_kanivets.moneytracker.report.model.CategoryRecord; @@ -132,11 +135,7 @@ public void testGetPeriod() throws Exception { public void testGetTotal() throws Exception { Period period = new Period(new Date(1), new Date()); - List recordList = new ArrayList<>(); - recordList.add(new Record(0, Record.TYPE_INCOME, "1", "1", 10, 1, "USD")); - recordList.add(new Record(1, Record.TYPE_EXPENSE, "2", "1", 2, 2, "UAH")); - recordList.add(new Record(2, Record.TYPE_INCOME, "3", "1", 5, 1, "UAH")); - recordList.add(new Record(3, Record.TYPE_EXPENSE, "4", "1", 10, 2, "USD")); + List recordList = getRecordList(); IReport report = new Report(currency, period, recordList, rateProvider); @@ -148,11 +147,7 @@ public void testGetTotal() throws Exception { public void testGetTotalIncome() throws Exception { Period period = new Period(new Date(1), new Date()); - List recordList = new ArrayList<>(); - recordList.add(new Record(0, Record.TYPE_INCOME, "1", "1", 10, 1, "USD")); - recordList.add(new Record(1, Record.TYPE_EXPENSE, "2", "1", 2, 2, "UAH")); - recordList.add(new Record(2, Record.TYPE_INCOME, "3", "1", 5, 1, "UAH")); - recordList.add(new Record(3, Record.TYPE_EXPENSE, "4", "1", 10, 2, "USD")); + List recordList = getRecordList(); IReport report = new Report(currency, period, recordList, rateProvider); @@ -164,11 +159,7 @@ public void testGetTotalIncome() throws Exception { public void testGetTotalExpense() throws Exception { Period period = new Period(new Date(1), new Date()); - List recordList = new ArrayList<>(); - recordList.add(new Record(0, Record.TYPE_INCOME, "1", "1", 10, 1, "USD")); - recordList.add(new Record(1, Record.TYPE_EXPENSE, "2", "1", 2, 2, "UAH")); - recordList.add(new Record(2, Record.TYPE_INCOME, "3", "1", 5, 1, "UAH")); - recordList.add(new Record(3, Record.TYPE_EXPENSE, "4", "1", 10, 2, "USD")); + List recordList = getRecordList(); IReport report = new Report(currency, period, recordList, rateProvider); @@ -181,24 +172,29 @@ public void testGetSummary() throws Exception { Period period = new Period(new Date(1), new Date()); List recordList = new ArrayList<>(); - Record record1 = new Record(0, Record.TYPE_INCOME, "1", "1", 10, 1, "USD"); + + Category category = new Category(1, "category"); + Account account1 = new Account(1, "account1", 100, "UAH"); + Account account2 = new Account(2, "account2", 100, "USD"); + + Record record1 = new Record(1, 0, Record.TYPE_INCOME, "1", category, 10, account2, "USD"); recordList.add(record1); - Record record2 = new Record(1, Record.TYPE_EXPENSE, "1", "1", 2, 2, "UAH"); + Record record2 = new Record(2, 1, Record.TYPE_EXPENSE, "1", category, 2, account1, "UAH"); recordList.add(record2); - Record record3 = new Record(2, Record.TYPE_INCOME, "3", "1", 5, 1, "UAH"); + Record record3 = new Record(3, 2, Record.TYPE_INCOME, "3", category, 5, account1, "UAH"); recordList.add(record3); - Record record4 = new Record(3, Record.TYPE_EXPENSE, "4", "1", 10, 2, "USD"); + Record record4 = new Record(4, 3, Record.TYPE_EXPENSE, "4", category, 10, account2, "USD"); recordList.add(record4); IReport report = new Report(currency, period, recordList, rateProvider); List categoryRecordList = new ArrayList<>(); - CategoryRecord categoryRecord = new CategoryRecord("1", currency, 10 * 4 - 2 + 5 - 10 * 4); + CategoryRecord categoryRecord = new CategoryRecord("category", currency, 10 * 4 - 2 + 5 - 10 * 4); SummaryRecord summaryRecord1 = new SummaryRecord("1", currency, 38); - Record convertedRecord1 = new Record(record1); - convertedRecord1.setPrice(40); + Record convertedRecord1 = new Record(record1.getId(), record1.getTime(), record1.getType(), + record1.getTitle(), record1.getCategory(), 40, record1.getAccount(), currency); summaryRecord1.add(convertedRecord1); summaryRecord1.add(record2); categoryRecord.add(summaryRecord1); @@ -208,8 +204,8 @@ public void testGetSummary() throws Exception { categoryRecord.add(summaryRecord2); SummaryRecord summaryRecord3 = new SummaryRecord("4", currency, -40); - Record convertedRecord4 = new Record(record4); - convertedRecord4.setPrice(40); + Record convertedRecord4 = new Record(record4.getId(), record4.getTime(), record4.getType(), + record4.getTitle(), record4.getCategory(), 40, record4.getAccount(), currency); summaryRecord3.add(convertedRecord4); categoryRecord.add(summaryRecord3); @@ -218,6 +214,26 @@ public void testGetSummary() throws Exception { assertEquals(categoryRecordList, report.getSummary()); } + @NonNull + private List getRecordList() { + List recordList = new ArrayList<>(); + + Category category = new Category(1, "category"); + Account account1 = new Account(1, "account1", 100, "UAH"); + Account account2 = new Account(2, "account2", 100, "USD"); + + Record record1 = new Record(1, 0, Record.TYPE_INCOME, "1", category, 10, account2, "USD"); + recordList.add(record1); + Record record2 = new Record(2, 1, Record.TYPE_EXPENSE, "1", category, 2, account1, "UAH"); + recordList.add(record2); + Record record3 = new Record(3, 2, Record.TYPE_INCOME, "3", category, 5, account1, "UAH"); + recordList.add(record3); + Record record4 = new Record(4, 3, Record.TYPE_EXPENSE, "4", category, 10, account2, "USD"); + recordList.add(record4); + + return recordList; + } + private static class TestProvider implements IExchangeRateProvider { @Nullable