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