from django.contrib.auth.models import User
from django.test import TestCase

from employee.forms import EmployeeForm, UserLoginDetailsForm


class EmployeeFormRegressionTests(TestCase):
	def test_missing_email_does_not_raise(self):
		data = {
			"employee_first_name": "Alice",
			"phone": "123456789",
			"gender": "male",
		}

		form = EmployeeForm(data=data)

		self.assertFalse(form.is_valid())
		self.assertIn("email", form.errors)

	def test_invalid_email_does_not_raise(self):
		data = {
			"employee_first_name": "Bob",
			"phone": "987654321",
			"gender": "male",
			"email": "not-an-email",
		}

		form = EmployeeForm(data=data)

		self.assertFalse(form.is_valid())
		self.assertIn("email", form.errors)


class UserLoginDetailsFormTests(TestCase):
	def test_password_mismatch_validation(self):
		data = {
			"username": "newuser",
			"email": "newuser@example.com",
			"first_name": "New",
			"last_name": "User",
			"is_active": "on",
			"password": "secret123",
			"confirm_password": "different",
		}

		form = UserLoginDetailsForm(data=data)

		self.assertFalse(form.is_valid())
		self.assertIn("__all__", form.errors)

	def test_existing_user_password_optional(self):
		user = User.objects.create_user(
			username="existing",
			email="existing@example.com",
			password="initialpass",
		)

		data = {
			"username": "existing",
			"email": "updated@example.com",
			"first_name": "Existing",
			"last_name": "User",
			"is_active": "on",
			"password": "",
			"confirm_password": "",
		}

		form = UserLoginDetailsForm(data=data, instance=user)

		self.assertTrue(form.is_valid())
		saved_user = form.save()
		saved_user.refresh_from_db()

		self.assertEqual(saved_user.email, "updated@example.com")
		self.assertTrue(saved_user.check_password("initialpass"))
