diff --git a/django/didgeridoo/webshop/forms.py b/django/didgeridoo/webshop/forms.py index 92d5f4d..60970fc 100644 --- a/django/didgeridoo/webshop/forms.py +++ b/django/didgeridoo/webshop/forms.py @@ -3,7 +3,6 @@ from webshop.models import ( Salutation, City, Picture, - Article, Option, CartPosition ) diff --git a/django/didgeridoo/webshop/templates/webshop/cart.html b/django/didgeridoo/webshop/templates/webshop/cart.html index cce7f09..0caa52b 100644 --- a/django/didgeridoo/webshop/templates/webshop/cart.html +++ b/django/didgeridoo/webshop/templates/webshop/cart.html @@ -1,5 +1,5 @@ {% extends "webshop/base.html" %} -{% block section_title %}

Cart

{% endblock %} +{% block section_title %}Cart{% endblock %} {% block content %}

List of Items in your Shopping Cart:

{% if cart_position_list %} diff --git a/django/didgeridoo/webshop/utils.py b/django/didgeridoo/webshop/utils.py index aed4192..08521d7 100644 --- a/django/didgeridoo/webshop/utils.py +++ b/django/didgeridoo/webshop/utils.py @@ -1,16 +1,16 @@ -from webshop.models import (Article, - Category, +from webshop.models import (Category, ArticleStatus) from currencies.models import ExchangeRate, ExchangeRate_name from currencies.forms import CurrenciesForm + def process_article_prices(request, articles): articles_list = list(articles) rate = ExchangeRate currency_name = "CHF" - if not 'currency' in request.session: + if 'currency' not in request.session: request.session['currency'] = None if request.method == 'POST': @@ -27,13 +27,14 @@ def process_article_prices(request, articles): if request.session['currency']: currency = request.session['currency'] for idx, article in enumerate(articles_list): - article.price_in_chf = rate.exchange(currency, article.price_in_chf) + article.price_in_chf = rate.exchange(currency, + article.price_in_chf) articles_list[idx] = article currency_name = ExchangeRate_name.objects.get(id=currency) - return {'request':request, - 'currency_name':currency_name, - 'articles_list':articles_list} + return {'request': request, + 'currency_name': currency_name, + 'articles_list': articles_list} def get_categories(): diff --git a/django/didgeridoo/webshop/views.py b/django/didgeridoo/webshop/views.py index 2aea5ee..eac4125 100644 --- a/django/didgeridoo/webshop/views.py +++ b/django/didgeridoo/webshop/views.py @@ -1,5 +1,3 @@ -from decimal import Decimal - from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, render from django.contrib.auth.decorators import login_required @@ -8,7 +6,6 @@ from django.contrib.auth.forms import UserCreationForm from django.db import transaction from webshop.models import (Article, Category, - ArticleStatus, Person, City, Picture, @@ -25,6 +22,7 @@ from webshop.utils import (get_categories, from currencies.models import ExchangeRate, ExchangeRate_name from currencies.forms import CurrenciesForm + def index(request): category_list = get_categories() currencies_form = CurrenciesForm @@ -105,7 +103,7 @@ def article_details(request, article_id): article_view = True currency_name = "CHF" - if not 'currency' in request.session: + if 'currency' not in request.session: request.session['currency'] = None article = get_object_or_404(Article, pk=article_id) @@ -180,7 +178,7 @@ def registration(request): person = Person.objects.create( salutation=pf['salutation'], city=City.objects.get(zip_code=pf['zip_code'], - name=pf['city']), + name=pf['city']), street_name=pf['street_name'], street_number=pf['street_number'], user=user) @@ -208,7 +206,7 @@ def cart(request): total = 0 user_name = request.user # here we configure the users Currency: - if not 'currency' in request.session: + if 'currency' not in request.session: request.session['currency'] = None else: currency = request.session['currency'] @@ -292,7 +290,6 @@ def cart(request): checkout_form = CheckoutForm() - return render(request, 'webshop/cart.html', {'cart_position_list': cart_position_list, 'totalprice_list': totalprice_list, diff --git a/docs/doku.org b/docs/doku.org index cdada7b..e2df8d4 100644 --- a/docs/doku.org +++ b/docs/doku.org @@ -1373,7 +1373,7 @@ Somit konnten wir dann über die Kategorie iterieren. **** Option -Gemäss der Anforderung FA\_1.4 muss es möglich sein für einen Artikel 0-5 +Gemäss der Anforderung FA_1.4 muss es möglich sein für einen Artikel 0-5 Bilder hochzuladen. Wir stellen dies über eine Variabel im "Option" Modell, Abbildung:([[fig:option]]), sicher gegen welche beim Speichern überprüft wird. Die Variabel ist als Option im Admin Interface @@ -1399,7 +1399,7 @@ noch der Wert editierbar. Das Modell "ArticleStatus", Abbildung:([[fig:articlestatus]]), wird über einen Fremdschlüssel mit dem "Article" Modell verbunden und gibt -diesem verschiedene Status. Gemäss der Anforderung FA\_1.4 muss ein +diesem verschiedene Status. Gemäss der Anforderung FA_1.4 muss ein Artikel die Status "active" und "hidden" haben. Wir haben dies in der Applikation dann auch gleich so umgesetzt das nur die Artikel angezeigt werden welche nicht den Status "hidden" haben. @@ -1460,7 +1460,7 @@ Erstellen des Objekt evaluiert wird. Das Modell "Article", Abbildung([[fig:article]]), ist als solches nicht sehr komplex und widerspiegelt einen Artikel aus der realen Welt. -Gemäss der Anforderung FA\_1.4 hat er eine eindeutige ID (den +Gemäss der Anforderung FA_1.4 hat er eine eindeutige ID (den Primärschlüssel), einen Namen von maximal 200 Zeichen, eine Beschreibung von maximal 2000 Zeichen, Status sowie 0 - 5 Produktbilder. @@ -1521,7 +1521,7 @@ Stackoverflow\footcite{images} die Lösung. Bestellungen der Kunden werden im Modell "Order", Abbildung:([[fig:order]]), erfasst. Wobei im Modell Order nur die Kunden -ID gespeichert wird, sowie, gemäss der Anforderung FA\_3.3, der +ID gespeichert wird, sowie, gemäss der Anforderung FA_3.3, der Foreign Key zum "ExchangeRate" Modell. Über den Foreign Key wird eine Beziehung auf den für die Bestellung aktuellen Wechselkurs der Währung hergestellt. @@ -1670,13 +1670,15 @@ vereinfacht in 3 Bereiche: 2. Ein Backend welches zum Bearbeiten/Erstellen von Produkten dient. 3. Currencies die Täglich abgeholt werden -** Testing +** TODO Testing -Um die Funktionalität des Webshops sicherzustellen haben wir -Die Applikation kontinuierlich gemäss den Testfällen unter [[Testfälle]] -getestet und geprüft. Auch sehr hilfreich war das Admin Interface von -Django. Damit konnten wir die Modells sehr gut auf ihre Funktionalität -überprüfen bevor wir sie im Frontend verwendeten. +Um die Funktionalität des Webshops sicherzustellen haben wir Die +Applikation kontinuierlich gemäss den Testfällen unter [[Testfälle]] +getestet und geprüft. Bei den Testfällen haben wir uns wie auch bei +den Use Cases hauptsächlich auf die Funktionen beschränkt welche wir +selber ausprogrammiert haben. Auch sehr hilfreich war das Admin +Interface von Django. Damit konnten wir die Modells sehr gut auf ihre +Funktionalität überprüfen bevor wir sie im Frontend verwendeten. *Fixtures* @@ -1698,39 +1700,60 @@ dazugehörige Funktionen korrekt funktionieren. #+LATEX:\newpage #+LATEX:\begin{landscape} -*** Testfälle +*** NEXT Testfälle + +Alle Testfälle werden ausgehend von der Index Seite aus gestartet. +Dies wird in den Test Cases nicht noch einmal explizit erwähnt. Die +Tabelle: ([[tab:testcases]]) zeigt dabei die Resultate des letzten +Testlaufs. Dabei wurden keine Probleme mehr mit der Applikation +entdeckt. + +#+LATEX:{\footnotesize #+CAPTION: Testfälle -#+ATTR_LATEX: :environment longtable :align |>{\columncolor[HTML]{EFEFEF}}p{1.5cm}|p{2.5cm}|p{2.5cm}|p{2.5cm}|p{2.5cm}|p{2.5cm}|p{2.5cm}|p{2.5cm}| :placement [H] +#+ATTR_LATEX: :environment longtable :align |>{\columncolor[HTML]{EFEFEF}}l|p{2cm}|p{2cm}|p{3cm}|p{3cm}|p{2.5cm}|p{2.5cm}|p{2.5cm}| :placement [H] #+NAME: tab:testcases |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| | <20> | <20> | <20> | <20> | <20> | <20> | <20> | <20> | | *Testcase ID*\cellcolor[HTML]{C0C0C0} | *Objective*\cellcolor[HTML]{C0C0C0} | *Precondition*\cellcolor[HTML]{C0C0C0} | *Steps*\cellcolor[HTML]{C0C0C0} | *Testdata*\cellcolor[HTML]{C0C0C0} | *Expected Result*\cellcolor[HTML]{C0C0C0} | *Postcondition*\cellcolor[HTML]{C0C0C0} | *Result*\cellcolor[HTML]{C0C0C0} | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-01* | | | | | | | | +| *TC-01* | Artikel durschtöbern | - | 1. Auf "First Parent Category" klicken. | - | Die Artikel der "Parent Category 1" werden angezeigt. | Eine gefilterte Artikelliste wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-02* | | | | | | | | +| *TC-02* | User Registration | - | 1. Auf "LOGIN" klicken.\newline 2. Auf "Go to registration." klicken.\newline 3. Die Personaldaten eintragen.\newline 4. Auf "Register" klicken. | Username: max\newline Password: TestPasswort\newline Email: max@gmail.com\newline Salutation: Herr\newline Firstname: Max\newline Lastname: Muster\newline Streetname: Musterstrasse\newline Streetnumber: 13\newline ZIP Code: 1000\newline City: Lausanne | User wurde erfolgreich registriert. | Die Login Form wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-03* | | | | | | | | +| *TC-03* | User Registration | TC-02\newline ausgeführt | 1. Auf "LOGIN" klicken.\newline 2. Auf "Go to registration." klicken.\newline 3. Die Personaldaten eintragen.\newline 4. Auf "Register" klicken. | Username: max\newline Password: TestPasswort\newline Email: max@gmail.com\newline Salutation: Herr\newline Firstname: Max\newline Lastname: Muster\newline Streetname: Musterstrasse\newline Streetnumber: 13\newline ZIP Code: 1000\newline City: Lausanne | Fehlermeldung: "A user with that username already exists." | Die Registrierungsform wird wieder angezeigt werden. | Erfolgreich durchgeführt 19.02.2018 A.Z. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-04* | | | | | | | | +| *TC-04* | User Registration | - | 1. Auf "LOGIN" klicken.\newline 2. Auf "Go to registration." klicken.\newline 3. Die Personaldaten eintragen.\newline 4. Auf "Register" klicken. | Username: max\newline Password: TestPasswort\newline Email: max@gmail.com\newline Salutation: Herr\newline Firstname: Max\newline Lastname: Muster\newline Streetname: Musterstrasse\newline Streetnumber: 13\newline ZIP Code: 1000\newline City: Lausanne | Fehlermeldung: "The two password fields didn't match." | Die Registrierungsform wird wieder angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-05* | | | | | | | | +| *TC-05* | User Registration | - | 1. Auf "LOGIN" klicken.\newline 2. Auf "Go to registration." klicken.\newline 3. Die Personaldaten eintragen.\newline 4. Auf "Register" klicken. | Username: max\newline Password: TestPasswort\newline Email: max@gmail.com\newline Salutation: Herr\newline Firstname: Max\newline Lastname: Muster\newline Streetname: Musterstrasse\newline Streetnumber: 13\newline ZIP Code: 1000\newline City: Lausanne | Fehlermeldung: "The zip code and the city don't match." | Die Registrierungsform wird wieder angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-06* | | | | | | | | +| *TC-06* | User Login | TC-02\newline ausgeführt | 1. Auf "LOGIN" klicken.\newline 2. Login Daten eingeben.\newline 3. Auf "Login" Button klicken. | Username: max\newline Password: TestPasswort | Der User wird zum Index weitergeleitet. | Die Index Seite wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-07* | | | | | | | | +| *TC-07* | User Login | - | 1. Auf "LOGIN" klicken.\newline 2. Login Daten eingeben.\newline 3. Auf "Login" Button klicken. | Username: FakeUser\newline Password: FakePassword | Fehlermeldung: "Please enter a correct username and password. Note that both fields may be case-sensitive." | Die Login Form wird wieder angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-08* | | | | | | | | +| *TC-08* | Artikel in Warenkorb legen | - | 1. Auf "Article of First Parent Category" klicken. | - | Meldung "please login to fill your basket..." | Die Artikel Details werden angezeigt. | Erfolgreich durchgeführt 19.02.2018 I.H. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-09* | | | | | | | | +| *TC-09* | Artikel in Warenkorb legen | TC-02\newline ausgeführt | 1. Auf "Article of First Parent Category"\newline 2. In das "Amount in piece." Feld Die Menge eintragen.\newline 3. Auf den "Add to Cart" Button klicken.\newline 4. Auf "CART" klicken. | Menge: 5 | Der Artikel wird als Warenkorb Position in der Datenbank gespeichert. | Der Cart mit dem Artikel wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 I.H. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-10* | | | | | | | | +| *TC-10* | Währung ändern | - | 1. Auf das Dropdown "Currencies" klicken.\newline 2. Den Eintrag "EUR" auswählen.\newline 3. Auf den Button "Select" klicken. | - | Die Artikel Preise werden in Euro angezeigt. | Die Index Seite wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 I.H. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-11* | | | | | | | | +| *TC-11* | Checkout | TC-09\newline ausgeführt | | | | | Erfolgreich durchgeführt 19.02.2018 I.H. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| -| *TC-12* | | | | | | | | +| *TC-12* | Checkout | TC-09\newline ausgeführt | | | | | Erfolgreich durchgeführt 19.02.2018 I.H. | |----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| +| *TC-13* | Artikel erfassen | - | 1. Die URL http://localhost:8000/admin aufrufen.\newline 2. Userdaten eingeben.\newline 3. Neben "Articles" auf "+ Add" klicken.\newline 4. Artikel Daten eingeben.\newline 5. Auf den "SAVE" Button klicken. | Username: admin\newline Password: password\newline Name: Test Artikel\newline Description: Test Description\newline Stock: 10\newline Status: active\newline Price in chf: 23 | Der Artikel wird in der Datenbank gespeichert. | Die Artikelliste wird mit dem Artikel "Test Artikel" angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | +|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| +| *TC-14* | Artikel erfassen | - | 1. Die URL http://localhost:8000/admin aufrufen.\newline 2. Userdaten eingeben.\newline 3. Neben "Articles" auf "+ Add" klicken.\newline 4. Artikel Daten eingeben.\newline 5. Auf den "SAVE" Button klicken. | Username: admin\newline Password: password\newline Name: Test Artikel\newline Description: Test Description\newline Stock: 10\newline Status: active | Fehlermeldung: "This field is required." | Die Artikel Form wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | +|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| +| *TC-15* | Artikel löschen | TC-13\newline ausgeführt | 1. Die URL http://localhost:8000/admin aufrufen.\newline 2. Userdaten eingeben.\newline 3. Auf "Articles" klicken.\newline 4. Den Artikel "Test Artikel" markieren.\newline 5. Im Dropdown "Action" die Aktion "Delete selected articles" auswählen.\newline 6. Auf den "Go" Button klicken. | Username: admin\newline Password: password | Der Artikel und die Bilder dazu werden aus der Datenbank gelöscht. | Die Artikelliste wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | +|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| +| *TC-16* | Bilder hochladen | TC-13\newline ausgeführt | 1. Die URL http://localhost:8000/admin aufrufen.\newline 2. Userdaten eingeben.\newline 3. Neben "Pictures" auf "+ Add" klicken.\newline 4. Bild Daten eingeben.\newline 5. Auf den "Browse..." Button klicken.\newline 6. Ein beliebiges Bild hochladen.\newline 7. Auf den "SAVE" Button klicken.\newline 8. Die URL http://localhost:8000/details/1/ aufrufen. | Username: admin\newline Password: password\newline Name: Test Bild\newline Article: Article of First Parent Category | Das Bild ist in den Artikel Details zu sehen. | Die Artikel Details werden angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | +|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| +| *TC-17* | Bilder hochladen | TC-13\newline ausgeführt | 1. Die URL http://localhost:8000/admin aufrufen.\newline 2. Userdaten eingeben.\newline 3. Neben "Pictures" auf "+ Add" klicken.\newline 4. Bild Daten eingeben.\newline 5. Auf den "Browse..." Button klicken.\newline 6. Ein beliebiges Bild hochladen.\newline 7. Auf den "SAVE" Button klicken.\newline 8. Die Schritte 1 - 7 5 mal wiederholen. | Username: admin\newline Password: password\newline Name: Test Bild[1-5]\newline Article: Article of First Parent Category | Fehlermeldung: "Only 5 pictures per article allowed." | Die "Picture" Form wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | +|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| +| *TC-18* | Artikel Status ändern | TC-13\newline ausgeführt | 1. Die URL http://localhost:8000/admin aufrufen.\newline 2. Userdaten eingeben.\newline 3. Auf "Articles" klicken.\newline 4. Auf den Artikel "Test Artikel" klicken.\newline 5. Im Dropdown "Status" den Status "Hidden" auswählen.\newline 6. Auf den "SAVE" Button klicken.\newline 7. Die URL http://localhost:8000 aufrufen. | - | Der Artikel wird im Webshop nicht mehr angezeigt. | Die Index Seite wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. | +|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------| +#+LATEX:} #+LATEX:\end{landscape} #+LATEX:\newpage