def test_get_approved_latest_added_linkback(self):
        """weblinkback - get approved latest added linkbacks"""
        for linkbackid in (1, 2, 5, 6, 7):
            approve_linkback(linkbackid + self._max_id_lnkENTRY, self.user_info)

        reject_linkback(4 + self._max_id_lnkENTRY, self.user_info)

        self.assertEqual(0, len(get_approved_latest_added_linkbacks(0)))
        self.assertEqual(1, len(get_approved_latest_added_linkbacks(1)))
        self.assertEqual(2, len(get_approved_latest_added_linkbacks(2)))
        self.assertEqual(3, len(get_approved_latest_added_linkbacks(3)))
        self.assertEqual(4, len(get_approved_latest_added_linkbacks(4)))
        self.assertEqual(5, len(get_approved_latest_added_linkbacks(5)))

        approved_linkbacks = get_approved_latest_added_linkbacks(6)
        self.assertEqual(5, len(approved_linkbacks))
        self.assertEqual(1 + self._max_id_lnkENTRY, approved_linkbacks[0][0])
        self.assertEqual(2 + self._max_id_lnkENTRY, approved_linkbacks[1][0])
        self.assertEqual(5 + self._max_id_lnkENTRY, approved_linkbacks[2][0])
        self.assertEqual(6 + self._max_id_lnkENTRY, approved_linkbacks[3][0])
        self.assertEqual(7 + self._max_id_lnkENTRY, approved_linkbacks[4][0])

        url = CFG_SITE_URL + '/linkbacks/'
        expected_texts = ('URL1', 'URL2', 'URL5', 'URL6', 'URL7')
        for text in expected_texts:
            self.assertEqual([], test_web_page_content(url,
                                                       username='******',
                                                       expected_text=text))
        unexpected_texts = ('URL3', 'URL4', 'URL8')
        for text in unexpected_texts:
            self.assertEqual([], test_web_page_content(url,
                                                       username='******',
                                                       unexpected_text=text))
