src/cm/tests/test_comment_positioning.py
author Production Moz <dev@sopinspace.com>
Tue, 15 May 2012 14:15:34 +0200
changeset 435 96c16cc6408b
parent 301 6e8fb4869d50
child 606 52f3e090eed9
permissions -rw-r--r--
Fixed comments filter by name when name is empty
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
from django.test import TestCase
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
from BeautifulSoup import BeautifulSoup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
from cm.models import *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
# python manage.py test 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
# python manage.py test cm.CommentPositioningTest
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
def create_comment(start_wrapper=0, end_wrapper=0, start_offset=0, end_offset=0, reply_to=None, user=None, state='pending'):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
    version = Text.objects.all()[0].get_latest_version()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
    co = Comment.objects.create(text_version=version,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
                           title="tt",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
                           content="tt",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
                           start_wrapper=start_wrapper,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
                           end_wrapper=end_wrapper,                                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
                           start_offset=start_offset,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
                           end_offset=end_offset,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
                           reply_to=reply_to,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
                           state=state,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
                           user=user)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
    return co
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
class CommentPositioningTest(TestCase):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
    def assert_comment(self, old_comment_id, start_wrapper, end_wrapper, start_offset, end_offset):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
        comment = Comment.objects.get(id=old_comment_id)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        #print comment.start_wrapper, comment.end_wrapper, comment.start_offset, comment.end_offset  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        #print start_wrapper, end_wrapper, start_offset, end_offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        self.assertEqual(comment.start_wrapper, start_wrapper)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        self.assertEqual(comment.end_wrapper, end_wrapper)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        self.assertEqual(comment.start_offset, start_offset)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        self.assertEqual(comment.end_offset, end_offset)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    def preserve_comment_pos(self, content, new_content, comment_pos_list):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        text = Text.objects.create_text("text", "html", content, "", "", "", None)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        version = Text.objects.all()[0].get_latest_version()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
        res = {}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        for old, new  in comment_pos_list:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
            x, y, z, k = old 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
            comment = create_comment(x, y, z, k)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
            res[comment.id] = new  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        
103
61fd17f9ab78 enh: detached comments
rbernard
parents: 0
diff changeset
    48
        version.edit("text", "html", new_content, keep_comments = True, cancel_modified_scopes=False)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        for id, new in res.items():
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
            if not new:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
                self.assertFalse(Comment.objects.filter(id=id))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
            else:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
                x, y , z, k = new
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
                self.assert_comment(id, x, y, z, k) 
301
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    56
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    57
    def test_remove_comment(self):
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    58
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    59
        new_content = u"""<html><body>This is a <b>te</b>e<b>est</b> text</body></html>"""
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    60
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    61
        text = Text.objects.create_text("text", "html", content, "", "", "", None)
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    62
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    63
        comment1 = create_comment(2, 2, 2, 4)
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    64
        comment2 = create_comment(2, 2, 2, 4)
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    65
        
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    66
        version = Text.objects.all()[0].get_latest_version()
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    67
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    68
        self.assertEqual(len(version.get_comments()), 2)
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    69
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    70
        version.edit("text", "html", new_content, keep_comments = False, cancel_modified_scopes=False)
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    71
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    72
        self.assertEqual(len(version.get_comments()), 0)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
    def test_wrapper_shifted(self):
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    75
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    76
        new_content = u"""<html><body>This is a <b>te</b>e<b>est</b> text</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
        self.preserve_comment_pos(content, new_content, [([2,2,2,4],[4,4,2,4]),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
    def test_comment_removed(self):
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    80
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    81
        new_content = u"""<html><body>This is a <b>test</b> txt</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
        self.preserve_comment_pos(content, new_content, [([2,2,2,4],None),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
    def test_offset_shifted(self):
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    85
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    86
        new_content = u"""<html><body>a <b>teXXXst</b>a text</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
        self.preserve_comment_pos(content, new_content, [([2,2,2,4],[2,2,3,5]),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
    def test_insert_wrapper(self):
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    90
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    91
        new_content = u"""<html><body>This is a <b>test</b> te<b>x</b>t</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
        self.preserve_comment_pos(content, new_content, [([2,2,2,5],[2,4,2,1]),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
    def test_multiwrapper(self):
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    95
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    96
        new_content = u"""<html><body>This is a <b>testXXX<b>X</b>XXXXXXX</b>X text</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
        self.preserve_comment_pos(content, new_content, [([0,2,2,4],None),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    99
    def test_insert_wrapper2(self):
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
   100
        content     = u"""<html><body>aa<b>test</b>bb</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
   101
        new_content = u"""<html><body>aXa<b>test</b>bXb</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
        self.preserve_comment_pos(content, new_content, [([0,2,1,1],[0,2,2,1]),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103