TEST_F(ImapPlainTest, AddAccount) { // prevent the embedded beginedit/commitedit from doing anything qof_instance_increase_editlevel(QOF_INSTANCE(t_bank_account)); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); gnc_account_imap_add_account(t_imap, "foo", "bar", t_expense_account1); gnc_account_imap_add_account(t_imap, "baz", "waldo", t_expense_account2); gnc_account_imap_add_account(t_imap, NULL, "pepper", t_expense_account1); gnc_account_imap_add_account(t_imap, NULL, "salt", t_expense_account2); EXPECT_EQ(1, qof_instance_get_editlevel(QOF_INSTANCE(t_bank_account))); EXPECT_TRUE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); gnc_account_imap_add_account(t_imap, NULL, NULL, t_expense_account2); EXPECT_FALSE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); gnc_account_imap_add_account(t_imap, "pork", "sausage", NULL); EXPECT_FALSE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); qof_instance_reset_editlevel(QOF_INSTANCE(t_bank_account)); auto root = qof_instance_get_slots(QOF_INSTANCE(t_bank_account)); auto value = root->get_slot({IMAP_FRAME, "foo", "bar"}); auto check_account = [this](KvpValue* v) { return xaccAccountLookup(v->get<GncGUID*>(), this->t_imap->book); }; EXPECT_EQ(t_expense_account1, check_account(value)); value = root->get_slot({IMAP_FRAME, "baz", "waldo"}); EXPECT_EQ(t_expense_account2, check_account(value)); value = root->get_slot({IMAP_FRAME, "pepper"}); EXPECT_EQ(t_expense_account1, check_account(value)); value = root->get_slot({IMAP_FRAME, "salt"}); EXPECT_EQ(t_expense_account2, check_account(value)); value = root->get_slot({IMAP_FRAME, "pork", "sausage"}); EXPECT_EQ(nullptr, value); }
TEST_F(ImapBayesTest, AddAccountBayes) { // prevent the embedded beginedit/commitedit from doing anything qof_instance_increase_editlevel(QOF_INSTANCE(t_bank_account)); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); gnc_account_imap_add_account_bayes(t_imap, t_list1, t_expense_account1); gnc_account_imap_add_account_bayes(t_imap, t_list2, t_expense_account2); gnc_account_imap_add_account_bayes(t_imap, t_list3, t_expense_account1); gnc_account_imap_add_account_bayes(t_imap, t_list4, t_expense_account2); EXPECT_EQ(1, qof_instance_get_editlevel(QOF_INSTANCE(t_bank_account))); EXPECT_TRUE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); gnc_account_imap_add_account_bayes(t_imap, t_list5, NULL); EXPECT_FALSE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); qof_instance_reset_editlevel(QOF_INSTANCE(t_bank_account)); auto root = qof_instance_get_slots(QOF_INSTANCE(t_bank_account)); auto acct1_guid = guid_to_string (xaccAccountGetGUID(t_expense_account1)); auto acct2_guid = guid_to_string (xaccAccountGetGUID(t_expense_account2)); auto value = root->get_slot({IMAP_FRAME_BAYES, "foo", "bar"}); auto check_account = [this](KvpValue* v) { return (v->get<const char*>(), this->t_imap->book); }; value = root->get_slot({IMAP_FRAME_BAYES, foo, acct1_guid}); EXPECT_EQ(1, value->get<int64_t>()); value = root->get_slot({IMAP_FRAME_BAYES, bar, acct1_guid}); EXPECT_EQ(1, value->get<int64_t>()); value = root->get_slot({IMAP_FRAME_BAYES, baz, acct2_guid}); EXPECT_EQ(1, value->get<int64_t>()); value = root->get_slot({IMAP_FRAME_BAYES, waldo, acct2_guid}); EXPECT_EQ(1, value->get<int64_t>()); value = root->get_slot({IMAP_FRAME_BAYES, pepper, acct1_guid}); EXPECT_EQ(1, value->get<int64_t>()); value = root->get_slot({IMAP_FRAME_BAYES, salt, acct2_guid}); EXPECT_EQ(1, value->get<int64_t>()); value = root->get_slot({IMAP_FRAME_BAYES, baz, acct1_guid}); EXPECT_EQ(nullptr, value); qof_instance_increase_editlevel(QOF_INSTANCE(t_bank_account)); gnc_account_imap_add_account_bayes(t_imap, t_list2, t_expense_account2); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); qof_instance_reset_editlevel(QOF_INSTANCE(t_bank_account)); value = root->get_slot({IMAP_FRAME_BAYES, baz, acct2_guid}); EXPECT_EQ(2, value->get<int64_t>()); }
TEST_F(ImapPlainTest, DeleteAccount) { Path path1 {IMAP_FRAME, "foo", "waldo"}; Path path2 {IMAP_FRAME, "foo"}; Path path3 {IMAP_FRAME}; // prevent the embedded beginedit/commitedit from doing anything qof_instance_increase_editlevel(QOF_INSTANCE(t_bank_account)); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); gnc_account_imap_add_account(t_imap, "foo", "bar", t_expense_account1); gnc_account_imap_add_account(t_imap, "foo", "waldo", t_expense_account2); gnc_account_imap_add_account(t_imap, NULL, "pepper", t_expense_account1); EXPECT_EQ(1, qof_instance_get_editlevel(QOF_INSTANCE(t_bank_account))); EXPECT_TRUE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); gnc_account_imap_delete_account(t_imap, NULL, NULL); EXPECT_FALSE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); gnc_account_imap_delete_account(t_imap, "foo", "waldo"); EXPECT_TRUE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); EXPECT_EQ(t_expense_account1, gnc_account_imap_find_account(t_imap, "foo", "bar")); EXPECT_EQ(nullptr, gnc_account_imap_find_account(t_imap, "foo", "waldo")); auto root = qof_instance_get_slots(QOF_INSTANCE(t_bank_account)); EXPECT_EQ(nullptr, root->get_slot(path1)); gnc_account_imap_delete_account(t_imap, "foo", "bar"); EXPECT_TRUE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); EXPECT_EQ(nullptr, root->get_slot(path2)); gnc_account_imap_delete_account(t_imap, NULL, "pepper"); EXPECT_TRUE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); EXPECT_EQ(nullptr, root->get_slot(path3)); qof_instance_reset_editlevel(QOF_INSTANCE(t_bank_account)); }
static void gnc_billterm_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GncBillTerm *bt; g_return_if_fail(GNC_IS_BILLTERM(object)); bt = GNC_BILLTERM(object); g_assert (qof_instance_get_editlevel(bt)); switch (prop_id) { case PROP_NAME: gncBillTermSetName(bt, g_value_get_string(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } }
static void gnc_customer_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { GncCustomer *cust; gchar *key; g_return_if_fail(GNC_IS_CUSTOMER(object)); cust = GNC_CUSTOMER(object); g_assert (qof_instance_get_editlevel(cust)); switch (prop_id) { case PROP_NAME: gncCustomerSetName(cust, g_value_get_string(value)); break; case PROP_PDF_DIRNAME: key = OWNER_EXPORT_PDF_DIRNAME; qof_instance_set_kvp (QOF_INSTANCE (cust), key, value); break; case PROP_LAST_POSTED: key = LAST_POSTED_TO_ACCT; qof_instance_set_kvp (QOF_INSTANCE (cust), key, value); break; case PROP_PAYMENT_LAST_ACCT: key = GNC_PAYMENT "/" GNC_LAST_ACCOUNT; qof_instance_set_kvp (QOF_INSTANCE (cust), key, value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } }
/* XXXX this exsitnace of this routine is just wrong */ gboolean gncEntryIsOpen (const GncEntry *entry) { if (!entry) return FALSE; return (qof_instance_get_editlevel(entry) > 0); }
static void qof_book_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { QofBook *book; gchar *key; g_return_if_fail (QOF_IS_BOOK (object)); book = QOF_BOOK (object); g_assert (qof_instance_get_editlevel(book)); switch (prop_id) { case PROP_OPT_TRADING_ACCOUNTS: key = g_strdup_printf ("%s/%s/%s", KVP_OPTION_PATH, OPTION_SECTION_ACCOUNTS, OPTION_NAME_TRADING_ACCOUNTS); qof_instance_set_kvp (QOF_INSTANCE (book), key, value); g_free (key); break; case PROP_OPT_BOOK_CURRENCY: key = g_strdup_printf ("%s/%s/%s", KVP_OPTION_PATH, OPTION_SECTION_ACCOUNTS, OPTION_NAME_BOOK_CURRENCY); qof_instance_set_kvp (QOF_INSTANCE (book), key, value); g_free (key); break; case PROP_OPT_DEFAULT_GAINS_POLICY: key = g_strdup_printf ("%s/%s/%s", KVP_OPTION_PATH, OPTION_SECTION_ACCOUNTS, OPTION_NAME_DEFAULT_GAINS_POLICY); qof_instance_set_kvp (QOF_INSTANCE (book), key, value); g_free (key); break; case PROP_OPT_AUTO_READONLY_DAYS: key = g_strdup_printf ("%s/%s/%s", KVP_OPTION_PATH, OPTION_SECTION_ACCOUNTS, OPTION_NAME_AUTO_READONLY_DAYS); qof_instance_set_kvp (QOF_INSTANCE (book), key, value); g_free (key); break; case PROP_OPT_NUM_FIELD_SOURCE: key = g_strdup_printf ("%s/%s/%s", KVP_OPTION_PATH, OPTION_SECTION_ACCOUNTS, OPTION_NAME_NUM_FIELD_SOURCE); qof_instance_set_kvp (QOF_INSTANCE (book), key, value); g_free (key); break; case PROP_OPT_DEFAULT_BUDGET: key = g_strdup_printf ("%s/%s/%s", KVP_OPTION_PATH, OPTION_SECTION_ACCOUNTS, OPTION_NAME_DEFAULT_BUDGET); qof_instance_set_kvp (QOF_INSTANCE (book), key, value); g_free (key); break; case PROP_OPT_FY_END: key = const_cast<char*>("fy_end"); qof_instance_set_kvp (QOF_INSTANCE (book), key, value); break; case PROP_AB_TEMPLATES: key = const_cast<char*>(AB_KEY "/" AB_TEMPLATES); qof_instance_set_kvp (QOF_INSTANCE (book), key, value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } }
TEST_F(ImapBayesTest, ConvertAccountBayes) { // prevent the embedded beginedit/commitedit from doing anything qof_instance_increase_editlevel(QOF_INSTANCE(t_bank_account)); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); gnc_account_imap_add_account_bayes(t_imap, t_list1, t_expense_account1); //Food gnc_account_imap_add_account_bayes(t_imap, t_list2, t_expense_account2); //Drink auto root = qof_instance_get_slots(QOF_INSTANCE(t_bank_account)); auto book = qof_instance_get_slots(QOF_INSTANCE(t_imap->book)); auto acct1_guid = guid_to_string (xaccAccountGetGUID(t_expense_account1)); //Food auto acct2_guid = guid_to_string (xaccAccountGetGUID(t_expense_account2)); //Drink auto acct3_guid = guid_to_string (xaccAccountGetGUID(t_asset_account2)); //Asset-Bank auto acct4_guid = guid_to_string (xaccAccountGetGUID(t_sav_account)); //Sav Bank auto val1 = new KvpValue(static_cast<int64_t>(10)); auto val2 = new KvpValue(static_cast<int64_t>(5)); auto val3 = new KvpValue(static_cast<int64_t>(2)); // Test for existing entries, all will be 1 auto value = root->get_slot({IMAP_FRAME_BAYES, foo, acct1_guid}); EXPECT_EQ(1, value->get<int64_t>()); value = root->get_slot({IMAP_FRAME_BAYES, bar, acct1_guid}); EXPECT_EQ(1, value->get<int64_t>()); value = root->get_slot({IMAP_FRAME_BAYES, baz, acct2_guid}); EXPECT_EQ(1, value->get<int64_t>()); value = root->get_slot({IMAP_FRAME_BAYES, waldo, acct2_guid}); EXPECT_EQ(1, value->get<int64_t>()); // Set up some old entries root->set_path({IMAP_FRAME_BAYES, pepper, "Asset-Bank"}, val1); root->set_path({IMAP_FRAME_BAYES, salt, "Asset-Bank#Bank"}, val1); root->set_path({IMAP_FRAME_BAYES, salt, "Asset>Bank#Bank"}, val2); root->set_path({IMAP_FRAME_BAYES, pork, "Expense#Food"}, val2); root->set_path({IMAP_FRAME_BAYES, sausage, "Expense#Drink"}, val3); root->set_path({IMAP_FRAME_BAYES, foo, "Expense#Food"}, val2); EXPECT_EQ(1, qof_instance_get_editlevel(QOF_INSTANCE(t_bank_account))); EXPECT_TRUE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); qof_instance_mark_clean(QOF_INSTANCE(t_bank_account)); // Start Convert gnc_account_imap_convert_bayes (t_imap->book); // convert from 'Asset-Bank' to 'Asset-Bank' guid value = root->get_slot({IMAP_FRAME_BAYES, pepper, acct3_guid}); EXPECT_EQ(10, value->get<int64_t>()); // convert from 'Asset-Bank#Bank' to 'Sav Bank' guid value = root->get_slot({IMAP_FRAME_BAYES, salt, acct4_guid}); EXPECT_EQ(10, value->get<int64_t>()); // convert from 'Expense#Food' to 'Food' guid value = root->get_slot({IMAP_FRAME_BAYES, pork, acct1_guid}); EXPECT_EQ(5, value->get<int64_t>()); // convert from 'Expense#Drink' to 'Drink' guid value = root->get_slot({IMAP_FRAME_BAYES, sausage, acct2_guid}); EXPECT_EQ(2, value->get<int64_t>()); // convert from 'Expense#Food' to 'Food' guid but add to original value value = root->get_slot({IMAP_FRAME_BAYES, foo, acct1_guid}); EXPECT_EQ(6, value->get<int64_t>()); // Check for run once flag auto vals = book->get_slot("changed-bayesian-to-guid"); EXPECT_STREQ("true", vals->get<const char*>()); EXPECT_EQ(1, qof_instance_get_editlevel(QOF_INSTANCE(t_bank_account))); EXPECT_TRUE(qof_instance_get_dirty_flag(QOF_INSTANCE(t_bank_account))); }
static void gnc_schedxaction_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { SchedXaction *sx; g_return_if_fail(GNC_IS_SCHEDXACTION(object)); sx = GNC_SCHEDXACTION(object); g_assert (qof_instance_get_editlevel(sx)); switch (prop_id) { case PROP_NAME: xaccSchedXactionSetName(sx, g_value_get_string(value)); break; case PROP_ENABLED: xaccSchedXactionSetEnabled(sx, g_value_get_boolean(value)); break; case PROP_NUM_OCCURANCE: xaccSchedXactionSetNumOccur(sx, g_value_get_int(value)); break; case PROP_REM_OCCURANCE: xaccSchedXactionSetRemOccur(sx, g_value_get_int(value)); break; case PROP_AUTO_CREATE: xaccSchedXactionSetAutoCreate(sx, g_value_get_boolean(value), sx->autoCreateNotify); break; case PROP_AUTO_CREATE_NOTIFY: xaccSchedXactionSetAutoCreate(sx, sx->autoCreateOption, g_value_get_boolean(value)); break; case PROP_ADVANCE_CREATION_DAYS: xaccSchedXactionSetAdvanceCreation(sx, g_value_get_int(value)); break; case PROP_ADVANCE_REMINDER_DAYS: xaccSchedXactionSetAdvanceReminder(sx, g_value_get_int(value)); break; case PROP_START_DATE: /* Note: when passed through a boxed gvalue, the julian value of the date is copied. The date may appear invalid until a function requiring for dmy calculation is called. */ xaccSchedXactionSetStartDate(sx, g_value_get_boxed(value)); break; case PROP_END_DATE: /* Note: when passed through a boxed gvalue, the julian value of the date is copied. The date may appear invalid until a function requiring for dmy calculation is called. */ xaccSchedXactionSetEndDate(sx, g_value_get_boxed(value)); break; case PROP_LAST_OCCURANCE_DATE: /* Note: when passed through a boxed gvalue, the julian value of the date is copied. The date may appear invalid until a function requiring for dmy calculation is called. */ xaccSchedXactionSetLastOccurDate(sx, g_value_get_boxed(value)); break; case PROP_INSTANCE_COUNT: gnc_sx_set_instance_count(sx, g_value_get_int(value)); break; case PROP_TEMPLATE_ACCOUNT: sx_set_template_account(sx, g_value_get_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } }