def test_edit_record_failed_update_dns_record(self):
        responses = []

        def record_edited_cb(**kwargs):
            self.assertFalse(kwargs['succeed'])
            exception = kwargs['exception']
            responses.append(exception)
            self.assertEqual('Any Error Blah', exception.message)

        zone_name = "{0}.com".format(str(uuid.uuid4()))

        self.cf_lib_wrapper.get_zone_info = MagicMock(
            return_value={'id': 'ZONE ID'})
        self.cf_lib_wrapper.list_dns_records = MagicMock(
            return_value=[{
                'id': 'DNS RECORD ID',
                'type': 'TXT',
                'name': 'foo.{0}'.format(zone_name),
                'content': 'bar'
            }])
        self.cf_lib_wrapper.update_dns_record = MagicMock(
            side_effect=CloudFlareAPIError(code=-1, message='Any Error Blah'))

        bulk_dns.edit_record(zone_name,
                             "TXT",
                             "foo",
                             "bar",
                             "new bar",
                             record_edited_cb=record_edited_cb,
                             cf_lib_wrapper=self.cf_lib_wrapper)

        self.assertEqual(1, len(responses))
        pass
    def test_edit_record_succeed_with_old_record_content_template_zone(self):
        domain_name = 'add-purer-happen.host'
        dns_records = []
        for i in range(1, 21):
            dns_records.append({
                'id': 'DNS RECORD ID {0}'.format(i),
                'type': 'TXT',
                'name': 'foo{0}.{1}'.format(i, domain_name),
                'content': 'bar{0}'.format(i),
            })
        dns_records.append({
            'id': 'DNS RECORD ID 345',
            'type': 'CNAME',
            'name': 'www.{0}'.format(domain_name),
            'content': domain_name,
        })
        dns_records_page_1 = dns_records[:20]
        dns_records_page_2 = dns_records[20:40]
        responses = []

        def record_edited_cb(**kwargs):
            self.assertTrue(kwargs['succeed'])
            response = kwargs['response']
            self.assertEqual("DNS RECORD ID 345", response['id'])
            self.assertEqual("hello.{0}".format(domain_name),
                             response['content'])
            responses.append(response)

        self.cf_lib_wrapper.get_zone_info = MagicMock(
            return_value={'id': 'ZONE ID'})
        self.cf_lib_wrapper.update_dns_record = MagicMock(
            return_value={
                'id': 'DNS RECORD ID 345',
                'type': 'CNAME',
                'name': 'www.{0}'.format(domain_name),
                'content': 'hello.{0}'.format(domain_name),
            })
        self.cf_lib_wrapper.list_dns_records = MagicMock(
            side_effect=[dns_records_page_1, dns_records_page_2])

        bulk_dns.edit_record(domain_name,
                             "CNAME",
                             "www",
                             "{{zone}}",
                             "hello.{{zone}}",
                             record_edited_cb=record_edited_cb,
                             cf_lib_wrapper=self.cf_lib_wrapper)

        self.assertEqual(1, len(responses))
    def test_edit_record_succeed_without_specifying_record_name_and_old_content(
            self):
        domain_name = 'add-purer-happen.host'
        dns_records = []
        for i in range(1, 21):
            dns_records.append({
                'id': 'DNS RECORD ID {0}'.format(i),
                'type': 'TXT',
                'name': 'foo{0}.{1}'.format(i, domain_name),
                'content': 'bar{0}'.format(i),
            })
        dns_records.append({
            'id': 'DNS RECORD ID 345',
            'type': 'A',
            'name': domain_name,
            'content': '111.111.111.111',
        })
        dns_records_page_1 = dns_records[:20]
        dns_records_page_2 = dns_records[20:40]
        responses = []

        def record_edited_cb(**kwargs):
            self.assertTrue(kwargs['succeed'])
            response = kwargs['response']
            self.assertEqual("DNS RECORD ID 345", response['id'])
            self.assertEqual("222.222.222.222", response['content'])
            responses.append(response)

        self.cf_lib_wrapper.get_zone_info = MagicMock(
            return_value={'id': 'ZONE ID'})
        self.cf_lib_wrapper.update_dns_record = MagicMock(
            return_value={
                'id': 'DNS RECORD ID 345',
                'type': 'A',
                'name': domain_name,
                'content': '222.222.222.222',
            })
        self.cf_lib_wrapper.list_dns_records = MagicMock(
            side_effect=[dns_records_page_1, dns_records_page_2])

        bulk_dns.edit_record(domain_name,
                             "A",
                             None,
                             None,
                             "222.222.222.222",
                             record_edited_cb=record_edited_cb,
                             cf_lib_wrapper=self.cf_lib_wrapper)

        self.assertEqual(1, len(responses))
    def test_edit_record_failed_zone_info_is_none(self):
        responses = []

        def record_edited_cb(**kwargs):
            self.assertFalse(kwargs['succeed'])
            exception = kwargs['exception']
            responses.append(exception)
            self.assertEqual('zone_info is None', exception.message)

        self.cf_lib_wrapper.get_zone_info = MagicMock(return_value=None)

        bulk_dns.edit_record("{0}.com".format(str(uuid.uuid4())),
                             "TXT",
                             "foo",
                             "bar",
                             "new bar",
                             record_edited_cb=record_edited_cb,
                             cf_lib_wrapper=self.cf_lib_wrapper)

        self.assertEqual(1, len(responses))