from superdesk.tests import TestCase
from apps.rules.rule_handlers import DeskFetchPublishRoutingRuleHandler


class SetDefaultValuesTestCase(TestCase):
    def test_setting_default_values(self):
        instance = DeskFetchPublishRoutingRuleHandler()
        category = [{"qcode": "a", "name": "Australian General News"}]
        result = instance._assign_default_values({"anpa_category": category}, None)
        self.assertEqual(result["anpa_category"], [{"qcode": "a", "name": "Australian General News"}])

        with self.app.app_context():
            result = instance._assign_default_values({}, None)
            self.assertIsNone(result["anpa_category"])

            result = instance._assign_default_values({}, [{"qcode": "a", "name": "Australian General News"}])
            self.assertEqual(result["anpa_category"], [{"qcode": "a", "name": "Australian General News"}])

    def test_getting_selected_categories(self):
        vocabularies = [
            {
                "_id": "categories",
                "items": [
                    {"qcode": "a", "name": "foo", "is_active": True},
                    {"qcode": "b", "name": "bar", "is_active": True},
                    {"qcode": "c", "name": "baz", "is_active": False},
                ],
            }
        ]

        instance = DeskFetchPublishRoutingRuleHandler()

        with self.app.app_context():
            self.app.data.insert("vocabularies", vocabularies)
            result = instance._get_categories("a")
            self.assertEqual(result, [{"qcode": "a", "name": "foo"}])

            result = instance._get_categories("a,b")
            self.assertEqual(result, [{"qcode": "a", "name": "foo"}, {"qcode": "b", "name": "bar"}])

            result = instance._get_categories("a,c")
            self.assertEqual(result, [{"qcode": "a", "name": "foo"}])

            result = instance._get_categories("c")
            self.assertEqual(result, [])

            result = instance._get_categories(None)
            self.assertIsNone(result)
