from django.contrib.auth import get_user_model
from django.test import TestCase

from shop_management.models.data.sale import Sale
from shop_management.models.data.shop import Shop
from shop_management.models.data.utils import Currency
from shop_management.services.reporting import reportable_sales


class SaleReportVisibilityTests(TestCase):
    def test_only_posted_new_engine_sales_and_legacy_sales_are_reportable(self):
        user = get_user_model().objects.create_user(username="sale-report-visibility")
        shop = Shop.objects.create(owner=user, name="Kabul")
        currency = Currency.objects.create(shop=shop, title="AFN")
        posted = Sale.objects.create(
            shop=shop, currency=currency, uses_inventory_engine=True,
            document_status=Sale.DocumentStatus.POSTED,
        )
        Sale.objects.create(
            shop=shop, currency=currency, uses_inventory_engine=True,
            document_status=Sale.DocumentStatus.DRAFT,
        )
        Sale.objects.create(
            shop=shop, currency=currency, uses_inventory_engine=True,
            document_status=Sale.DocumentStatus.VOID,
        )
        legacy = Sale.objects.create(
            shop=shop, currency=currency, uses_inventory_engine=False,
            document_status=Sale.DocumentStatus.DRAFT,
        )

        self.assertCountEqual(
            reportable_sales(Sale.objects.all()).values_list("id", flat=True),
            [posted.id, legacy.id],
        )
