diff --git a/budgetproject/budget/__pycache__/admin.cpython-310.pyc b/budgetproject/budget/__pycache__/admin.cpython-310.pyc new file mode 100644 index 00000000..718fddbd Binary files /dev/null and b/budgetproject/budget/__pycache__/admin.cpython-310.pyc differ diff --git a/budgetproject/budget/__pycache__/forms.cpython-310.pyc b/budgetproject/budget/__pycache__/forms.cpython-310.pyc new file mode 100644 index 00000000..5130fa9f Binary files /dev/null and b/budgetproject/budget/__pycache__/forms.cpython-310.pyc differ diff --git a/budgetproject/budget/__pycache__/models.cpython-310.pyc b/budgetproject/budget/__pycache__/models.cpython-310.pyc new file mode 100644 index 00000000..76d2b181 Binary files /dev/null and b/budgetproject/budget/__pycache__/models.cpython-310.pyc differ diff --git a/budgetproject/budget/__pycache__/urls.cpython-310.pyc b/budgetproject/budget/__pycache__/urls.cpython-310.pyc new file mode 100644 index 00000000..c8ff17db Binary files /dev/null and b/budgetproject/budget/__pycache__/urls.cpython-310.pyc differ diff --git a/budgetproject/budget/__pycache__/views.cpython-310.pyc b/budgetproject/budget/__pycache__/views.cpython-310.pyc new file mode 100644 index 00000000..59b0b559 Binary files /dev/null and b/budgetproject/budget/__pycache__/views.cpython-310.pyc differ diff --git a/budgetproject/budget/tests.py b/budgetproject/budget/tests.py deleted file mode 100644 index de8bdc00..00000000 --- a/budgetproject/budget/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/budgetproject/budget/tests/__init__.py b/budgetproject/budget/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/budgetproject/budget/tests/__pycache__/__init__.cpython-310.pyc b/budgetproject/budget/tests/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 00000000..0aa0ce54 Binary files /dev/null and b/budgetproject/budget/tests/__pycache__/__init__.cpython-310.pyc differ diff --git a/budgetproject/budget/tests/__pycache__/test_urls.cpython-310.pyc b/budgetproject/budget/tests/__pycache__/test_urls.cpython-310.pyc new file mode 100644 index 00000000..60119600 Binary files /dev/null and b/budgetproject/budget/tests/__pycache__/test_urls.cpython-310.pyc differ diff --git a/budgetproject/budget/tests/__pycache__/test_views.cpython-310.pyc b/budgetproject/budget/tests/__pycache__/test_views.cpython-310.pyc new file mode 100644 index 00000000..f4ace3b0 Binary files /dev/null and b/budgetproject/budget/tests/__pycache__/test_views.cpython-310.pyc differ diff --git a/budgetproject/budget/tests/test_urls.py b/budgetproject/budget/tests/test_urls.py new file mode 100644 index 00000000..d4593742 --- /dev/null +++ b/budgetproject/budget/tests/test_urls.py @@ -0,0 +1,22 @@ +from django.test import SimpleTestCase +from django.urls import reverse, resolve +from budget.views import project_list, project_detail, ProjectCreateView + + +class TestUrls(SimpleTestCase): + + def test_list_url_resolved(self): + url = reverse('list') + + self.assertEqual(resolve(url).func, project_list) + + def test_add_url_resolved(self): + url = reverse('add') + + self.assertEqual(resolve(url).func.view_class, ProjectCreateView) + + def test_detail_url_resolved(self): + url = reverse('detail', args=['some-slug']) + + self.assertEqual(resolve(url).func, project_detail) + \ No newline at end of file diff --git a/budgetproject/budget/tests/test_views.py b/budgetproject/budget/tests/test_views.py new file mode 100644 index 00000000..2ea2b6b6 --- /dev/null +++ b/budgetproject/budget/tests/test_views.py @@ -0,0 +1,117 @@ +from django.test import TestCase, Client +from django.urls import reverse +from budget.models import Project, Category, Expense +import json + +class TestViews(TestCase): + + def setUp(self): + self.client = Client() + self.list_url = reverse('list') + self.detail_url = reverse('detail', args=['project1']) + self.project1 = Project.objects.create( + name='project1', + budget=10000 + ) + + def test_project_list_GET(self): + # client = Client() + response = self.client.get(self.list_url) + + + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'budget/project-list.html') + + def test_project_detail_GET(self): + + response = self.client.get(self.detail_url) + + + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'budget/project-detail.html') + + def test_project_detail_POST_adds_new_expense(self): + Category.objects.create( + project = self.project1, + name = "development", + + ) + + response = self.client.post(self.detail_url, + {'title' : 'expense1', + 'amount' : 1000, + 'category': 'development'} + + ) + + self.assertEqual(response.status_code, 302) + self.assertEqual(self.project1.expenses.first().title, 'expense1') + + def test_project_detail_POST_no_data(self): + response = self.client.post(self.detail_url, + ) + + self.assertEqual(self.project1.expenses.count(), 0) + + def test_project_detail_DELETE_deletes_expense(self): + category1 = Category.objects.create( + project = self.project1, + name = "development", + + ) + + Expense.objects.create( + project=self.project1, + title='expense1', + amount=1000, + category = category1 + ) + + response = self.client.delete(self.detail_url, json.dumps({ + 'id': 1, + })) + + self.assertEqual(response.status_code, 204) + self.assertEqual(self.project1.expenses.count(), 0) + + def test_project_detail_DELETE_no_id(self): + category1 = Category.objects.create( + project = self.project1, + name = "development", + + ) + + Expense.objects.create( + project=self.project1, + title='expense1', + amount=1000, + category = category1 + ) + + response = self.client.delete(self.detail_url) + + self.assertEqual(response.status_code, 404) + self.assertEqual(self.project1.expenses.count(), 1) + + + def test_project_create_POST(self): + url = reverse('add') + response = self.client.post(url, { + 'name': 'project2', + 'budget': 10000, + 'categoriesString': 'design,development' + }) + + project2 = Project.objects.get(id=2) + self.assertEqual(project2.name, 'project2') + first_category = Category.objects.get(id=1) + self.assertEqual(first_category.project, project2) + self.assertEquals(first_category.name, 'design') + + second_category = Category.objects.get(id=2) + self.assertEqual(second_category.project, project2) + self.assertEquals(second_category.name, 'development') + + + + diff --git a/budgetproject/budget/urls.py b/budgetproject/budget/urls.py index 9b716d51..c3784cc0 100644 --- a/budgetproject/budget/urls.py +++ b/budgetproject/budget/urls.py @@ -3,6 +3,7 @@ from django.urls import path from . import views + urlpatterns = [ path('', views.project_list, name='list'), path('add/', views.ProjectCreateView.as_view(), name='add'), diff --git a/budgetproject/budget/views.py b/budgetproject/budget/views.py index ffb9ab3e..4062db87 100644 --- a/budgetproject/budget/views.py +++ b/budgetproject/budget/views.py @@ -35,9 +35,13 @@ def project_detail(request, project_slug): ) elif request.method == 'DELETE': - id = json.loads(request.body)['id'] - expense = Expense.objects.get(id=id) - expense.delete() + try: + id = json.loads(request.body)['id'] + expense = Expense.objects.get(id=id) + expense.delete() + + except: + return HttpResponse(status = 404) return HttpResponse(status=204) diff --git a/budgetproject/budgetproject/__pycache__/settings.cpython-310.pyc b/budgetproject/budgetproject/__pycache__/settings.cpython-310.pyc new file mode 100644 index 00000000..0e56c387 Binary files /dev/null and b/budgetproject/budgetproject/__pycache__/settings.cpython-310.pyc differ diff --git a/budgetproject/budgetproject/__pycache__/urls.cpython-310.pyc b/budgetproject/budgetproject/__pycache__/urls.cpython-310.pyc new file mode 100644 index 00000000..0301d3ec Binary files /dev/null and b/budgetproject/budgetproject/__pycache__/urls.cpython-310.pyc differ diff --git a/budgetproject/budgetproject/__pycache__/wsgi.cpython-310.pyc b/budgetproject/budgetproject/__pycache__/wsgi.cpython-310.pyc new file mode 100644 index 00000000..c6da0177 Binary files /dev/null and b/budgetproject/budgetproject/__pycache__/wsgi.cpython-310.pyc differ