174 lines
5.9 KiB
Python
174 lines
5.9 KiB
Python
# These tests are auto-generated with test data from:
|
|
# https://github.com/exercism/problem-specifications/tree/main/exercises/ledger/canonical-data.json
|
|
# File last updated on 2023-12-27
|
|
|
|
import unittest
|
|
|
|
from ledger import (
|
|
format_entries,
|
|
create_entry,
|
|
)
|
|
|
|
|
|
class LedgerTest(unittest.TestCase):
|
|
maxDiff = 5000
|
|
|
|
def test_empty_ledger(self):
|
|
currency = "USD"
|
|
locale = "en_US"
|
|
entries = []
|
|
expected = "\n".join(
|
|
[
|
|
"Date | Description | Change ",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|
|
|
|
def test_one_entry(self):
|
|
currency = "USD"
|
|
locale = "en_US"
|
|
entries = [
|
|
create_entry("2015-01-01", "Buy present", -1000),
|
|
]
|
|
expected = "\n".join(
|
|
[
|
|
"Date | Description | Change ",
|
|
"01/01/2015 | Buy present | ($10.00)",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|
|
|
|
def test_credit_and_debit(self):
|
|
currency = "USD"
|
|
locale = "en_US"
|
|
entries = [
|
|
create_entry("2015-01-02", "Get present", 1000),
|
|
create_entry("2015-01-01", "Buy present", -1000),
|
|
]
|
|
expected = "\n".join(
|
|
[
|
|
"Date | Description | Change ",
|
|
"01/01/2015 | Buy present | ($10.00)",
|
|
"01/02/2015 | Get present | $10.00 ",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|
|
|
|
def test_final_order_tie_breaker_is_change(self):
|
|
currency = "USD"
|
|
locale = "en_US"
|
|
entries = [
|
|
create_entry("2015-01-01", "Something", 0),
|
|
create_entry("2015-01-01", "Something", -1),
|
|
create_entry("2015-01-01", "Something", 1),
|
|
]
|
|
expected = "\n".join(
|
|
[
|
|
"Date | Description | Change ",
|
|
"01/01/2015 | Something | ($0.01)",
|
|
"01/01/2015 | Something | $0.00 ",
|
|
"01/01/2015 | Something | $0.01 ",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|
|
|
|
def test_overlong_description_is_truncated(self):
|
|
currency = "USD"
|
|
locale = "en_US"
|
|
entries = [
|
|
create_entry("2015-01-01", "Freude schoner Gotterfunken", -123456),
|
|
]
|
|
expected = "\n".join(
|
|
[
|
|
"Date | Description | Change ",
|
|
"01/01/2015 | Freude schoner Gotterf... | ($1,234.56)",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|
|
|
|
def test_euros(self):
|
|
currency = "EUR"
|
|
locale = "en_US"
|
|
entries = [
|
|
create_entry("2015-01-01", "Buy present", -1000),
|
|
]
|
|
expected = "\n".join(
|
|
[
|
|
"Date | Description | Change ",
|
|
"01/01/2015 | Buy present | (€10.00)",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|
|
|
|
def test_dutch_locale(self):
|
|
currency = "USD"
|
|
locale = "nl_NL"
|
|
entries = [
|
|
create_entry("2015-03-12", "Buy present", 123456),
|
|
]
|
|
expected = "\n".join(
|
|
[
|
|
"Datum | Omschrijving | Verandering ",
|
|
"12-03-2015 | Buy present | $ 1.234,56 ",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|
|
|
|
def test_dutch_locale_and_euros(self):
|
|
currency = "EUR"
|
|
locale = "nl_NL"
|
|
entries = [
|
|
create_entry("2015-03-12", "Buy present", 123456),
|
|
]
|
|
expected = "\n".join(
|
|
[
|
|
"Datum | Omschrijving | Verandering ",
|
|
"12-03-2015 | Buy present | € 1.234,56 ",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|
|
|
|
def test_dutch_negative_number_with_3_digits_before_decimal_point(self):
|
|
currency = "USD"
|
|
locale = "nl_NL"
|
|
entries = [
|
|
create_entry("2015-03-12", "Buy present", -12345),
|
|
]
|
|
expected = "\n".join(
|
|
[
|
|
"Datum | Omschrijving | Verandering ",
|
|
"12-03-2015 | Buy present | $ -123,45 ",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|
|
|
|
def test_american_negative_number_with_3_digits_before_decimal_point(self):
|
|
currency = "USD"
|
|
locale = "en_US"
|
|
entries = [
|
|
create_entry("2015-03-12", "Buy present", -12345),
|
|
]
|
|
expected = "\n".join(
|
|
[
|
|
"Date | Description | Change ",
|
|
"03/12/2015 | Buy present | ($123.45)",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|
|
|
|
def test_multiple_entries_on_same_date_ordered_by_description(self):
|
|
currency = "USD"
|
|
locale = "en_US"
|
|
entries = [
|
|
create_entry("2015-01-01", "Get present", 1000),
|
|
create_entry("2015-01-01", "Buy present", -1000),
|
|
]
|
|
expected = "\n".join(
|
|
[
|
|
"Date | Description | Change ",
|
|
"01/01/2015 | Buy present | ($10.00)",
|
|
"01/01/2015 | Get present | $10.00 ",
|
|
]
|
|
)
|
|
self.assertEqual(format_entries(currency, locale, entries), expected)
|