class TestRepeaterFormat(BaseRepeaterTest):
    domain = 'test-fmt'

    @classmethod
    def setUpClass(cls):
        super(TestRepeaterFormat, cls).setUpClass()
        cls.payload = 'some random case'

        class NewCaseGenerator(BasePayloadGenerator):
            format_name = 'new_format'
            format_label = 'XML'
            deprecated_format_names = ('new_format_alias', )

            def get_payload(self, repeat_record, payload_doc):
                return cls.payload

        RegisterGenerator.get_collection(CaseRepeater).add_new_format(
            NewCaseGenerator)
        cls.new_generator = NewCaseGenerator

    def setUp(self):
        super().setUp()
        self.post_xml(self.xform_xml, self.domain)
        self.connx = ConnectionSettings.objects.create(
            domain=self.domain,
            url='case-repeater-url',
        )
        self.repeater = CaseRepeater(
            domain=self.domain,
            connection_settings_id=self.connx.id,
            format='new_format',
        )
        self.repeater.save()

    def tearDown(self):
        self.repeater.delete()
        self.connx.delete()
        FormProcessorTestUtils.delete_all_cases_forms_ledgers(self.domain)
        delete_all_repeat_records()
        super().tearDown()

    def test_new_format_same_name(self):
        class NewCaseGenerator(BasePayloadGenerator):
            format_name = 'case_xml'
            format_label = 'XML'

            def get_payload(self, repeat_record, payload_doc):
                return self.payload

        with self.assertRaises(DuplicateFormatException):
            RegisterGenerator.get_collection(CaseRepeater).add_new_format(
                NewCaseGenerator)

    def test_new_format_second_default(self):
        class NewCaseGenerator(BasePayloadGenerator):
            format_name = 'rubbish'
            format_label = 'XML'

            def get_payload(self, repeat_record, payload_doc):
                return self.payload

        with self.assertRaises(DuplicateFormatException):
            RegisterGenerator.get_collection(CaseRepeater).add_new_format(
                NewCaseGenerator, is_default=True)

    @run_with_all_backends
    def test_new_format_payload(self):
        repeat_record = self.repeater.register(
            CaseAccessors(self.domain).get_case(CASE_ID))
        with patch('corehq.motech.repeaters.models.simple_post') as mock_post, \
                patch.object(ConnectionSettings, 'get_auth_manager') as mock_manager:
            mock_post.return_value.status_code = 200
            mock_manager.return_value = 'MockAuthManager'
            repeat_record.fire()
            headers = self.repeater.get_headers(repeat_record)
            mock_post.assert_called_with(
                self.domain,
                self.connx.url,
                self.payload,
                auth_manager='MockAuthManager',
                headers=headers,
                notify_addresses=[],
                payload_id='ABC123CASEID',
                verify=self.repeater.verify,
            )

    def test_get_format_by_deprecated_name(self):
        self.assertIsInstance(
            CaseRepeater(
                domain=self.domain,
                url='case-repeater-url',
                format='new_format_alias',
            ).generator, self.new_generator)