Ejemplo n.º 2
0
def perform_sendtrackback(recid, url, title, excerpt, blog_name, blog_id, source, current_user):
    """
    Send trackback
    @param recid: recid
    """
    # assume unsuccessful request
    status = 400
    xml_response = '<response>'
    xml_error_response = """<error>1</error>
                             <message>%s</message>
                         """

    blacklist_match = infix_exists_for_url_in_list(url, CFG_WEBLINKBACK_LIST_TYPE['BLACKLIST'])
    whitelist_match = infix_exists_for_url_in_list(url, CFG_WEBLINKBACK_LIST_TYPE['WHITELIST'])

    # faulty request, url argument not set
    if url in (CFG_WEBLINKBACK_SUBSCRIPTION_DEFAULT_ARGUMENT_NAME, None, ''):
        xml_response += xml_error_response % CFG_WEBLINKBACK_TRACKBACK_SUBSCRIPTION_ERROR_MESSAGE['BAD_ARGUMENT']
    # request refused: whitelist match has precedence over blacklist match
    elif blacklist_match and not whitelist_match:
        xml_response += xml_error_response % CFG_WEBLINKBACK_TRACKBACK_SUBSCRIPTION_ERROR_MESSAGE['BLACKLIST']
    # request accepted: will be either approved automatically or pending
    else:
        status = 200
        linkback_id = create_trackback(recid, url, title, excerpt, blog_name, blog_id, source, current_user)
        # approve request automatically from url in whitelist
        if  whitelist_match:
            approve_linkback(linkback_id, current_user)

    xml_response += '</response>'

    return xml_response, status
    def test_create_linkback2(self):
        """weblinkback - create linkback with URL title"""
        recid = 42
        argd = {'url': 'URL',
                'title': 'My title',
                'excerpt': CFG_WEBLINKBACK_SUBSCRIPTION_DEFAULT_ARGUMENT_NAME,
                'blog_name': 'Test Blog',
                'id': CFG_WEBLINKBACK_SUBSCRIPTION_DEFAULT_ARGUMENT_NAME,
                'source': CFG_WEBLINKBACK_SUBSCRIPTION_DEFAULT_ARGUMENT_NAME,
                }

        linkbackid = create_trackback(recid, argd['url'], argd['title'], argd['excerpt'], argd['blog_name'], argd['id'], argd['source'], self.user_info)
        self.assertEqual(10 + self._max_id_lnkENTRY, linkbackid)

        linkback = get_all_linkbacks(recid=recid)[5]
        self.assertEqual(linkbackid, linkback[0])
        self.assertEqual(argd['url'], linkback[1])
        self.assertEqual(recid, linkback[2])
        self.assertEqual(CFG_WEBLINKBACK_TYPE['TRACKBACK'], linkback[4])
        self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback[5])

        url = CFG_SITE_URL + '/%s/42/linkbacks/' % CFG_SITE_RECORD
        expected_texts = ('Linkbacks to review: 6', 'Linkbacks: 0')
        for text in expected_texts:
            self.assertEqual([], test_web_page_content(url,
                                                       username='******',
                                                       expected_text=text))

        approve_linkback(linkbackid, self.user_info)

        linkback = get_all_linkbacks(recid=recid)[5]
        self.assertEqual(linkbackid, linkback[0])
        self.assertEqual(argd['url'], linkback[1])
        self.assertEqual(recid, linkback[2])
        self.assertEqual(CFG_WEBLINKBACK_TYPE['TRACKBACK'], linkback[4])
        self.assertEqual(CFG_WEBLINKBACK_STATUS['APPROVED'], linkback[5])

        url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
        self.assertEqual(1, len(url_titles))
        self.assertEqual(argd['url'], url_titles[0][1])
        self.assertEqual(argd['title'], url_titles[0][2])
        self.assertEqual(1, url_titles[0][3])
        self.assertEqual(argd['title'], get_url_title(argd['url']))

        self.assertEqual(0, len(get_urls_and_titles(CFG_WEBLINKBACK_PAGE_TITLE_STATUS['OLD'])))
        self.assertEqual(0, len(get_urls_and_titles(CFG_WEBLINKBACK_PAGE_TITLE_STATUS['NEW'])))
        self.assertEqual(1, len(get_urls_and_titles(CFG_WEBLINKBACK_PAGE_TITLE_STATUS['MANUALLY_SET'])))

        url = CFG_SITE_URL + '/%s/42/linkbacks/' % CFG_SITE_RECORD
        expected_texts = ('Linkbacks to review: 5', 'Linkbacks: 1')
        for text in expected_texts:
            self.assertEqual([], test_web_page_content(url,
                                                       username='******',
                                                       expected_text=text))
Ejemplo n.º 4
0
    def approve(self, req, form):
        """
        Approve a linkback
        """
        argd = wash_urlargd(form, {'linkbackid': (int, -1)})

        authorization = self.check_authorization_moderatelinkbacks(req, argd)
        if not authorization:
            approve_linkback(argd['linkbackid'], collect_user_info(req))
            return self.display(req, form)
        else:
            return authorization
Ejemplo n.º 5
0
    def approve(self, req, form):
        """
        Approve a linkback
        """
        argd = wash_urlargd(form, {'linkbackid': (int, -1)})

        authorization = self.check_authorization_moderatelinkbacks(req, argd)
        if not authorization:
            approve_linkback(argd['linkbackid'], collect_user_info(req))
            return self.display(req, form)
        else:
            return authorization
Ejemplo n.º 6
0
def perform_moderate_linkback(req, linkbackid, action):
    """
    Moderate linkbacks
    @param linkbackid: linkback id
    @param action: of CFG_WEBLINKBACK_ADMIN_MODERATION_ACTION
    @return CFG_WEBLINKBACK_ACTION_RETURN_CODE
    """
    if action == CFG_WEBLINKBACK_ADMIN_MODERATION_ACTION['APPROVE']:
        approve_linkback(linkbackid, collect_user_info(req))
    elif action == CFG_WEBLINKBACK_ADMIN_MODERATION_ACTION['REJECT']:
        reject_linkback(linkbackid, collect_user_info(req))
    else:
        return CFG_WEBLINKBACK_ACTION_RETURN_CODE['INVALID_ACTION']

    return CFG_WEBLINKBACK_ACTION_RETURN_CODE['OK']
