[auto-clear] Include test for ambiguous cases

This commit is contained in:
Cristian Klein 2020-10-23 16:34:46 +02:00
parent 5cd777b673
commit 9bf550d38f

View File

@ -39,7 +39,12 @@ struct SplitDatum {
bool cleared;
};
SplitDatum splitData[] = {
struct TestCase {
gint64 amount;
const char *expectedErr;
};
std::vector<SplitDatum> easySplitData = {
{ "Memo 01", - 8234, true },
{ "Memo 02", -156326, true },
{ "Memo 03", - 4500, true },
@ -72,12 +77,7 @@ SplitDatum splitData[] = {
{ "Memo 30", - 61200, false },
};
struct TestCase {
gint64 amount;
const char *expectedErr;
};
TestCase testCases[] = {
std::vector<TestCase> easyTestCases = {
{ 0, "The selected amount cannot be cleared.", },
{ -869227, "Account is already at Auto-Clear Balance." }, // No splits need to be cleared.
{ -869300, "The selected amount cannot be cleared." },
@ -85,7 +85,33 @@ TestCase testCases[] = {
{ -963272, NULL }, // All splits need to be cleared.
};
TEST(AutoClear, AutoClearAll) {
std::vector<SplitDatum> ambiguousSplitData = {
{ "Memo 01", -10, false },
{ "Memo 02", -10, false },
{ "Memo 03", -10, false },
};
std::vector<TestCase> ambiguousTestCases = {
{ -10, "Cannot uniquely clear splits. Found multiple possibilities." },
{ -20, "Cannot uniquely clear splits. Found multiple possibilities." },
// Commented out, auto-clear algorithm is not smart enough yet.
//{ -30, NULL },
};
class AutoClearTest
: public testing::TestWithParam<
std::pair<
std::vector<SplitDatum>,
std::vector<TestCase>
>
> {
};
TEST_P(AutoClearTest, DoesAutoClear) {
auto splitData = GetParam().first;
auto testCase = GetParam().second;
QofBook *book = qof_book_new ();
Account *account = xaccMallocAccount(book);
xaccAccountSetName(account, "Test Account");
@ -102,7 +128,7 @@ TEST(AutoClear, AutoClearAll) {
}
xaccAccountCommitEdit(account);
for (auto &t : testCases) {
for (auto &t : testCase) {
gnc_numeric amount_to_clear = gnc_numeric_create(t.amount, DENOM);
char *err;
@ -124,3 +150,12 @@ TEST(AutoClear, AutoClearAll) {
qof_book_destroy(book);
}
INSTANTIATE_TEST_SUITE_P(
InstantiationAutoClearTest,
AutoClearTest,
testing::Values(
std::pair{ easySplitData, easyTestCases },
std::pair{ ambiguousSplitData, ambiguousTestCases }
)
);