-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #36 from ErhanCitil/chore/unit-tests-for-base-app
[#35] Write unit tests to ensure the most of the project is working well
- Loading branch information
Showing
10 changed files
with
229 additions
and
7 deletions.
There are no files selected for viewing
19 changes: 19 additions & 0 deletions
19
src/bobvance/base/migrations/0006_alter_customer_phonenumber.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
# Generated by Django 3.2.21 on 2023-11-17 14:46 | ||
|
||
from django.db import migrations | ||
import phonenumber_field.modelfields | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
('base', '0005_order_total_price'), | ||
] | ||
|
||
operations = [ | ||
migrations.AlterField( | ||
model_name='customer', | ||
name='phonenumber', | ||
field=phonenumber_field.modelfields.PhoneNumberField(error_messages={'invalid': 'Het ingevoerde telefoonnummer is niet juist. Gebruik het formaat +31 6xxxxxxxx.'}, max_length=128, region=None), | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
import factory | ||
from factory.fuzzy import FuzzyChoice | ||
from bobvance.base.models import Customer, Order, OrderProduct, Product | ||
import random | ||
|
||
class CustomerFactory(factory.django.DjangoModelFactory): | ||
class Meta: | ||
model = Customer | ||
|
||
firstname = factory.Faker("first_name") | ||
lastname = factory.Faker("last_name") | ||
email = factory.Faker("email") | ||
phonenumber = factory.LazyFunction(lambda: f"+31 6{random.randint(100, 999)}{random.randint(10000, 99999)}") | ||
address = factory.Faker("street_address") | ||
postal_code = factory.LazyFunction(lambda: f"{random.randint(1000, 9999)} {''.join(random.choice('ABCDEFGHIJKLMNOPQRSTUVWXYZ') for i in range(2))}") | ||
city = factory.Faker("city") | ||
country = factory.Faker("country") | ||
|
||
class ProductFactory(factory.django.DjangoModelFactory): | ||
class Meta: | ||
model = Product | ||
|
||
name = factory.Faker("word") | ||
price = factory.Faker("pydecimal", left_digits=3, right_digits=2, positive=True) | ||
description = factory.Faker("text") | ||
image = factory.django.ImageField(color="blue") | ||
new = FuzzyChoice([True, False]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
from bobvance.base.tests.factories import CustomerFactory, ProductFactory | ||
from django_webtest import WebTest | ||
from django.urls import reverse | ||
|
||
class FormTestCase(WebTest): | ||
def setUp(self): | ||
self.customer = CustomerFactory() | ||
self.product = ProductFactory() | ||
|
||
self.url = reverse("order") | ||
|
||
def test_order_form_page(self): | ||
response = self.app.get(self.url) | ||
self.assertEqual(response.status_code, 200) | ||
self.assertTemplateUsed(response, "base/order.html") | ||
|
||
def test_order_view(self): | ||
form = self.app.get(self.url).form | ||
form["firstname"] = self.customer.firstname | ||
form["lastname"] = self.customer.lastname | ||
form["email"] = self.customer.email | ||
form["address"] = self.customer.address | ||
form["postal_code"] = self.customer.postal_code | ||
form["city"] = self.customer.city | ||
form["country"] = self.customer.country | ||
form["phonenumber"] = str(self.customer.phonenumber) | ||
form["postal_code"] = self.customer.postal_code | ||
response = form.submit() | ||
self.assertEqual(response.status_code, 302) | ||
self.assertRedirects(response, reverse("success", kwargs={"pk": 1})) | ||
|
||
def test_wrong_phone_number(self): | ||
""" | ||
The form is only accepting Dutch phone numbers | ||
""" | ||
|
||
form = self.app.get(self.url).form | ||
form["phonenumber"] = "1234567890" | ||
response = form.submit() | ||
self.assertEqual(response.context["form"].errors['phonenumber'][0], 'Het ingevoerde telefoonnummer is niet juist. Gebruik het formaat +31 6xxxxxxxx.') | ||
|
||
def test_wrong_postal_code(self): | ||
""" | ||
The form is only accepting Dutch postal codes | ||
""" | ||
|
||
form = self.app.get(self.url).form | ||
form["postal_code"] = "1234ABB" | ||
response = form.submit() | ||
self.assertEqual(response.context["form"].errors['postal_code'][0], 'Enter a valid zip code.') | ||
|
||
def test_wrong_email(self): | ||
form = self.app.get(self.url).form | ||
form["email"] = "test" | ||
response = form.submit() | ||
self.assertEqual(response.context["form"].errors['email'][0], 'Voer een geldig e-mailadres in.') | ||
|
||
def test_empty_form(self): | ||
form = self.app.get(self.url).form | ||
response = form.submit() | ||
self.assertEqual(response.context["form"].errors['firstname'][0], 'Dit veld is verplicht.') | ||
self.assertEqual(response.context["form"].errors['lastname'][0], 'Dit veld is verplicht.') | ||
self.assertEqual(response.context["form"].errors['email'][0], 'Dit veld is verplicht.') | ||
self.assertEqual(response.context["form"].errors['address'][0], 'Dit veld is verplicht.') | ||
self.assertEqual(response.context["form"].errors['postal_code'][0], 'Dit veld is verplicht.') | ||
self.assertEqual(response.context["form"].errors['city'][0], 'Dit veld is verplicht.') | ||
self.assertEqual(response.context["form"].errors['country'][0], 'Dit veld is verplicht.') | ||
self.assertEqual(response.context["form"].errors['phonenumber'][0], 'Dit veld is verplicht.') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
from django.test import TestCase | ||
from django.urls import reverse | ||
from bobvance.base.tests.factories import CustomerFactory, ProductFactory | ||
|
||
class ViewsTestCase(TestCase): | ||
def home_view(self): | ||
url = reverse("home") | ||
response = self.client.get(url) | ||
self.assertEqual(response.status_code, 200) | ||
|
||
def products_view(self): | ||
url = reverse("products") | ||
response = self.client.get(url) | ||
self.assertEqual(response.status_code, 200) | ||
|
||
def new_products_view(self): | ||
url = reverse("new_products") | ||
response = self.client.get(url) | ||
self.assertEqual(response.status_code, 200) | ||
|
||
def used_products_view(self): | ||
url = reverse("used_products") | ||
response = self.client.get(url) | ||
self.assertEqual(response.status_code, 200) | ||
|
||
def product_detail_view(self): | ||
product = ProductFactory() | ||
url = reverse("product_detail", kwargs={"pk": product.pk}) | ||
response = self.client.get(url) | ||
self.assertEqual(response.status_code, 200) | ||
|
||
def cart_view(self): | ||
url = reverse("cart") | ||
response = self.client.get(url) | ||
self.assertEqual(response.status_code, 200) | ||
|
||
def checkout_view(self): | ||
url = reverse("checkout") | ||
response = self.client.get(url) | ||
self.assertEqual(response.status_code, 200) | ||
|
||
def order_view(self): | ||
url = reverse("order") | ||
response = self.client.get(url) | ||
self.assertEqual(response.status_code, 200) | ||
|
||
class NewAndUsedProductsTestCase(TestCase): | ||
def setUp(self): | ||
self.new_product = ProductFactory(new=True) | ||
self.used_product = ProductFactory(new=False) | ||
|
||
def test_new_products_view(self): | ||
url = reverse("new_products") | ||
response = self.client.get(url) | ||
self.assertContains(response, self.new_product.name) | ||
self.assertNotContains(response, self.used_product.name) | ||
|
||
def test_used_products_view(self): | ||
url = reverse("used_products") | ||
response = self.client.get(url) | ||
self.assertContains(response, self.used_product.name) | ||
self.assertNotContains(response, self.new_product.name) | ||
|
||
class ProductDetailViewTestCase(TestCase): | ||
def setUp(self): | ||
self.product = ProductFactory() | ||
self.url = reverse("product_detail", kwargs={"pk": self.product.pk}) | ||
|
||
def test_product_detail_view(self): | ||
response = self.client.get(self.url) | ||
self.assertContains(response, self.product.name) | ||
self.assertContains(response, self.product.description) | ||
|
||
def test_product_detail_view_more_products(self): | ||
product_1 = ProductFactory() | ||
product_2 = ProductFactory() | ||
product_3 = ProductFactory() | ||
product_4 = ProductFactory() | ||
product_5 = ProductFactory() | ||
response = self.client.get(self.url) | ||
self.assertContains(response, product_1.name) | ||
self.assertContains(response, product_2.name) | ||
self.assertContains(response, product_3.name) | ||
self.assertContains(response, product_4.name) | ||
self.assertContains(response, product_5.name) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters