# (c) cavaliba.com - tests / iam / permission list YAML export (no size gate)

import yaml
from django.test import TestCase, override_settings
from django.urls import reverse

import app_home.cache as cache
from app_user.models import SirenePermission
from tests import helper


@override_settings(CAVALIBA_AUTH_MODE="unittest")
class ViewIamPermissionExportTest(TestCase):
    def setUp(self):
        cache.clear()

    def test_yaml_export_downloads_every_permission(self):
        helper.add_user_with_perm(login="unittest", perms=["p_permission_read", "p_iam_export"])

        response = self.client.get(reverse("app_data:permission_list") + "?o=yaml")

        self.assertEqual(response.status_code, 200)
        self.assertIn("permissions.yaml", response["Content-Disposition"])
        datalist = yaml.safe_load(response.content.decode())
        self.assertEqual(len(datalist), SirenePermission.objects.count())

    def test_yaml_export_is_not_capped_by_a_dataset_size(self):
        # the EXPORT_INTERACTIVE_MAX_SIZE gate is gone (5.4.0): the whole set is
        # exported in the request whatever its size, and the builtin set alone is
        # already well over a hundred rows
        helper.add_user_with_perm(login="unittest", perms=["p_permission_read", "p_iam_export"])

        response = self.client.get(reverse("app_data:permission_list") + "?o=yaml")

        self.assertGreaterEqual(SirenePermission.objects.count(), 120)
        self.assertEqual(response.status_code, 200)
        self.assertIn("text/yaml", response["Content-Type"])

    def test_yaml_export_refused_without_p_iam_export(self):
        helper.add_user_with_perm(login="unittest", perms=["p_permission_read"])

        response = self.client.get(reverse("app_data:permission_list") + "?o=yaml")

        self.assertEqual(response.status_code, 302)
