from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse

from apps.customers.models import Customer


class CustomerListViewTests(TestCase):
    def setUp(self):
        self.user = get_user_model().objects.create_user(username='owner')

    def test_customer_list_supports_search_filter(self):
        Customer.objects.create(full_name='Alice Advisor', company_name='Alpha', owner=self.user)
        Customer.objects.create(full_name='Bob Broker', company_name='Beta', owner=self.user)

        response = self.client.get(reverse('customers:list'), {'q': 'alice'})

        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'Alice Advisor')
        self.assertNotContains(response, 'Bob Broker')

    def test_customer_list_is_paginated(self):
        Customer.objects.bulk_create(
            [
                Customer(full_name=f'Customer {index:02d}', owner=self.user)
                for index in range(11)
            ]
        )

        first_page = self.client.get(reverse('customers:list'))
        second_page = self.client.get(reverse('customers:list'), {'page': 2})

        self.assertTrue(first_page.context['is_paginated'])
        self.assertEqual(len(first_page.context['customers']), 10)
        self.assertEqual(len(second_page.context['customers']), 1)
