import pytest
from django.contrib.auth.models import User

@pytest.mark.django_db
def test_calculate_display_name():
    # Create a user instance
    user = User.objects.create_user(username='johndoe', first_name='John', last_name='Doe')

    # Assert the display name is as expected
    assert user.profile.calculate_display_name() == 'John Doe'

@pytest.mark.django_db
def test_calculate_display_name_with_preferred_name():
    # Create a user instance
    user = User.objects.create_user(username='johndoe', first_name='John', last_name='Doe')

    # Set a preferred name
    user.profile.preferred_name = 'Johnny'
    user.profile.save()

    # Assert the display name includes the preferred name
    assert user.profile.calculate_display_name() == 'John (Johnny) Doe'

@pytest.mark.django_db
def test_calculate_display_name_with_privacy_mode():
    # Create a user instance
    user = User.objects.create_user(username='johndoe', first_name='John', last_name='Doe')

    # Enable privacy mode
    user.profile.enabled_privacy_mode = True
    user.profile.save()

    # Assert the display name uses privacy mode format
    assert user.profile.calculate_display_name() == 'John D.'

@pytest.mark.django_db
def test_calculate_display_name_without_first_last_name():
    # Create a user instance
    user = User.objects.create_user(username='johndoe', first_name='', last_name='')

    # Assert the display name falls back to the username
    assert user.profile.calculate_display_name() == 'johndoe'
