hi guys,
I need help on the Create_spend_chart function, when I test locally with the expected string from the test module, I get the same string, I test it using the == and I get True, so I am not sure why it doesn’t pass the test.
Here is my function (Sorry if it is messy!)
def create_spend_chart(categories):
percentages = [‘100’, ’ 90’, ’ 80’, ’ 70’, ’ 60’, ’ 50’, ’ 40’, ’ 30’, ’ 20’, ’ 10’, ’ 0’]
Creating a list in this forme: [(category1, total_spent), (category2, total_spent)…] where category is item of the categories instances.
Category =
total = 0
title = ‘Percentage spent by category\n’
y_axis =
for category in categories:
spent = 0
for v in category.ledger:
if float(v[‘amount’]) < 0:
spent += abs(v[‘amount’])
Category.append((category.category, spent))
#print(Category)
---- creating the Y axis -----
for category in Category:
total += category[1]
values =
for c in Category:
percent = round(c[1]/total*100)
values.append((c[0], percent))
for p in percentages:
line = p + ‘|’
for v in values:
if float(p) > v[1]:
line += ’ ’
else:
line += ’ o ’
y_axis.append(line + ’ ')
---- creating the separating line (dashes…) ----
separation = ’ ’ + ‘-’*(len(Category)*3+1)
---- creating the category names … -----
lengths = [len(c[0]) for c in Category]
m = max(lengths)
names =
for i in range(m):
line = ’ ’
for v in Category:
try:
line += f’ {v[0][i]} ’
except IndexError:
line += ’ ’
names.append(line + ’ ')
returning the result …
#print(type(title), type(’\n’.join(y_axis)), ‘\n’.join(names), sep=’\n’)
return title + ‘\n’.join(y_axis) + ‘\n’ + separation + ‘\n’ + ‘\n’.join(names)
Here is the error I get:
.F…
FAIL: test_create_spend_chart (test_module.UnitTests)
Traceback (most recent call last):
File “/home/runner/boilerplate-budget-app/test_module.py”, line 102, in test_create_spend_chart
self.assertEqual(actual, expected, ‘Expected different chart representation. Check that all spacing is exact.’)
AssertionError: 'Perc[74 chars] 70| o \n 60| o \n 50| o [300 chars] ’ != 'Perc[74 chars] 70| o \n 60| o \n 50| o [300 chars] t ’
Diff is 1189 characters long. Set self.maxDiff to None to see it. : Expected different chart representation. Check that all spacing is exact.
If I enable the Diff I get some indications, but I am not really sure how to read that!
Percentage spent by category
100|
90|
80|
- 70| o
? —
- 70| o
? +++
- 60| o
? —
- 60| o
? +++
- 50| o
? —
- 50| o
? +++
- 40| o
? —
- 40| o
? +++
- 30| o
? —
- 30| o
? +++
- 20| o o
? —
- 20| o o
? +++
- 10| o o
? —
-
F E B
? —
-
B F E
? +++
-
o n u
? —
-
u o n
? +++
-
o t s
? —
-
s o t
? +++
-
d e i
? —
-
i d e
? +++
-
n r
-
e t
-
s a
-
s i
-
r n
? ^
-
n
? ^
-
m
-
t e
? ^
-
e
? ^
-
a s
-
i s
-
n
? —
-
n
? +++
-
m
-
e
-
n
-
t ? ---
-
t ? +++
: Expected different chart representation. Check that all spacing is exact.
here is the test:
def test_create_spend_chart(self):
self.food.deposit(900, "deposit")
self.entertainment.deposit(900, "deposit")
self.business.deposit(900, "deposit")
self.food.withdraw(105.55)
self.entertainment.withdraw(33.40)
self.business.withdraw(10.99)
This is the expected string:
expected = "Percentage spent by category\n100| \n 90| \n 80| \n 70| o \n 60| o \n 50| o \n 40| o \n 30| o \n 20| o o \n 10| o o \n 0| o o o \n ----------\n B F E \n u o n \n s o t \n i d e \n n r \n e t \n s a \n s i \n n \n m \n e \n n \n t "
Please help
Thanks in advance :))