diff --git a/app/src/androidTest/java/org/gnucash/android/test/ui/AccountsActivityTest.java b/app/src/androidTest/java/org/gnucash/android/test/ui/AccountsActivityTest.java index 09b0f5afa..78fe49779 100644 --- a/app/src/androidTest/java/org/gnucash/android/test/ui/AccountsActivityTest.java +++ b/app/src/androidTest/java/org/gnucash/android/test/ui/AccountsActivityTest.java @@ -78,7 +78,6 @@ import org.gnucash.android.receivers.AccountCreator; import org.gnucash.android.test.ui.util.DisableAnimationsRule; import org.gnucash.android.ui.account.AccountsActivity; -import org.gnucash.android.ui.common.Refreshable; import org.hamcrest.Description; import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; diff --git a/app/src/main/java/org/gnucash/android/db/BookDbHelper.java b/app/src/main/java/org/gnucash/android/db/BookDbHelper.java index 6408c12d7..810e7a0a0 100644 --- a/app/src/main/java/org/gnucash/android/db/BookDbHelper.java +++ b/app/src/main/java/org/gnucash/android/db/BookDbHelper.java @@ -28,7 +28,6 @@ import org.gnucash.android.db.DatabaseSchema.BookEntry; import org.gnucash.android.db.adapter.AccountsDbAdapter; import org.gnucash.android.db.adapter.BooksDbAdapter; -import org.gnucash.android.db.adapter.SplitsDbAdapter; import org.gnucash.android.db.adapter.TransactionsDbAdapter; import org.gnucash.android.model.Book; @@ -80,7 +79,7 @@ public Book insertBlankBook(@NonNull SQLiteDatabase db) { SQLiteDatabase mainDb = helper.getWritableDatabase(); //actually create the db AccountsDbAdapter accountsDbAdapter = new AccountsDbAdapter( mainDb, - new TransactionsDbAdapter(mainDb, new SplitsDbAdapter(mainDb)) + new TransactionsDbAdapter(mainDb) ); String rootAccountUID = accountsDbAdapter.getOrCreateGnuCashRootAccountUID(); diff --git a/app/src/main/java/org/gnucash/android/db/adapter/AccountsDbAdapter.java b/app/src/main/java/org/gnucash/android/db/adapter/AccountsDbAdapter.java index ffcf1b022..01adad3a0 100644 --- a/app/src/main/java/org/gnucash/android/db/adapter/AccountsDbAdapter.java +++ b/app/src/main/java/org/gnucash/android/db/adapter/AccountsDbAdapter.java @@ -123,7 +123,7 @@ public AccountsDbAdapter(@NonNull SQLiteDatabase db, @NonNull TransactionsDbAdap * @param db Database to create an adapter for */ public AccountsDbAdapter(SQLiteDatabase db) { - this(db, new TransactionsDbAdapter(db, new SplitsDbAdapter(db))); + this(db, new TransactionsDbAdapter(db)); } /** @@ -145,18 +145,15 @@ public static AccountsDbAdapter getInstance() { public void addRecord(@NonNull Account account, UpdateMethod updateMethod) { Timber.d("Replace account to db"); //in-case the account already existed, we want to update the templates based on it as well - List templateTransactions = mTransactionsAdapter.getScheduledTransactionsForAccount(account.getUID()); super.addRecord(account, updateMethod); - String accountUID = account.getUID(); //now add transactions if there are any if (account.getAccountType() != AccountType.ROOT) { - //update the fully qualified account name - updateRecord(accountUID, AccountEntry.COLUMN_FULL_NAME, getFullyQualifiedAccountName(accountUID)); for (Transaction t : account.getTransactions()) { t.setCommodity(account.getCommodity()); mTransactionsAdapter.addRecord(t, updateMethod); } - for (Transaction transaction : templateTransactions) { + List scheduledTransactions = mTransactionsAdapter.getScheduledTransactionsForAccount(account.getUID()); + for (Transaction transaction : scheduledTransactions) { mTransactionsAdapter.addRecord(transaction, UpdateMethod.update); } } @@ -213,8 +210,13 @@ public long bulkAddRecords(@NonNull List accountList, UpdateMethod upda stmt.bindString(11, account.getCommodity().getUID()); String parentAccountUID = account.getParentUID(); - if (parentAccountUID == null && account.getAccountType() != AccountType.ROOT) { - parentAccountUID = getOrCreateGnuCashRootAccountUID(); + if (account.getAccountType() != AccountType.ROOT) { + if (TextUtils.isEmpty(parentAccountUID)) { + parentAccountUID = getOrCreateGnuCashRootAccountUID(); + account.setParentUID(parentAccountUID); + } + //update the fully qualified account name + account.setFullName(getFullyQualifiedAccountName(account)); } if (parentAccountUID != null) { stmt.bindString(12, parentAccountUID); @@ -1130,6 +1132,25 @@ public String getFullyQualifiedAccountName(String accountUID) { return parentAccountName + ACCOUNT_NAME_SEPARATOR + accountName; } + /** + * Returns the full account name including the account hierarchy (parent accounts) + * + * @param account The account + * @return Fully qualified (with parent hierarchy) account name + */ + public String getFullyQualifiedAccountName(@NonNull Account account) { + String accountName = account.getName(); + String parentAccountUID = account.getParentUID(); + + if (TextUtils.isEmpty(parentAccountUID) || parentAccountUID.equalsIgnoreCase(getOrCreateGnuCashRootAccountUID())) { + return accountName; + } + + String parentAccountName = getFullyQualifiedAccountName(parentAccountUID); + + return parentAccountName + ACCOUNT_NAME_SEPARATOR + accountName; + } + /** * get account's full name directly from DB * diff --git a/app/src/main/java/org/gnucash/android/db/adapter/BooksDbAdapter.java b/app/src/main/java/org/gnucash/android/db/adapter/BooksDbAdapter.java index 6e22f0975..a8ce6045b 100644 --- a/app/src/main/java/org/gnucash/android/db/adapter/BooksDbAdapter.java +++ b/app/src/main/java/org/gnucash/android/db/adapter/BooksDbAdapter.java @@ -249,7 +249,7 @@ private String getRootAccountUID(String dbName) { DatabaseHelper databaseHelper = new DatabaseHelper(context, dbName); SQLiteDatabase db = databaseHelper.getReadableDatabase(); AccountsDbAdapter accountsDbAdapter = new AccountsDbAdapter(db, - new TransactionsDbAdapter(db, new SplitsDbAdapter(db))); + new TransactionsDbAdapter(db)); String uid = accountsDbAdapter.getOrCreateGnuCashRootAccountUID(); db.close(); return uid; diff --git a/app/src/main/java/org/gnucash/android/db/adapter/DatabaseAdapter.java b/app/src/main/java/org/gnucash/android/db/adapter/DatabaseAdapter.java index 0cd127f6f..49e97897b 100644 --- a/app/src/main/java/org/gnucash/android/db/adapter/DatabaseAdapter.java +++ b/app/src/main/java/org/gnucash/android/db/adapter/DatabaseAdapter.java @@ -19,6 +19,7 @@ import android.content.ContentValues; import android.database.Cursor; import android.database.DatabaseUtils; +import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; import android.text.TextUtils; @@ -211,7 +212,7 @@ public boolean isOpen() { * * @param model Model to be saved to the database */ - public void addRecord(@NonNull final Model model) { + public void addRecord(@NonNull final Model model) throws SQLException { addRecord(model, UpdateMethod.replace); } @@ -222,14 +223,14 @@ public void addRecord(@NonNull final Model model) { * @param model Subclass of {@link BaseModel} to be added * @param updateMethod Method to use for adding the record */ - public void addRecord(@NonNull final Model model, UpdateMethod updateMethod) { + public void addRecord(@NonNull final Model model, UpdateMethod updateMethod) throws SQLException { Timber.d("Adding %s record to database: ", model.getClass().getSimpleName()); final SQLiteStatement statement; switch (updateMethod) { case insert: statement = getInsertStatement(); synchronized (statement) { - setBindings(statement, model).execute(); + model.id = setBindings(statement, model).executeInsert(); } break; case update: @@ -241,7 +242,7 @@ public void addRecord(@NonNull final Model model, UpdateMethod updateMethod) { default: statement = getReplaceStatement(); synchronized (statement) { - setBindings(statement, model).execute(); + model.id = setBindings(statement, model).executeInsert(); } break; } @@ -254,29 +255,33 @@ public void addRecord(@NonNull final Model model, UpdateMethod updateMethod) { * @param updateMethod Method to use when persisting them * @return Number of rows affected in the database */ - private long doAddModels(@NonNull final List modelList, UpdateMethod updateMethod) { + private long doAddModels(@NonNull final List modelList, UpdateMethod updateMethod) throws SQLException { long nRow = 0; + final SQLiteStatement statement; switch (updateMethod) { case update: - synchronized (getUpdateStatement()) { + statement = getUpdateStatement(); + synchronized (statement) { for (Model model : modelList) { - setBindings(getUpdateStatement(), model).execute(); + setBindings(statement, model).execute(); nRow++; } } break; case insert: - synchronized (getInsertStatement()) { + statement = getInsertStatement(); + synchronized (statement) { for (Model model : modelList) { - setBindings(getInsertStatement(), model).execute(); + setBindings(statement, model).execute(); nRow++; } } break; default: - synchronized (getReplaceStatement()) { + statement = getReplaceStatement(); + synchronized (statement) { for (Model model : modelList) { - setBindings(getReplaceStatement(), model).execute(); + setBindings(statement, model).execute(); nRow++; } } @@ -296,14 +301,14 @@ public long bulkAddRecords(@NonNull List modelList) { return bulkAddRecords(modelList, UpdateMethod.replace); } - public long bulkAddRecords(@NonNull List modelList, UpdateMethod updateMethod) { + public long bulkAddRecords(@NonNull List modelList, UpdateMethod updateMethod) throws SQLException { if (modelList.isEmpty()) { Timber.w("Empty model list. Cannot bulk add records, returning 0"); return 0; } Timber.i("Bulk adding %d %s records to the database", modelList.size(), - modelList.isEmpty() ? "null" : modelList.get(0).getClass().getSimpleName()); + modelList.get(0).getClass().getSimpleName()); long nRow; try { beginTransaction(); @@ -719,7 +724,7 @@ public int updateRecord(@NonNull String uid, @NonNull ContentValues contentValue return mDb.update(mTableName, contentValues, CommonColumns.COLUMN_UID + "=?", new String[]{uid}); } - public void updateRecord(Model model) { + public void updateRecord(Model model) throws SQLException { addRecord(model, UpdateMethod.update); } diff --git a/app/src/main/java/org/gnucash/android/db/adapter/TransactionsDbAdapter.java b/app/src/main/java/org/gnucash/android/db/adapter/TransactionsDbAdapter.java index 8b14409ae..b43d7400a 100644 --- a/app/src/main/java/org/gnucash/android/db/adapter/TransactionsDbAdapter.java +++ b/app/src/main/java/org/gnucash/android/db/adapter/TransactionsDbAdapter.java @@ -63,6 +63,15 @@ public class TransactionsDbAdapter extends DatabaseAdapter { private final CommoditiesDbAdapter mCommoditiesDbAdapter; + /** + * Overloaded constructor. Creates adapter for already open db + * + * @param db SQlite db instance + */ + public TransactionsDbAdapter(SQLiteDatabase db) { + this(db, new SplitsDbAdapter(db)); + } + /** * Overloaded constructor. Creates adapter for already open db * @@ -105,7 +114,7 @@ public SplitsDbAdapter getSplitDbAdapter() { * @param transaction {@link Transaction} to be inserted to database */ @Override - public void addRecord(@NonNull Transaction transaction, UpdateMethod updateMethod) { + public void addRecord(@NonNull Transaction transaction, UpdateMethod updateMethod) throws SQLException { Timber.d("Adding transaction to the db via %s", updateMethod.name()); try { beginTransaction(); @@ -118,7 +127,7 @@ public void addRecord(@NonNull Transaction transaction, UpdateMethod updateMetho super.addRecord(transaction, updateMethod); Timber.d("Adding splits for transaction"); - ArrayList splitUIDs = new ArrayList<>(transaction.getSplits().size()); + List splitUIDs = new ArrayList<>(transaction.getSplits().size()); for (Split split : transaction.getSplits()) { Timber.d("Replace transaction split in db"); if (imbalanceSplit == split) { @@ -137,8 +146,6 @@ public void addRecord(@NonNull Transaction transaction, UpdateMethod updateMetho Timber.d("%d splits deleted", deleted); setTransactionSuccessful(); - } catch (SQLException e) { - Timber.e(e); } finally { endTransaction(); } @@ -155,7 +162,7 @@ public void addRecord(@NonNull Transaction transaction, UpdateMethod updateMetho * @return Number of transactions inserted */ @Override - public long bulkAddRecords(@NonNull List transactionList, UpdateMethod updateMethod) { + public long bulkAddRecords(@NonNull List transactionList, UpdateMethod updateMethod) throws SQLException { long start = System.nanoTime(); long rowInserted = super.bulkAddRecords(transactionList, updateMethod); long end = System.nanoTime(); diff --git a/app/src/main/java/org/gnucash/android/export/ExportAsyncTask.java b/app/src/main/java/org/gnucash/android/export/ExportAsyncTask.java index 4ff0f5600..5bc2c9a8f 100644 --- a/app/src/main/java/org/gnucash/android/export/ExportAsyncTask.java +++ b/app/src/main/java/org/gnucash/android/export/ExportAsyncTask.java @@ -54,7 +54,6 @@ import org.gnucash.android.app.GnuCashApplication; import org.gnucash.android.db.adapter.AccountsDbAdapter; import org.gnucash.android.db.adapter.DatabaseAdapter; -import org.gnucash.android.db.adapter.SplitsDbAdapter; import org.gnucash.android.db.adapter.TransactionsDbAdapter; import org.gnucash.android.export.csv.CsvAccountExporter; import org.gnucash.android.export.csv.CsvTransactionsExporter; @@ -458,7 +457,7 @@ private void backupAndDeleteTransactions() { boolean preserveOpeningBalances = GnuCashApplication.shouldSaveOpeningBalances(false); SQLiteDatabase db = GnuCashApplication.getActiveDb(); - TransactionsDbAdapter transactionsDbAdapter = new TransactionsDbAdapter(db, new SplitsDbAdapter(db)); + TransactionsDbAdapter transactionsDbAdapter = new TransactionsDbAdapter(db); if (preserveOpeningBalances) { openingBalances = new AccountsDbAdapter(db, transactionsDbAdapter).getAllOpeningBalanceTransactions(); } diff --git a/app/src/main/java/org/gnucash/android/importer/GncXmlHandler.java b/app/src/main/java/org/gnucash/android/importer/GncXmlHandler.java index d6a4ad629..29ae25ea7 100644 --- a/app/src/main/java/org/gnucash/android/importer/GncXmlHandler.java +++ b/app/src/main/java/org/gnucash/android/importer/GncXmlHandler.java @@ -114,7 +114,6 @@ import org.gnucash.android.db.adapter.PricesDbAdapter; import org.gnucash.android.db.adapter.RecurrenceDbAdapter; import org.gnucash.android.db.adapter.ScheduledActionDbAdapter; -import org.gnucash.android.db.adapter.SplitsDbAdapter; import org.gnucash.android.db.adapter.TransactionsDbAdapter; import org.gnucash.android.model.Account; import org.gnucash.android.model.AccountType; @@ -345,7 +344,7 @@ public GncXmlHandler() { DatabaseHelper databaseHelper = new DatabaseHelper(GnuCashApplication.getAppContext(), mBook.getUID()); mDatabaseHelper = databaseHelper; mDB = databaseHelper.getWritableDatabase(); - mTransactionsDbAdapter = new TransactionsDbAdapter(mDB, new SplitsDbAdapter(mDB)); + mTransactionsDbAdapter = new TransactionsDbAdapter(mDB); mAccountsDbAdapter = new AccountsDbAdapter(mDB, mTransactionsDbAdapter); RecurrenceDbAdapter recurrenceDbAdapter = new RecurrenceDbAdapter(mDB); mScheduledActionsDbAdapter = new ScheduledActionDbAdapter(mDB, recurrenceDbAdapter); diff --git a/app/src/main/java/org/gnucash/android/service/ScheduledActionService.java b/app/src/main/java/org/gnucash/android/service/ScheduledActionService.java index 9a00586aa..9981e0209 100644 --- a/app/src/main/java/org/gnucash/android/service/ScheduledActionService.java +++ b/app/src/main/java/org/gnucash/android/service/ScheduledActionService.java @@ -33,7 +33,6 @@ import org.gnucash.android.db.adapter.DatabaseAdapter; import org.gnucash.android.db.adapter.RecurrenceDbAdapter; import org.gnucash.android.db.adapter.ScheduledActionDbAdapter; -import org.gnucash.android.db.adapter.SplitsDbAdapter; import org.gnucash.android.db.adapter.TransactionsDbAdapter; import org.gnucash.android.export.ExportAsyncTask; import org.gnucash.android.export.ExportParams; @@ -277,7 +276,7 @@ private static boolean shouldExecuteScheduledBackup(ScheduledAction scheduledAct private static int executeTransactions(@NonNull Context context, ScheduledAction scheduledAction, SQLiteDatabase db) { int executionCount = 0; String actionUID = scheduledAction.getActionUID(); - TransactionsDbAdapter transactionsDbAdapter = new TransactionsDbAdapter(db, new SplitsDbAdapter(db)); + TransactionsDbAdapter transactionsDbAdapter = new TransactionsDbAdapter(db); Transaction trxnTemplate; try { trxnTemplate = transactionsDbAdapter.getRecord(actionUID); diff --git a/app/src/main/java/org/gnucash/android/ui/settings/BookManagerFragment.java b/app/src/main/java/org/gnucash/android/ui/settings/BookManagerFragment.java index f2b4fe037..e8f10c1b1 100644 --- a/app/src/main/java/org/gnucash/android/ui/settings/BookManagerFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/settings/BookManagerFragment.java @@ -57,7 +57,6 @@ import org.gnucash.android.db.DatabaseSchema.BookEntry; import org.gnucash.android.db.adapter.AccountsDbAdapter; import org.gnucash.android.db.adapter.BooksDbAdapter; -import org.gnucash.android.db.adapter.SplitsDbAdapter; import org.gnucash.android.db.adapter.TransactionsDbAdapter; import org.gnucash.android.ui.account.AccountsActivity; import org.gnucash.android.ui.common.Refreshable; @@ -330,7 +329,7 @@ private void setStatisticsText(View view, String bookUID) { final Context context = view.getContext(); DatabaseHelper dbHelper = new DatabaseHelper(context, bookUID); SQLiteDatabase db = dbHelper.getReadableDatabase(); - TransactionsDbAdapter trnAdapter = new TransactionsDbAdapter(db, new SplitsDbAdapter(db)); + TransactionsDbAdapter trnAdapter = new TransactionsDbAdapter(db); int transactionCount = (int) trnAdapter.getRecordsCount(); String transactionStats = getResources().getQuantityString(R.plurals.book_transaction_stats, transactionCount, transactionCount); diff --git a/app/src/main/java/org/gnucash/android/ui/transaction/TransactionDetailActivity.java b/app/src/main/java/org/gnucash/android/ui/transaction/TransactionDetailActivity.java index 3b962f641..0cf4815a2 100644 --- a/app/src/main/java/org/gnucash/android/ui/transaction/TransactionDetailActivity.java +++ b/app/src/main/java/org/gnucash/android/ui/transaction/TransactionDetailActivity.java @@ -5,6 +5,7 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.database.SQLException; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; @@ -43,6 +44,8 @@ import java.util.MissingFormatArgumentException; +import timber.log.Timber; + /** * Activity for displaying transaction information * @@ -275,7 +278,13 @@ private void duplicateTransaction(@Nullable String transactionUID) { Transaction transaction = dbAdapter.getRecord(transactionUID); Transaction duplicate = new Transaction(transaction, true); duplicate.setTime(System.currentTimeMillis()); - dbAdapter.addRecord(duplicate, DatabaseAdapter.UpdateMethod.insert); + try { + dbAdapter.addRecord(duplicate, DatabaseAdapter.UpdateMethod.insert); + if (duplicate.id <= 0) return; + } catch (SQLException e) { + Timber.e(e); + return; + } // Show the new transaction Intent intent = new Intent(getIntent()) diff --git a/app/src/main/java/org/gnucash/android/ui/transaction/TransactionsListFragment.java b/app/src/main/java/org/gnucash/android/ui/transaction/TransactionsListFragment.java index dce2f2144..9d6a72364 100644 --- a/app/src/main/java/org/gnucash/android/ui/transaction/TransactionsListFragment.java +++ b/app/src/main/java/org/gnucash/android/ui/transaction/TransactionsListFragment.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.res.Configuration; import android.database.Cursor; +import android.database.SQLException; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; @@ -440,11 +441,15 @@ private void deleteTransaction(long transactionId) { } private void duplicateTransaction(long transactionId) { - Transaction transaction = mTransactionsDbAdapter.getRecord(transactionId); - Transaction duplicate = new Transaction(transaction, true); - duplicate.setTime(System.currentTimeMillis()); - mTransactionsDbAdapter.addRecord(duplicate, DatabaseAdapter.UpdateMethod.insert); - refresh(); + try { + Transaction transaction = mTransactionsDbAdapter.getRecord(transactionId); + Transaction duplicate = new Transaction(transaction, true); + duplicate.setTime(System.currentTimeMillis()); + mTransactionsDbAdapter.addRecord(duplicate, DatabaseAdapter.UpdateMethod.insert); + refresh(); + } catch (SQLException e) { + Timber.e(e); + } } private void moveTransaction(long transactionId) { diff --git a/app/src/test/java/org/gnucash/android/test/unit/BookHelperTest.java b/app/src/test/java/org/gnucash/android/test/unit/BookHelperTest.java index 1a2117a9a..bec4dc464 100644 --- a/app/src/test/java/org/gnucash/android/test/unit/BookHelperTest.java +++ b/app/src/test/java/org/gnucash/android/test/unit/BookHelperTest.java @@ -13,14 +13,11 @@ import org.gnucash.android.db.adapter.CommoditiesDbAdapter; import org.gnucash.android.db.adapter.RecurrenceDbAdapter; import org.gnucash.android.db.adapter.ScheduledActionDbAdapter; -import org.gnucash.android.db.adapter.SplitsDbAdapter; import org.gnucash.android.db.adapter.TransactionsDbAdapter; import org.gnucash.android.importer.GncXmlHandler; import org.gnucash.android.util.ConsoleTree; -import org.gnucash.android.util.LogTree; import org.junit.After; import org.junit.Before; -import org.junit.BeforeClass; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; @@ -70,7 +67,7 @@ protected String importGnuCashXml(String filename) { private void setUpDbAdapters(String bookUID) { DatabaseHelper databaseHelper = new DatabaseHelper(GnuCashApplication.getAppContext(), bookUID); SQLiteDatabase mainDb = databaseHelper.getReadableDatabase(); - mTransactionsDbAdapter = new TransactionsDbAdapter(mainDb, new SplitsDbAdapter(mainDb)); + mTransactionsDbAdapter = new TransactionsDbAdapter(mainDb); mAccountsDbAdapter = new AccountsDbAdapter(mainDb, mTransactionsDbAdapter); RecurrenceDbAdapter recurrenceDbAdapter = new RecurrenceDbAdapter(mainDb); mScheduledActionDbAdapter = new ScheduledActionDbAdapter(mainDb, recurrenceDbAdapter); diff --git a/app/src/test/java/org/gnucash/android/test/unit/db/AccountsDbAdapterTest.java b/app/src/test/java/org/gnucash/android/test/unit/db/AccountsDbAdapterTest.java index b33d29579..cd91a2694 100644 --- a/app/src/test/java/org/gnucash/android/test/unit/db/AccountsDbAdapterTest.java +++ b/app/src/test/java/org/gnucash/android/test/unit/db/AccountsDbAdapterTest.java @@ -158,8 +158,14 @@ public void shouldAddAccountsToDatabase() { account1.addTransaction(transaction); account2.addTransaction(transaction); + // Disable foreign key validation because the second split, + // which is added during 1st account, + // references the second account which has not been added yet. + mAccountsDbAdapter.enableForeignKey(false); mAccountsDbAdapter.addRecord(account1); mAccountsDbAdapter.addRecord(account2); + mAccountsDbAdapter.enableForeignKey(true); + assertThat(mAccountsDbAdapter.getRecordsCount()).isEqualTo(3);//root+account1+account2 Account firstAccount = mAccountsDbAdapter.getRecord(account1.getUID()); assertThat(firstAccount).isNotNull(); diff --git a/app/src/test/java/org/gnucash/android/test/unit/db/BooksDbAdapterTest.java b/app/src/test/java/org/gnucash/android/test/unit/db/BooksDbAdapterTest.java index fc29829a6..0a2a29672 100644 --- a/app/src/test/java/org/gnucash/android/test/unit/db/BooksDbAdapterTest.java +++ b/app/src/test/java/org/gnucash/android/test/unit/db/BooksDbAdapterTest.java @@ -150,7 +150,7 @@ public void testGeneratedDisplayNames_shouldBeUnique() { String generatedName = mBooksDbAdapter.generateDefaultBookName(); assertThat(generatedName).isNotEqualTo(book3.getDisplayName()); - assertThat(generatedName).isEqualTo("Book 4"); + assertThat(generatedName).isEqualTo("Book 3"); } @Test diff --git a/app/src/test/java/org/gnucash/android/test/unit/export/QifExporterTest.java b/app/src/test/java/org/gnucash/android/test/unit/export/QifExporterTest.java index fa8b495f0..3ddbb5c3e 100644 --- a/app/src/test/java/org/gnucash/android/test/unit/export/QifExporterTest.java +++ b/app/src/test/java/org/gnucash/android/test/unit/export/QifExporterTest.java @@ -26,7 +26,6 @@ import org.gnucash.android.db.DatabaseHelper; import org.gnucash.android.db.adapter.AccountsDbAdapter; import org.gnucash.android.db.adapter.BooksDbAdapter; -import org.gnucash.android.db.adapter.SplitsDbAdapter; import org.gnucash.android.db.adapter.TransactionsDbAdapter; import org.gnucash.android.export.ExportFormat; import org.gnucash.android.export.ExportParams; @@ -308,8 +307,7 @@ public void amountAndSplit_shouldBeExported() throws IOException { account2.setAccountType(AccountType.CASH); accountsDbAdapter.addRecord(account2); - SplitsDbAdapter splitsDbAdapter = new SplitsDbAdapter(mDb); - TransactionsDbAdapter transactionsDbAdapter = new TransactionsDbAdapter(mDb, splitsDbAdapter); + TransactionsDbAdapter transactionsDbAdapter = new TransactionsDbAdapter(mDb); Transaction transaction = new Transaction("One transaction"); Split split1 = new Split(new Money(123.45, Commodity.EUR), account1.getUID()); Split split2 = split1.createPair(account2.getUID());