예제 #1
0
def test_session_revise():
    doc = TestMergeableDoc()
    min_updated_at = now()
    session = Session()
    session.revise(doc)
    assert isinstance(doc.__revision__, Revision)
    assert doc.__revision__.session is session
    assert min_updated_at <= doc.__revision__.updated_at <= now()
    time.sleep(0.1)
    min_updated_at = now()
    session.revise(doc)
    assert min_updated_at <= doc.__revision__.updated_at <= now()
예제 #2
0
def test_session_revise():
    doc = TestMergeableDoc()
    min_updated_at = now()
    session = Session()
    session.revise(doc)
    assert isinstance(doc.__revision__, Revision)
    assert doc.__revision__.session is session
    assert min_updated_at <= doc.__revision__.updated_at <= now()
    time.sleep(0.1)
    min_updated_at = now()
    session.revise(doc)
    assert min_updated_at <= doc.__revision__.updated_at <= now()
예제 #3
0
def test_session_pull(revised):
    s1 = Session('s1')
    s2 = Session('s2')
    a = TestMergeableDoc(multi_text=['a', 'b', 'c'])
    if revised:
        s1.revise(a)
    b = s2.pull(a)
    assert b is not a
    assert b.__revision__.session is s2
    if revised:
        assert b.__revision__.updated_at == a.__revision__.updated_at
    assert b.multi_text == ['a', 'b', 'c']
    assert a.multi_text is not b.multi_text
    if revised:
        assert a.__revision__.session is s1
예제 #4
0
def test_session_pull(revised):
    s1 = Session('s1')
    s2 = Session('s2')
    a = TestMergeableDoc(multi_text=['a', 'b', 'c'])
    if revised:
        s1.revise(a)
    b = s2.pull(a)
    assert b is not a
    assert b.__revision__.session is s2
    if revised:
        assert b.__revision__.updated_at == a.__revision__.updated_at
    assert b.multi_text == ['a', 'b', 'c']
    assert a.multi_text is not b.multi_text
    if revised:
        assert a.__revision__.session is s1
