generated from Coding-Cuddles/bootstrap-cpp-kata
-
Notifications
You must be signed in to change notification settings - Fork 1
/
test_expense_report.cpp
89 lines (74 loc) · 2.92 KB
/
test_expense_report.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <sstream>
#include <iostream>
#include <string>
#include <gtest/gtest.h>
#include "expense_report.h"
class MockReportPrinter : public ReportPrinter {
private:
std::string text;
public:
void print(const std::string& text) override { this->text += text + "\n"; }
std::string get_text() const { return text; }
};
class ExpenseReportTest : public ::testing::Test {
protected:
void SetUp() override
{
report = std::make_unique<ExpenseReport>();
printer = std::make_unique<MockReportPrinter>();
}
std::unique_ptr<ExpenseReport> report;
std::unique_ptr<MockReportPrinter> printer;
};
TEST_F(ExpenseReportTest, print_empty)
{
report->print_report(*printer);
std::string expected_output = "Expense Report\n"
"--------------\n"
"--------------\n"
"Meal Total: 0.00\n"
"Total: 0.00\n";
EXPECT_EQ(printer->get_text(), expected_output);
}
TEST_F(ExpenseReportTest, print_one_dinner)
{
report->add_expense(Expense(ExpenseType::DINNER, 3000));
report->print_report(*printer);
std::string expected_output = "Expense Report\n"
"--------------\n"
"Dinner\t30.00\t\n"
"--------------\n"
"Meal Total: 33.00\n"
"Total: 33.00\n";
EXPECT_EQ(printer->get_text(), expected_output);
}
TEST_F(ExpenseReportTest, print_two_meals_and_dinner_over)
{
report->add_expense(Expense(ExpenseType::DINNER, 6000));
report->add_expense(Expense(ExpenseType::BREAKFAST, 1000));
report->print_report(*printer);
std::string expected_output = "Expense Report\n"
"--------------\n"
"Dinner\t60.00\tX\n"
"Breakfast\t10.00\t\n"
"--------------\n"
"Meal Total: 76.50\n"
"Total: 76.50\n";
EXPECT_EQ(printer->get_text(), expected_output);
}
TEST_F(ExpenseReportTest, print_mix_and_dinner_over)
{
report->add_expense(Expense(ExpenseType::DINNER, 5000));
report->add_expense(Expense(ExpenseType::BREAKFAST, 2000));
report->add_expense(Expense(ExpenseType::LODGING, 3000));
report->print_report(*printer);
std::string expected_output = "Expense Report\n"
"--------------\n"
"Dinner\t50.00\t\n"
"Breakfast\t20.00\tX\n"
"Lodging\t30.00\t\n"
"--------------\n"
"Meal Total: 76.00\n"
"Total: 110.50\n";
EXPECT_EQ(printer->get_text(), expected_output);
}