Ejemplo n.º 7
0
def perform_moderate_linkback(req, linkbackid, action):
    """
    Moderate linkbacks
    @param linkbackid: linkback id
    @param action: of CFG_WEBLINKBACK_ADMIN_MODERATION_ACTION
    @return CFG_WEBLINKBACK_ACTION_RETURN_CODE
    """
    if action == CFG_WEBLINKBACK_ADMIN_MODERATION_ACTION['APPROVE']:
        approve_linkback(linkbackid, collect_user_info(req))
    elif action == CFG_WEBLINKBACK_ADMIN_MODERATION_ACTION['REJECT']:
        reject_linkback(linkbackid, collect_user_info(req))
    else:
        return CFG_WEBLINKBACK_ACTION_RETURN_CODE['INVALID_ACTION']

    return CFG_WEBLINKBACK_ACTION_RETURN_CODE['OK']
    def test_url_remove(self):
        """weblinkback - test remove URL rom list"""
        add_url_to_list('url1', CFG_WEBLINKBACK_LIST_TYPE['BLACKLIST'], self.user_info)
        add_url_to_list('url2', CFG_WEBLINKBACK_LIST_TYPE['BLACKLIST'], self.user_info)
        remove_url('url2')
        # creating a different log, might detect a bug in the logging ids
        approve_linkback(1 + self._max_id_lnkENTRY, self.user_info)
        add_url_to_list('url3', CFG_WEBLINKBACK_LIST_TYPE['BLACKLIST'], self.user_info)

        admin_url_table = self.get_all_from_table('lnkADMINURL')
        admin_url_log_table = self.get_all_from_table('lnkADMINURLLOG')
        logTable = self.get_all_from_table('lnkLOG')

        self.assertEqual(2, len(admin_url_table))
        self.assertEqual(2, len(admin_url_log_table))
        # there are more logs due to the inserted linkbacks in setUp()
        self.assertEqual(12, len(logTable))

        self.assertEqual(1 + self._max_id_lnkADMINURL, admin_url_table[0][0])
        # there are more logs due to the inserted linkbacks in setUp()
        self.assertEqual(1 + self._max_id_lnkADMINURL, admin_url_log_table[0][0])
        self.assertEqual(10 + self._max_id_lnkLOG, admin_url_log_table[0][1])

        self.assertEqual(3 + self._max_id_lnkADMINURL, admin_url_table[1][0])
        # there are more logs due to the inserted linkbacks in setUp()
        self.assertEqual(3 + self._max_id_lnkADMINURL, admin_url_log_table[1][0])
        # 9 linkbacks inserted  (9)
        # 2 urls inserted      (11)
        # 1 url removed        (11) (log id 10 removed)
        # 1 linkback approved  (12)
        # 1 url inserted       (13)
        self.assertEqual(13 + self._max_id_lnkLOG, admin_url_log_table[1][1])

        url = CFG_SITE_URL + '/admin/weblinkback/weblinkbackadmin.py/lists'
        expected_texts = ('url1', 'url3')
        for text in expected_texts:
            self.assertEqual([], test_web_page_content(url,
                                                       username='******',
                                                       expected_text=text))
        unexpected_texts = ('url2', )
        for text in unexpected_texts:
            self.assertEqual([], test_web_page_content(url,
                                                       username='******',
                                                       unexpected_text=text))
    def test_approve_linkback(self):
        """weblinkback - approve linkback"""
        linkback = get_all_linkbacks(41)[0]
        linkbackid = linkback[0]
        linkback_status = linkback[5]
        self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_status)

        approve_linkback(linkbackid, self.user_info)

        linkback = get_all_linkbacks(recid=41)[0]
        linkback_status = linkback[5]
        self.assertEqual(CFG_WEBLINKBACK_STATUS['APPROVED'], linkback_status)

        url = CFG_SITE_URL + '/%s/41/linkbacks/' % CFG_SITE_RECORD
        expected_texts = ('Linkbacks to review: 3', 'Linkbacks: 1')
        for text in expected_texts:
            self.assertEqual([], test_web_page_content(url,
                                                       username='******',
                                                       expected_text=text))