Esempio n. 2
0
class TestRepeaterFormat(BaseRepeaterTest):
    @classmethod
    def setUpClass(cls):
        super(TestRepeaterFormat, cls).setUpClass()
        cls.payload = 'some random case'

        class NewCaseGenerator(BasePayloadGenerator):
            format_name = 'new_format'
            format_label = 'XML'
            deprecated_format_names = ('new_format_alias', )

            def get_payload(self, repeat_record, payload_doc):
                return cls.payload

        RegisterGenerator.get_collection(CaseRepeater).add_new_format(
            NewCaseGenerator)
        cls.new_generator = NewCaseGenerator

    def setUp(self):
        super(TestRepeaterFormat, self).setUp()
        self.domain = "test-domain"
        create_domain(self.domain)
        self.post_xml(self.xform_xml, self.domain)

        self.repeater = CaseRepeater(
            domain=self.domain,
            url='case-repeater-url',
            format='new_format',
        )
        self.repeater.save()

    def tearDown(self):
        self.repeater.delete()
        FormProcessorTestUtils.delete_all_cases_forms_ledgers(self.domain)
        delete_all_repeat_records()
        super(TestRepeaterFormat, self).tearDown()

    def test_new_format_same_name(self):
        class NewCaseGenerator(BasePayloadGenerator):
            format_name = 'case_xml'
            format_label = 'XML'

            def get_payload(self, repeat_record, payload_doc):
                return self.payload

        with self.assertRaises(DuplicateFormatException):
            RegisterGenerator.get_collection(CaseRepeater).add_new_format(
                NewCaseGenerator)

    def test_new_format_second_default(self):
        class NewCaseGenerator(BasePayloadGenerator):
            format_name = 'rubbish'
            format_label = 'XML'

            def get_payload(self, repeat_record, payload_doc):
                return self.payload

        with self.assertRaises(DuplicateFormatException):
            RegisterGenerator.get_collection(CaseRepeater).add_new_format(
                NewCaseGenerator, is_default=True)

    @run_with_all_backends
    def test_new_format_payload(self):
        repeat_record = self.repeater.register(
            CaseAccessors(self.domain).get_case(CASE_ID))
        with patch('corehq.motech.repeaters.models.simple_post') as mock_post:
            mock_post.return_value.status_code = 200
            repeat_record.fire()
            headers = self.repeater.get_headers(repeat_record)
            mock_post.assert_called_with(
                self.payload,
                self.repeater.url,
                headers=headers,
                timeout=POST_TIMEOUT,
                auth=self.repeater.get_auth(),
                verify=self.repeater.verify,
            )

    def test_get_format_by_deprecated_name(self):
        self.assertIsInstance(
            CaseRepeater(
                domain=self.domain,
                url='case-repeater-url',
                format='new_format_alias',
            ).generator, self.new_generator)
Esempio n. 3
0
class TestRepeaterFormat(BaseRepeaterTest):

    @classmethod
    def setUpClass(cls):
        super(TestRepeaterFormat, cls).setUpClass()
        cls.payload = 'some random case'

        class NewCaseGenerator(BasePayloadGenerator):
            format_name = 'new_format'
            format_label = 'XML'
            deprecated_format_names = ('new_format_alias',)

            def get_payload(self, repeat_record, payload_doc):
                return cls.payload

        RegisterGenerator.get_collection(CaseRepeater).add_new_format(NewCaseGenerator)
        cls.new_generator = NewCaseGenerator

    def setUp(self):
        super(TestRepeaterFormat, self).setUp()
        self.domain = "test-domain"
        create_domain(self.domain)
        self.post_xml(self.xform_xml, self.domain)

        self.repeater = CaseRepeater(
            domain=self.domain,
            url='case-repeater-url',
            format='new_format',
        )
        self.repeater.save()

    def tearDown(self):
        self.repeater.delete()
        FormProcessorTestUtils.delete_all_cases_forms_ledgers(self.domain)
        delete_all_repeat_records()
        super(TestRepeaterFormat, self).tearDown()

    def test_new_format_same_name(self):
        class NewCaseGenerator(BasePayloadGenerator):
            format_name = 'case_xml'
            format_label = 'XML'

            def get_payload(self, repeat_record, payload_doc):
                return self.payload

        with self.assertRaises(DuplicateFormatException):
            RegisterGenerator.get_collection(CaseRepeater).add_new_format(NewCaseGenerator)

    def test_new_format_second_default(self):
        class NewCaseGenerator(BasePayloadGenerator):
            format_name = 'rubbish'
            format_label = 'XML'

            def get_payload(self, repeat_record, payload_doc):
                return self.payload

        with self.assertRaises(DuplicateFormatException):
            RegisterGenerator.get_collection(CaseRepeater).add_new_format(NewCaseGenerator, is_default=True)

    @run_with_all_backends
    def test_new_format_payload(self):
        repeat_record = self.repeater.register(CaseAccessors(self.domain).get_case(CASE_ID))
        with patch('corehq.motech.repeaters.models.simple_post') as mock_post:
            mock_post.return_value.status_code = 200
            repeat_record.fire()
            headers = self.repeater.get_headers(repeat_record)
            mock_post.assert_called_with(
                self.payload,
                self.repeater.url,
                headers=headers,
                timeout=POST_TIMEOUT,
                auth=self.repeater.get_auth(),
                verify=self.repeater.verify,
            )

    def test_get_format_by_deprecated_name(self):
        self.assertIsInstance(CaseRepeater(
            domain=self.domain,
            url='case-repeater-url',
            format='new_format_alias',
        ).generator, self.new_generator)