haikal/inventory/tests.py

235 lines
8.0 KiB
Python

import json
from . import models as m
from django.urls import reverse
from django_ledger import models as lm
from django.test import Client, TestCase
from django.contrib.auth import get_user_model
User = get_user_model()
# Create your tests here.
class ModelTest(TestCase):
def setUp(self):
email = "RkzgO@example.com"
name = "John Doe"
password = "password"
crn = "123456789"
vrn = "123456789"
phone = "123456789"
address = "123 Main St"
arabic_name = "الاسم بالعربية"
self.vat = m.VatRate.objects.create(rate=0.15)
user = User.objects.create(username=email, email=email)
user.set_password(password)
user.save()
self.dealer = m.Dealer.objects.create(
user=user,
name=name,
arabic_name=arabic_name,
crn=crn,
vrn=vrn,
phone_number=phone,
address=address,
)
self.car_make = m.CarMake.objects.create(name="Make")
self.car_model = m.CarModel.objects.create(
name="Model", id_car_make=self.car_make
)
self.car_serie = m.CarSerie.objects.create(
name="Serie", id_car_model=self.car_model
)
self.trim = m.CarTrim.objects.create(name="Trim", id_car_serie=self.car_serie)
self.car = m.Car.objects.create(
vin="123456789",
dealer=self.dealer,
id_car_make=self.car_make,
id_car_model=self.car_model,
id_car_serie=self.car_serie,
year=2020,
id_car_trim=self.trim,
receiving_date="2020-01-01",
)
self.car_finances = m.CarFinance.objects.create(
car=self.car, selling_price=1000, cost_price=500, discount_amount=200
)
def test_dealer_creation_creates_user_and_entity(self):
dealer = self.dealer
self.assertEqual(User.objects.count(), 1)
self.assertEqual(m.Dealer.objects.count(), 1)
self.assertEqual(User.objects.first().username, "RkzgO@example.com")
self.assertEqual(User.objects.first().email, "RkzgO@example.com")
self.assertTrue(User.objects.first().check_password("password"))
self.assertEqual(dealer.user, User.objects.first())
self.assertEqual(dealer.name, "John Doe")
self.assertEqual(dealer.arabic_name, "الاسم بالعربية")
self.assertEqual(dealer.crn, "123456789")
self.assertEqual(dealer.vrn, "123456789")
self.assertEqual(dealer.phone_number, "123456789")
self.assertEqual(dealer.address, "123 Main St")
self.assertIsNotNone(dealer.entity)
self.assertEqual(dealer.entity.name, dealer.name)
self.assertEqual(dealer.entity.get_all_accounts().count(), 19)
self.assertEqual(dealer.entity.get_uom_all().count(), 16)
def test_car_creation_creates_product(self):
dealer = self.dealer
self.assertEqual(m.Car.objects.count(), 1)
self.assertEqual(self.car.vin, "123456789")
self.assertEqual(self.car.dealer, dealer)
self.assertEqual(self.car.id_car_make, self.car_make)
self.assertEqual(self.car.id_car_model, self.car_model)
self.assertEqual(self.car.id_car_serie, self.car_serie)
self.assertEqual(self.car.year, 2020)
self.assertEqual(self.car.id_car_trim, self.trim)
product = dealer.entity.get_items_all().filter(name=self.car.vin).first()
self.assertEqual(product.name, self.car.vin)
def test_car_finances_creation(self):
self.assertEqual(m.CarFinance.objects.count(), 1)
self.assertEqual(self.car_finances.car, self.car)
self.assertEqual(self.car_finances.selling_price, 1000)
self.assertEqual(self.car_finances.cost_price, 500)
self.assertEqual(self.car_finances.discount_amount, 200)
def test_car_finance_total(self):
self.assertEqual(m.CarFinance.objects.count(), 1)
self.assertEqual(self.car_finances.total, 1000)
self.assertEqual(self.car_finances.total_discount, 800)
self.assertEqual(self.car_finances.total_vat, 920)
def test_car_additional_services_create_item_service(self):
m.AdditionalServices.objects.create(
name="Service",
price=100,
description="Description",
dealer=self.dealer,
taxable=True,
uom=m.UnitOfMeasure.PIECE,
)
self.assertEqual(
m.ItemModel.objects.filter(
name="Service",
default_amount=100,
is_product_or_service=True,
item_role="service",
).count(),
1,
)
class AuthenticationTest(TestCase):
def setUp(self):
self.client = Client()
self.url = reverse("account_signup")
def test_login(self):
url = reverse("account_login")
response = self.client.post(url, {"email": "RkzgO@example.com", "password": "password"})
self.assertEqual(response.status_code, 200)
def test_valid_data(self):
# Create valid JSON data
data = {
"wizardValidationForm1": {
"email": "test@example.com",
"password": "password123",
"confirm_password": "password123"
},
"wizardValidationForm2": {
"name": "John Doe",
"arabic_name": "جون دو",
"phone_number": "1234567890"
},
"wizardValidationForm3": {
"crn": "123456",
"vrn": "789012",
"address": "123 Main St"
}
}
# Send a POST request with the JSON data
response = self.client.post(
self.url,
data=json.dumps(data),
content_type='application/json'
)
# Check the response
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json(), {'message': 'User created successfully.'})
def test_passwords_do_not_match(self):
# Create JSON data with mismatched passwords
data = {
"wizardValidationForm1": {
"email": "test@example.com",
"password": "password123",
"confirm_password": "differentpassword"
},
"wizardValidationForm2": {
"name": "John Doe",
"arabic_name": "جون دو",
"phone_number": "1234567890"
},
"wizardValidationForm3": {
"crn": "123456",
"vrn": "789012",
"address": "123 Main St"
}
}
# Send a POST request with the JSON data
response = self.client.post(
self.url,
data=json.dumps(data),
content_type='application/json'
)
# Check the response
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json(), {"error": "Passwords do not match."})
def test_missing_required_fields(self):
# Create JSON data with missing required fields
data = {
"wizardValidationForm1": {
"email": "test@example.com",
"password": "password123",
# Missing "confirm_password"
},
"wizardValidationForm2": {
"name": "John Doe",
"arabic_name": "جون دو",
"phone_number": "1234567890"
},
"wizardValidationForm3": {
"crn": "123456",
"vrn": "789012",
"address": "123 Main St"
}
}
# Send a POST request with the JSON data
response = self.client.post(
self.url,
data=json.dumps(data),
content_type='application/json'
)
# Check the response
self.assertEqual(response.status_code, 400)
self.assertIn("error", response.json()) # Assuming the view returns an error for missing fields