Ejemplo n.º 10
0
def perform_sendtrackback(req, recid, url, title, excerpt, blog_name, blog_id, source, ln):
    """
    Send trackback
    @param recid: recid
    """
    # assume unsuccessful request
    status = 400
    xml_response = '<response>'
    xml_error_response = """<error>1</error>
                             <message>%s</message>
                         """

    blacklist_match = infix_exists_for_url_in_list(url, CFG_WEBLINKBACK_LIST_TYPE['BLACKLIST'])
    whitelist_match = infix_exists_for_url_in_list(url, CFG_WEBLINKBACK_LIST_TYPE['WHITELIST'])

    # faulty request, url argument not set
    if url in (CFG_WEBLINKBACK_SUBSCRIPTION_DEFAULT_ARGUMENT_NAME, None, ''):
        xml_response += xml_error_response % CFG_WEBLINKBACK_TRACKBACK_SUBSCRIPTION_ERROR_MESSAGE['BAD_ARGUMENT']
    # request refused: whitelist match has precedence over blacklist match
    elif blacklist_match and not whitelist_match:
        xml_response += xml_error_response % CFG_WEBLINKBACK_TRACKBACK_SUBSCRIPTION_ERROR_MESSAGE['BLACKLIST']
    # request accepted: will be either approved automatically or pending
    else:
        status = 200
        linkback_id = create_trackback(recid, url, title, excerpt, blog_name, blog_id, source, collect_user_info(req))
        # approve request automatically from url in whitelist
        if  whitelist_match:
            approve_linkback(linkback_id, collect_user_info(req))
        # send request notification email to moderators
        else:
            send_request_notification_to_all_linkback_moderators(recid, url, CFG_WEBLINKBACK_TYPE['TRACKBACK'], ln)

    xml_response += '</response>'

    # send response
    req.set_content_type("text/xml; charset=utf-8")
    req.set_status(status)
    req.send_http_header()
    req.write(xml_response)
    def test_delete_linkbacks_on_blacklist(self):
        """weblinkback - test delete linkbacks on blacklist"""
        for linkbackid in (1, 2, 3, 4):
            approve_linkback(linkbackid + self._max_id_lnkENTRY, self.user_info)
        for linkbackid in (5, 6):
            reject_linkback(linkbackid + self._max_id_lnkENTRY, self.user_info)

        add_url_to_list('RL1', CFG_WEBLINKBACK_LIST_TYPE['BLACKLIST'], self.user_info)
        add_url_to_list('URL5', CFG_WEBLINKBACK_LIST_TYPE['BLACKLIST'], self.user_info)
        add_url_to_list('RL7', CFG_WEBLINKBACK_LIST_TYPE['BLACKLIST'], self.user_info)
        set_url_broken('URL1')
        entry_table = self.get_all_from_table('lnkENTRY')
        self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], entry_table[0][5])
        self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], entry_table[8][5])
        self.assertEqual(9, len(self.get_all_from_table("lnkENTRY")))
        self.assertEqual(17, len(self.get_all_from_table("lnkENTRYLOG")))
        self.assertEqual(20, len(self.get_all_from_table("lnkLOG")))

        delete_linkbacks_on_blacklist()
        self.assertEqual(5, len(self.get_all_from_table("lnkENTRY")))
        self.assertEqual(9, len(self.get_all_from_table("lnkENTRYLOG")))
        self.assertEqual(12, len(self.get_all_from_table("lnkLOG")))
        def test_detect_and_disable_broken_linkbacks(self):
            """weblinkback - test detect and disable broken linkbacks"""
            self.assertNotEqual([], test_web_page_content(CFG_SITE_URL + '/%s/41/linkbacks/sendtrackback?url=http://www.google.au&title=Google' % CFG_SITE_RECORD, username='******'))
            self.assertNotEqual([], test_web_page_content(CFG_SITE_URL + '/%s/41/linkbacks/sendtrackback?url=http://www.google.at' % CFG_SITE_RECORD, username='******'))
            self.assertNotEqual([], test_web_page_content(CFG_SITE_URL + '/%s/41/linkbacks/sendtrackback?url=http://www.google.co.za&title=GoogleCOZA' % CFG_SITE_RECORD, username='******'))
            self.assertNotEqual([], test_web_page_content(CFG_SITE_URL + '/%s/41/linkbacks/sendtrackback?url=http://www.google.co.za&title=Google' % CFG_SITE_RECORD, username='******'))

            run_sql("""INSERT INTO lnkENTRYURLTITLE (url, title, manual_set, broken_count)
                          VALUES
                          (%s, %s, %s, %s)
                    """, ("http://www.google.de", "Google DE", 0, 3))

            p = patch('invenio.weblinkback.get_title_of_page', get_title_of_page_mock_broken)
            p.start()
            update_linkbacks(4)
            url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
            linkback_entries = self.get_all_from_table("lnkENTRY")
            self.assertEqual("Google", url_titles[0][2])
            self.assertEqual(1, url_titles[0][4])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[0][5])
            self.assertEqual("", url_titles[1][2])
            self.assertEqual(1, url_titles[1][4])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[1][5])
            self.assertEqual("GoogleCOZA", url_titles[2][2])
            self.assertEqual(1, url_titles[2][4])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[3][5])
            self.assertEqual("Google DE", url_titles[3][2])
            self.assertEqual(4, url_titles[3][4])

            update_linkbacks(4)
            url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
            linkback_entries = self.get_all_from_table("lnkENTRY")
            self.assertEqual("Google", url_titles[0][2])
            self.assertEqual(2, url_titles[0][4])
            self.assertEqual(0, url_titles[0][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[0][5])
            self.assertEqual("", url_titles[1][2])
            self.assertEqual(2, url_titles[1][4])
            self.assertEqual(0, url_titles[1][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[1][5])
            self.assertEqual("GoogleCOZA", url_titles[2][2])
            self.assertEqual(2, url_titles[2][4])
            self.assertEqual(0, url_titles[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[3][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[3][2])
            self.assertEqual(5, url_titles[3][4])
            self.assertEqual(1, url_titles[3][5])

            update_linkbacks(4)
            url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
            linkback_entries = self.get_all_from_table("lnkENTRY")
            self.assertEqual("Google", url_titles[0][2])
            self.assertEqual(3, url_titles[0][4])
            self.assertEqual(0, url_titles[0][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[0][5])
            self.assertEqual("", url_titles[1][2])
            self.assertEqual(3, url_titles[1][4])
            self.assertEqual(0, url_titles[1][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[1][5])
            self.assertEqual("GoogleCOZA", url_titles[2][2])
            self.assertEqual(3, url_titles[2][4])
            self.assertEqual(0, url_titles[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[3][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[3][2])
            self.assertEqual(5, url_titles[3][4])
            self.assertEqual(1, url_titles[3][5])
            p.stop()

            p = patch('invenio.weblinkback.get_title_of_page', get_title_of_page_mock1)
            p.start()
            update_linkbacks(1)
            url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
            linkback_entries = self.get_all_from_table("lnkENTRY")
            self.assertEqual("Google", url_titles[0][2])
            self.assertEqual(3, url_titles[0][4])
            self.assertEqual(0, url_titles[0][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[0][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[1][2])
            self.assertEqual(0, url_titles[1][4])
            self.assertEqual(0, url_titles[1][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[1][5])
            self.assertEqual("GoogleCOZA", url_titles[2][2])
            self.assertEqual(3, url_titles[2][4])
            self.assertEqual(0, url_titles[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[3][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[3][2])
            self.assertEqual(5, url_titles[3][4])
            self.assertEqual(1, url_titles[3][5])

            approve_linkback(4 + self._max_id_lnkENTRY, self.user_info)

            update_linkbacks(3)
            url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
            linkback_entries = self.get_all_from_table("lnkENTRY")
            self.assertEqual(get_title_of_page_mock1(), url_titles[0][2])
            self.assertEqual(0, url_titles[0][4])
            self.assertEqual(0, url_titles[0][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[0][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[1][2])
            self.assertEqual(0, url_titles[1][4])
            self.assertEqual(0, url_titles[1][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[1][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[2][2])
            self.assertEqual(0, url_titles[2][4])
            self.assertEqual(0, url_titles[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['APPROVED'], linkback_entries[3][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[3][2])
            self.assertEqual(5, url_titles[3][4])
            self.assertEqual(1, url_titles[3][5])
            p.stop()

            p = patch('invenio.weblinkback.get_title_of_page', get_title_of_page_mock_broken)
            p.start()
            update_linkbacks(4)
            url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
            linkback_entries = self.get_all_from_table("lnkENTRY")
            self.assertEqual(get_title_of_page_mock1(), url_titles[0][2])
            self.assertEqual(1, url_titles[0][4])
            self.assertEqual(0, url_titles[0][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[0][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[1][2])
            self.assertEqual(1, url_titles[1][4])
            self.assertEqual(0, url_titles[1][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[1][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[2][2])
            self.assertEqual(1, url_titles[2][4])
            self.assertEqual(0, url_titles[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['APPROVED'], linkback_entries[3][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[3][2])
            self.assertEqual(5, url_titles[3][4])
            self.assertEqual(1, url_titles[3][5])

            reject_linkback(1 + self._max_id_lnkENTRY, self.user_info)
            reject_linkback(3 + self._max_id_lnkENTRY, self.user_info)

            update_linkbacks(4)
            url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
            linkback_entries = self.get_all_from_table("lnkENTRY")
            self.assertEqual(get_title_of_page_mock1(), url_titles[0][2])
            self.assertEqual(2, url_titles[0][4])
            self.assertEqual(0, url_titles[0][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['REJECTED'], linkback_entries[0][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[1][2])
            self.assertEqual(2, url_titles[1][4])
            self.assertEqual(0, url_titles[1][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[1][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[2][2])
            self.assertEqual(2, url_titles[2][4])
            self.assertEqual(0, url_titles[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['REJECTED'], linkback_entries[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['APPROVED'], linkback_entries[3][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[3][2])
            self.assertEqual(5, url_titles[3][4])
            self.assertEqual(1, url_titles[3][5])

            update_linkbacks(4)
            url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
            linkback_entries = self.get_all_from_table("lnkENTRY")
            self.assertEqual(get_title_of_page_mock1(), url_titles[0][2])
            self.assertEqual(3, url_titles[0][4])
            self.assertEqual(0, url_titles[0][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['REJECTED'], linkback_entries[0][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[1][2])
            self.assertEqual(3, url_titles[1][4])
            self.assertEqual(0, url_titles[1][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[1][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[2][2])
            self.assertEqual(3, url_titles[2][4])
            self.assertEqual(0, url_titles[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['REJECTED'], linkback_entries[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['APPROVED'], linkback_entries[3][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[3][2])
            self.assertEqual(5, url_titles[3][4])
            self.assertEqual(1, url_titles[3][5])

            update_linkbacks(4)
            url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
            linkback_entries = self.get_all_from_table("lnkENTRY")
            self.assertEqual(get_title_of_page_mock1(), url_titles[0][2])
            self.assertEqual(4, url_titles[0][4])
            self.assertEqual(0, url_titles[0][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['REJECTED'], linkback_entries[0][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[1][2])
            self.assertEqual(4, url_titles[1][4])
            self.assertEqual(0, url_titles[1][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['PENDING'], linkback_entries[1][5])
            self.assertEqual(get_title_of_page_mock1(), url_titles[2][2])
            self.assertEqual(4, url_titles[2][4])
            self.assertEqual(0, url_titles[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['REJECTED'], linkback_entries[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['APPROVED'], linkback_entries[3][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[3][2])
            self.assertEqual(5, url_titles[3][4])
            self.assertEqual(1, url_titles[3][5])

            update_linkbacks(4)
            url_titles = self.get_all_from_table("lnkENTRYURLTITLE")
            linkback_entries = self.get_all_from_table("lnkENTRY")
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[0][2])
            self.assertEqual(5, url_titles[0][4])
            self.assertEqual(1, url_titles[0][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], linkback_entries[0][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[1][2])
            self.assertEqual(5, url_titles[1][4])
            self.assertEqual(1, url_titles[1][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], linkback_entries[1][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[2][2])
            self.assertEqual(5, url_titles[2][4])
            self.assertEqual(1, url_titles[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], linkback_entries[2][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], linkback_entries[3][5])
            self.assertEqual(CFG_WEBLINKBACK_STATUS['BROKEN'], url_titles[3][2])
            self.assertEqual(5, url_titles[3][4])
            self.assertEqual(1, url_titles[3][5])
            p.stop()