~divmod-dev/divmod.org/quote-internal-schema-2770

« back to all changes in this revision

Viewing changes to Axiom/axiom/test/test_xatop.py

  • Committer: glyph
  • Date: 2005-07-28 22:09:16 UTC
  • Revision ID: svn-v4:866e43f7-fbfc-0310-8f2a-ec88d1da2979:trunk:2
move this repository to a more official-looking URL

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
from twisted.trial import unittest
 
3
 
 
4
from axiom import attributes, item, store, extime
 
5
 
 
6
class StoreTests(unittest.TestCase):
 
7
    def testCreation(self):
 
8
        dbdir = self.mktemp()
 
9
        s = store.Store(dbdir)
 
10
        s.close()
 
11
 
 
12
    def testReCreation(self):
 
13
        dbdir = self.mktemp()
 
14
        s = store.Store(dbdir)
 
15
        s.close()
 
16
        s = store.Store(dbdir)
 
17
        s.close()
 
18
 
 
19
class RevertException(Exception):
 
20
    pass
 
21
 
 
22
 
 
23
class TestItem(item.Item):
 
24
    schemaVersion = 1
 
25
    typeName = 'TestItem'
 
26
    foo = attributes.integer(indexed=True)
 
27
    bar = attributes.text()
 
28
    baz = attributes.timestamp()
 
29
    quux = attributes.reference()
 
30
 
 
31
 
 
32
class ItemTests(unittest.TestCase):
 
33
    def setUp(self):
 
34
        self.dbdir = self.mktemp()
 
35
        self.store = store.Store(self.dbdir)
 
36
 
 
37
    def tearDown(self):
 
38
        self.store.close()
 
39
 
 
40
    def testItemCreation(self):
 
41
        timeval = extime.Time.fromISO8601TimeAndDate('2004-10-05T10:12:14.1234')
 
42
 
 
43
        s = TestItem(
 
44
            foo = 42,
 
45
            bar = u'hello world',
 
46
            baz = timeval
 
47
            )
 
48
 
 
49
        s.store = self.store
 
50
        sid = s.storeID
 
51
        self.store.close()
 
52
        self.store = store.Store(self.dbdir)
 
53
        s2 = self.store.getItemByID(sid)
 
54
        self.assertEquals(s2.foo, s.foo)
 
55
 
 
56
    def testBasicQuery(self):
 
57
        def tt():
 
58
            # !@#$ 3x+ speedup over not doing this in a transact()
 
59
            created = [TestItem(foo=x, bar=u"string-value-of-"+str(x))
 
60
                       for x in range(20)]
 
61
            for c in created:
 
62
                c.store = self.store
 
63
 
 
64
        self.store.transact(tt)
 
65
 
 
66
        loaded = self.store.query(TestItem,
 
67
                                  TestItem.foo >= 10)
 
68
 
 
69
        self.assertEquals(len(list(loaded)), 10)
 
70
 
 
71
    def testInMemoryRevert(self):
 
72
        item1 = TestItem(
 
73
            store=self.store,
 
74
            foo=24,
 
75
            bar=u'Zoom',
 
76
            baz=extime.Time.fromISO8601TimeAndDate('2004-10-05T10:12:14.1234')
 
77
            )
 
78
 
 
79
        def brokenFunction():
 
80
            item2 = TestItem(
 
81
                store=self.store,
 
82
                foo=42,
 
83
                bar=u'mooZ',
 
84
                baz=extime.Time.fromISO8601TimeAndDate('1970-03-12T05:05:11.5921')
 
85
                )
 
86
 
 
87
            item1.foo = 823
 
88
            item1.bar = u'this is the wrong answer'
 
89
            item1.baz = extime.Time()
 
90
 
 
91
            raise RevertException(item2.storeID)
 
92
 
 
93
        try:
 
94
            self.store.transact(brokenFunction)
 
95
        except RevertException, exc:
 
96
            [storeID] = exc.args
 
97
 
 
98
            self.assertRaises(KeyError, self.store.getItemByID, storeID)
 
99
            self.assertEquals(item1.foo, 24)
 
100
            self.assertEquals(item1.bar, u'Zoom')
 
101
            self.assertEquals(item1.baz.asISO8601TimeAndDate(), '2004-10-05T10:12:14.1234+00:00')
 
102
        else:
 
103
            self.fail("Transaction should have raised an exception")
 
104