# -*- coding: utf-8; -*-
#
# This file is part of Superdesk.
#
# Copyright 2013, 2014, 2015 Sourcefabric z.u. and contributors.
#
# For the full copyright and license information, please see the
# AUTHORS and LICENSE files distributed with this source code, or
# at https://www.sourcefabric.org/superdesk/license

import superdesk
from superdesk.tests import TestCase
from superdesk.publish import init_app, SUBSCRIBER_TYPES
from superdesk.publish.transmitters.odbc import ODBCPublishService


class ODBCTests(TestCase):
    subscribers = [
        {
            "_id": "1",
            "name": "Test",
            "subscriber_type": SUBSCRIBER_TYPES.WIRE,
            "media_type": "media",
            "is_active": True,
            "sequence_num_settings": {"max": 10, "min": 1},
            "critical_errors": {"9004": True},
            "destinations": [
                {
                    "name": "AAP IPNEWS",
                    "delivery_type": "odbc",
                    "format": "AAP IPNEWS",
                    "config": {"stored_procedure": "InsertNews"},
                }
            ],
        }
    ]

    queue_items = [
        {
            "_id": "1",
            "state": "pending",
            "content_type": "text",
            "headline": "test",
            "unique_name": "#2034",
            "publishing_action": "published",
            "published_seq_num": 4,
            "destination": {
                "name": "AAP IPNEWS",
                "delivery_type": "odbc",
                "format": "AAP IPNEWS",
                "config": {"stored_procedure": "InsertNews"},
            },
            "formatted_item": {
                "ident": "0",
                "selector_codes": "3**",
                "wordcount": 313,
                "texttab": "x",
                "originator": "AAP",
                "service_level": "a",
                "keyword": "ROSS",
                "subject": "crime, law and justice",
                "category": "a",
                "take_key": "Take-that",
                "subject_detail": "international court or tribunal",
                "subject_reference": "02011001",
                "article_text": "THIS IS A TEST PLEASE IGNORE",
                "priority": "u",
                "headline": "TEST HEADLINE",
                "usn": 68147,
                "subject_matter": "international law",
                "sequence": 117,
                "news_item_type": "News",
                "author": "",
                "genre": "Current",
                "fullStory": 1,
            },
            "subscriber_id": "1",
            "item_id": "1",
            "item_version": 6,
        }
    ]

    def setUp(self):
        self.subscribers[0]["destinations"][0]["config"]["connection_string"] = self.app.config[
            "ODBC_TEST_CONNECTION_STRING"
        ]
        self.app.data.insert("subscribers", self.subscribers)

        self.queue_items[0]["destination"]["config"]["connection_string"] = self.app.config[
            "ODBC_TEST_CONNECTION_STRING"
        ]
        self.app.data.insert("publish_queue", self.queue_items)
        init_app(self.app)

    def test_transmit(self):
        if self.app.config["ODBC_PUBLISH"]:
            subscriber = self.app.data.find("subscribers", None, None)[0]

            publish_service = ODBCPublishService()
            ret = publish_service._transmit(self.queue_items[0], subscriber)
            self.assertGreater(ret, 0)