예제 #5
0
def test_session_merge():
    #  s1  s2
    #  ------
    #  (1) a   b (2)
    #      | / |
    #  (3) c   b (4)
    #      | \ |
    #      |   d (5)
    #      | /
    #  (5) e
    s1 = Session('s1')
    a = TestMergeableDoc(
        attr='a',
        text='a',
        multi_text=['a', 'b', 'c'],
        unique_entities=[
            TestUniqueEntity(ident='a', value='s1-a'),
            TestUniqueEntity(ident='b', value='s1-b'),
            TestUniqueEntity(ident='c', value='s1-c')
        ],
        rev_entities=[
            TestRevisedEntity(ident='a', value='s1-a', rev=2),
            TestRevisedEntity(ident='b', value='s1-b', rev=2),
            TestRevisedEntity(ident='c', value='s1-c', rev=2)
        ],
        rev_entity=TestRevisedEntity(ident='a', value='s1', rev=1)
    )
    a_c = TestMergeableContentDoc(content='a')
    s1.revise(a)  # (1)
    s1.revise(a_c)
    wait()
    s2 = Session('s2')
    b = TestMergeableDoc(
        attr='b',
        text='b',
        multi_text=['d', 'e', 'f'],
        unique_entities=[
            TestUniqueEntity(ident='c', value='s2-c'),
            TestUniqueEntity(ident='d', value='s2-d'),
            TestUniqueEntity(ident='e', value='s2-e')
        ],
        rev_entities=[
            TestRevisedEntity(ident='b', value='s2-b', rev=1),
            TestRevisedEntity(ident='c', value='s2-c', rev=3),
            TestRevisedEntity(ident='d', value='s2-d', rev=2)
        ],
        rev_entity=TestRevisedEntity(ident='a', value='s2', rev=2)
    )
    b_c = TestMergeableContentDoc(content='b')
    s2.revise(b)  # (2)
    s2.revise(b_c)
    wait()
    c = s1.merge(b, a)  # (3)
    c_c = s1.merge(b_c, a_c)
    wait()
    assert c.__revision__.session is s1
    assert c.__revision__.updated_at > a.__revision__.updated_at
    assert c.__base_revisions__ == RevisionSet([a.__revision__, b.__revision__])
    print((c.attr, c.text, c_c.content))
    assert c.attr == c.text == c_c.content == 'b'
    assert list(c.multi_text) == ['a', 'b', 'c', 'd', 'e', 'f']
    assert ([entity.value for entity in c.unique_entities] ==
            ['s1-a', 's1-b', 's2-c', 's2-d', 's2-e'])
    assert ([(e.value, e.rev) for e in c.rev_entities] ==
            [('s1-a', 2), ('s1-b', 2), ('s2-c', 3), ('s2-d', 2)])
    assert c.rev_entity.rev == 2
    assert c.rev_entity.value == 's2'
    assert c.nullable is None
    c.nullable = TestUniqueEntity(ident='nullable', value='nullable')
    b.attr = b.text = b_c.content = 'd'
    b.multi_text.append('blah')
    b.unique_entities.append(TestUniqueEntity(ident='blah', value='s2-blah'))
    s2.revise(b)  # (4)
    s2.revise(b_c)
    wait()
    assert list(b.multi_text) == ['d', 'e', 'f', 'blah']
    assert ([entity.value for entity in b.unique_entities] ==
            ['s2-c', 's2-d', 's2-e', 's2-blah'])
    d = s2.merge(b, c)  # (5)
    d_c = s2.merge(b_c, c_c)
    wait()
    assert d.__revision__.session is s2
    assert d.__revision__.updated_at >= c.__revision__.updated_at
    assert d.__base_revisions__ == RevisionSet([b.__revision__, c.__revision__])
    assert d.attr == d.text == d_c.content == 'd'
    assert list(d.multi_text) == ['a', 'b', 'c', 'd', 'e', 'f', 'blah']
    assert ([entity.value for entity in d.unique_entities] ==
            ['s1-a', 's1-b', 's2-c', 's2-d', 's2-e', 's2-blah'])
    assert d.nullable is not None
    assert d.nullable.value == 'nullable'
    e = s1.merge(c, d)  # (5)
    e_c = s1.merge(c_c, d_c)
    wait()
    assert e.__revision__.session is s1
    assert e.__revision__.updated_at == d.__revision__.updated_at
    assert e.__base_revisions__ == d.__base_revisions__
    assert e.attr == e.text == e_c.content == 'd'
    assert list(e.multi_text) == ['a', 'b', 'c', 'd', 'e', 'f', 'blah']
    assert ([entity.value for entity in d.unique_entities] ==
            ['s1-a', 's1-b', 's2-c', 's2-d', 's2-e', 's2-blah'])
예제 #6
0
def test_session_pull_same_session():
    session = Session('s1')
    doc = TestMergeableDoc()
    session.revise(doc)
    assert session.pull(doc) is doc
예제 #7
0
def test_session_merge():
    #  s1  s2
    #  ------
    #  (1) a   b (2)
    #      | / |
    #  (3) c   b (4)
    #      | \ |
    #      |   d (5)
    #      | /
    #  (5) e
    s1 = Session('s1')
    a = TestMergeableDoc(attr='a',
                         text='a',
                         multi_text=['a', 'b', 'c'],
                         unique_entities=[
                             TestUniqueEntity(ident='a', value='s1-a'),
                             TestUniqueEntity(ident='b', value='s1-b'),
                             TestUniqueEntity(ident='c', value='s1-c')
                         ],
                         rev_entities=[
                             TestRevisedEntity(ident='a', value='s1-a', rev=2),
                             TestRevisedEntity(ident='b', value='s1-b', rev=2),
                             TestRevisedEntity(ident='c', value='s1-c', rev=2)
                         ],
                         rev_entity=TestRevisedEntity(ident='a',
                                                      value='s1',
                                                      rev=1))
    a_c = TestMergeableContentDoc(content='a')
    s1.revise(a)  # (1)
    s1.revise(a_c)
    wait()
    s2 = Session('s2')
    b = TestMergeableDoc(attr='b',
                         text='b',
                         multi_text=['d', 'e', 'f'],
                         unique_entities=[
                             TestUniqueEntity(ident='c', value='s2-c'),
                             TestUniqueEntity(ident='d', value='s2-d'),
                             TestUniqueEntity(ident='e', value='s2-e')
                         ],
                         rev_entities=[
                             TestRevisedEntity(ident='b', value='s2-b', rev=1),
                             TestRevisedEntity(ident='c', value='s2-c', rev=3),
                             TestRevisedEntity(ident='d', value='s2-d', rev=2)
                         ],
                         rev_entity=TestRevisedEntity(ident='a',
                                                      value='s2',
                                                      rev=2))
    b_c = TestMergeableContentDoc(content='b')
    s2.revise(b)  # (2)
    s2.revise(b_c)
    wait()
    c = s1.merge(b, a)  # (3)
    c_c = s1.merge(b_c, a_c)
    wait()
    assert c.__revision__.session is s1
    assert c.__revision__.updated_at > a.__revision__.updated_at
    assert c.__base_revisions__ == RevisionSet(
        [a.__revision__, b.__revision__])
    print((c.attr, c.text, c_c.content))
    assert c.attr == c.text == c_c.content == 'b'
    assert list(c.multi_text) == ['a', 'b', 'c', 'd', 'e', 'f']
    assert ([entity.value for entity in c.unique_entities
             ] == ['s1-a', 's1-b', 's2-c', 's2-d', 's2-e'])
    assert ([(e.value, e.rev) for e in c.rev_entities] == [('s1-a', 2),
                                                           ('s1-b', 2),
                                                           ('s2-c', 3),
                                                           ('s2-d', 2)])
    assert c.rev_entity.rev == 2
    assert c.rev_entity.value == 's2'
    assert c.nullable is None
    c.nullable = TestUniqueEntity(ident='nullable', value='nullable')
    b.attr = b.text = b_c.content = 'd'
    b.multi_text.append('blah')
    b.unique_entities.append(TestUniqueEntity(ident='blah', value='s2-blah'))
    s2.revise(b)  # (4)
    s2.revise(b_c)
    wait()
    assert list(b.multi_text) == ['d', 'e', 'f', 'blah']
    assert ([entity.value for entity in b.unique_entities
             ] == ['s2-c', 's2-d', 's2-e', 's2-blah'])
    d = s2.merge(b, c)  # (5)
    d_c = s2.merge(b_c, c_c)
    wait()
    assert d.__revision__.session is s2
    assert d.__revision__.updated_at >= c.__revision__.updated_at
    assert d.__base_revisions__ == RevisionSet(
        [b.__revision__, c.__revision__])
    assert d.attr == d.text == d_c.content == 'd'
    assert list(d.multi_text) == ['a', 'b', 'c', 'd', 'e', 'f', 'blah']
    assert ([entity.value for entity in d.unique_entities
             ] == ['s1-a', 's1-b', 's2-c', 's2-d', 's2-e', 's2-blah'])
    assert d.nullable is not None
    assert d.nullable.value == 'nullable'
    e = s1.merge(c, d)  # (5)
    e_c = s1.merge(c_c, d_c)
    wait()
    assert e.__revision__.session is s1
    assert e.__revision__.updated_at == d.__revision__.updated_at
    assert e.__base_revisions__ == d.__base_revisions__
    assert e.attr == e.text == e_c.content == 'd'
    assert list(e.multi_text) == ['a', 'b', 'c', 'd', 'e', 'f', 'blah']
    assert ([entity.value for entity in d.unique_entities
             ] == ['s1-a', 's1-b', 's2-c', 's2-d', 's2-e', 's2-blah'])
예제 #8
0
def test_session_pull_same_session():
    session = Session('s1')
    doc = TestMergeableDoc()
    session.revise(doc)
    assert session.pull(doc) is doc