diff --git a/coinmanager/coinc/helper.py b/coinmanager/coinc/helper.py
index 0d7aca4..d714617 100644
--- a/coinmanager/coinc/helper.py
+++ b/coinmanager/coinc/helper.py
@@ -1,6 +1,6 @@
# encoding: utf-8
#
-# Copyright (C) 2020 willipink.eu
+# Copyright (C) 2020-1 willipink.eu
# Author Moritz Münch moritzmuench@mailbox.org
#
# This program is free software: you can redistribute it and/or modify
@@ -17,8 +17,11 @@
# along with this program. If not, see .
+from json import loads
+
from .models import Country, Coin
+
def total_coin_sum():
''' add each coin_sum from each country and return the result
>>> total_coin_sum()
@@ -52,3 +55,9 @@ def coin_sum_of_(country):
coin_count['total'] += value * coin_count[value]
return coin_count['total'] / 100
+
+
+def get_test_response_status(test_response):
+ ''' test helper to return response status '''
+ test_status = loads(test_response.content)
+ return test_status['status']
diff --git a/coinmanager/coinc/test_coin.py b/coinmanager/coinc/test_coin.py
new file mode 100644
index 0000000..1f3e4bd
--- /dev/null
+++ b/coinmanager/coinc/test_coin.py
@@ -0,0 +1,92 @@
+# encoding: utf-8
+#
+# Copyright (C) 2021 willipink.eu
+# Author Moritz Münch moritzmuench@mailbox.org
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+
+from django.http import HttpResponse
+from django.test import TestCase, Client
+
+from coinc.models import Coin, Country
+from coinc.views import add_coin
+from coinc.helper import get_test_response_status
+
+
+class TestCoin(TestCase):
+
+ ''' all tests for the coin model '''
+ def setUp(self):
+ self.test_post_data = {
+ 'value': 1,
+ 'year': 2050,
+ 'country': 'fo',
+ 'stamp': '',
+ 'exists': 'false',
+ 'name': '',
+ 'found_by': '',
+ 'found_on': '03.05.2040',
+ # 'date-added' '':,
+ # 'date-modified':,
+ 'circulation': 0,
+ 'bux_only': 'false',
+ 'checked': 'false',
+ 'ec': 'false'
+ }
+ Country.objects.create(
+ name_iso = 'fo',
+ name = 'bar'
+ )
+
+ def _return_status_wrong_field(self, field, data):
+ ''' shortcut: return response status of post request to /coinc/add/coin '''
+
+ test_data = self.test_post_data
+ test_data[field] = data
+ test_response = self.client.post(f'/coinc/add/coin', test_data)
+ return get_test_response_status(test_response)
+
+
+ def test_view_add_coin_missing_post_values(self):
+
+ # all values right
+ self.assertEqual(self._return_status_wrong_field('value', '1'), 0)
+
+ # value not a number
+ self.assertEqual(self._return_status_wrong_field('value', ''), 1)
+ # value not the right number
+ self.assertEqual(self._return_status_wrong_field('value', 3), 1)
+
+ # year not a number
+ self.assertEqual(self._return_status_wrong_field('year', ''), 1)
+ # year lower limit
+ self.assertEqual(self._return_status_wrong_field('year', 1998), 1)
+ # year upper limit
+ self.assertEqual(self._return_status_wrong_field('year', 2099), 1)
+
+ # country not valid format xx
+ self.assertEqual(self._return_status_wrong_field('country', 12235235), 1)
+ self.assertEqual(self._return_status_wrong_field('country', 'toolong'), 1)
+ # country does not exist
+ self.assertEqual(self._return_status_wrong_field('country', 'xx'), 1)
+
+ #stamp does not exist
+ self.assertEqual(self._return_status_wrong_field('stamp', 'xx'), 1)
+ self.assertEqual(self._return_status_wrong_field('stamp', 'longer than 10 characters'), 1)
+ self.assertEqual(self._return_status_wrong_field('stamp', 'xx'), 1)
+
+
+ def test_views_add_without_year(self):
+ pass
diff --git a/coinmanager/coinc/tests.py b/coinmanager/coinc/test_user.py
similarity index 94%
rename from coinmanager/coinc/tests.py
rename to coinmanager/coinc/test_user.py
index 21b658c..27af1be 100644
--- a/coinmanager/coinc/tests.py
+++ b/coinmanager/coinc/test_user.py
@@ -23,13 +23,8 @@ from django.http import HttpResponse
from django.test import TestCase, Client
from coinc.models import User
-from coinc.views import response, add_user
+from coinc.views import add_user
-CLIENT = Client()
-SESSION = CLIENT.session
-# session['backend'] = 'facebook'
-# session['kwargs'] = {'username':'Chuck Norris','response':{'id':1}}
-SESSION.save()
class TestUser(TestCase):
diff --git a/coinmanager/coinc/views.py b/coinmanager/coinc/views.py
index 7987a89..167c9a9 100644
--- a/coinmanager/coinc/views.py
+++ b/coinmanager/coinc/views.py
@@ -266,29 +266,36 @@ def add_coin(request):
'''
# mandatory fields value, year, country
+ value = request.POST['value']
try:
- value = int(request.POST['value'])
+ value = int(value)
except ValueError:
return response(1, f"Der Münzwert '{value}' ist keine gültige Zahl.")
if value not in [1, 2, 5, 10, 20, 50, 100, 200, 201, 202, 203]:
return response(1, f"Der Münzwert '{value}' muss eine Zahl aus der Menge [1, 2, 5, 10, 20, 50, 100, 200, 201, 202, 203] sein.")
+ year = request.POST['year']
try:
- year = int(request.POST['year'])
+ year = int(year)
except ValueError:
- return response(1, f"Das Jahr '{year}' ist keine gültige Zahl.")
+ return response(1, f"Das Jahr ist keine gültige Zahl, Format: 1234")
if year < 1999:
- return response(1, f"Das Jahr '{year}' ist kleiner als 1999.")
+ return response(1, f"Das Jahr '{year}' ist kleiner als 1999")
if year > 2098:
return response(1, f"Bitte den 2100-Jahrhundert-Datumsbug fixen. :-)")
+ country = request.POST['country']
+ if not country.isalpha() or len(country) != 2:
+ return response(1, f"Das Land ist kein gültiges ISO-Format: XX")
try:
- country = Country.objects.get(name_iso=request.POST['country'])
+ country = Country.objects.get(name_iso=country)
except Country.DoesNotExist:
- return response(1, f"Das Land mit ISO-Kürzel '{name_iso}' existiert nicht.")
+ return response(1, f"Das Land mit ISO-Kürzel '{country}' existiert nicht")
# optional fields stamp, exists, name, found_by, found_on, circulation, buy_only, ec, checked
stamp = request.POST['stamp']
+ if len(stamp > 10):
+ return response(1, f'Die Prägerei darf max. 10 Zeichen lang sein'
try:
stamp = Stamp.objects.get(name_short=stamp)
except Stamp.DoesNotExist: