Skip to content

Commit 94436b0

Browse files
committed
Change other unittests to use improved TempDatabaseMixin.
1 parent 60c1a07 commit 94436b0

File tree

4 files changed

+81
-139
lines changed

4 files changed

+81
-139
lines changed

couchdb/tests/client.py

Lines changed: 27 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -15,56 +15,13 @@
1515
import tempfile
1616
import threading
1717
import unittest
18-
import uuid
1918

2019
from couchdb import client, http
20+
from couchdb.tests import testutil
2121
http.CACHE_SIZE = 2, 3
2222

2323

24-
class TempDatabaseMixin(object):
25-
26-
temp_dbs = None
27-
_db = None
28-
29-
def setUp(self):
30-
uri = os.environ.get('COUCHDB_URI', client.DEFAULT_BASE_URL)
31-
self.server = client.Server(uri, full_commit=False)
32-
33-
def tearDown(self):
34-
if self.temp_dbs:
35-
for name in self.temp_dbs:
36-
self.server.delete(name)
37-
38-
def temp_db(self):
39-
if self.temp_dbs is None:
40-
self.temp_dbs = {}
41-
name = 'couchdb-python/' + uuid.uuid4().hex
42-
db = self.server.create(name)
43-
self.temp_dbs[name] = db
44-
return name, db
45-
46-
@property
47-
def db(self):
48-
if self._db is None:
49-
name, self._db = self.temp_db()
50-
return self._db
51-
52-
53-
class ServerTestCase(unittest.TestCase):
54-
55-
def setUp(self):
56-
uri = os.environ.get('COUCHDB_URI', client.DEFAULT_BASE_URL)
57-
self.server = client.Server(uri, full_commit=False)
58-
59-
def tearDown(self):
60-
try:
61-
self.server.delete('python-tests')
62-
except http.ResourceNotFound:
63-
pass
64-
try:
65-
self.server.delete('python-tests-a')
66-
except http.ResourceNotFound:
67-
pass
24+
class ServerTestCase(testutil.TempDatabaseMixin, unittest.TestCase):
6825

6926
def test_init_with_resource(self):
7027
sess = http.Session()
@@ -97,57 +54,57 @@ def test_server_vars(self):
9754

9855
def test_get_db_missing(self):
9956
self.assertRaises(http.ResourceNotFound,
100-
lambda: self.server['python-tests'])
57+
lambda: self.server['couchdb-python/missing'])
10158

10259
def test_create_db_conflict(self):
103-
self.server.create('python-tests')
60+
name, db = self.temp_db()
10461
self.assertRaises(http.PreconditionFailed, self.server.create,
105-
'python-tests')
62+
name)
10663

10764
def test_delete_db(self):
108-
self.server.create('python-tests')
109-
assert 'python-tests' in self.server
110-
self.server.delete('python-tests')
111-
assert 'python-tests' not in self.server
65+
name, db = self.temp_db()
66+
assert name in self.server
67+
self.del_db(name)
68+
assert name not in self.server
11269

11370
def test_delete_db_missing(self):
11471
self.assertRaises(http.ResourceNotFound, self.server.delete,
115-
'python-tests')
72+
'couchdb-python/missing')
11673

11774
def test_replicate(self):
118-
a = self.server.create('python-tests')
75+
aname, a = self.temp_db()
76+
bname, b = self.temp_db()
11977
id, rev = a.save({'test': 'a'})
120-
b = self.server.create('python-tests-a')
121-
result = self.server.replicate('python-tests', 'python-tests-a')
78+
result = self.server.replicate(aname, bname)
12279
self.assertEquals(result['ok'], True)
12380
self.assertEquals(b[id]['test'], 'a')
12481

12582
doc = b[id]
12683
doc['test'] = 'b'
12784
b.update([doc])
128-
self.server.replicate(client.DEFAULT_BASE_URL + 'python-tests-a',
129-
'python-tests')
85+
self.server.replicate(bname, aname)
86+
self.assertEquals(a[id]['test'], 'b')
13087
self.assertEquals(b[id]['test'], 'b')
13188

13289
def test_replicate_continuous(self):
133-
self.server.create('python-tests')
134-
self.server.create('python-tests-a')
135-
result = self.server.replicate('python-tests', 'python-tests-a', continuous=True)
90+
aname, a = self.temp_db()
91+
bname, b = self.temp_db()
92+
result = self.server.replicate(aname, bname, continuous=True)
13693
self.assertEquals(result['ok'], True)
13794
version = tuple(int(i) for i in self.server.version().split('.')[:2])
13895
if version >= (0, 10):
13996
self.assertTrue('_local_id' in result)
14097

14198
def test_iter(self):
142-
self.server.create('python-tests')
143-
self.server.create('python-tests-a')
99+
aname, a = self.temp_db()
100+
bname, b = self.temp_db()
144101
dbs = list(self.server)
145-
self.assertTrue('python-tests' in dbs)
146-
self.assertTrue('python-tests-a' in dbs)
102+
self.assertTrue(aname in dbs)
103+
self.assertTrue(bname in dbs)
147104

148105
def test_len(self):
149-
self.server.create('python-tests')
150-
self.server.create('python-tests-a')
106+
self.temp_db()
107+
self.temp_db()
151108
self.assertTrue(len(self.server) >= 2)
152109

153110
def test_uuids(self):
@@ -157,7 +114,7 @@ def test_uuids(self):
157114
assert type(ls) == list and len(ls) == 10
158115

159116

160-
class DatabaseTestCase(TempDatabaseMixin, unittest.TestCase):
117+
class DatabaseTestCase(testutil.TempDatabaseMixin, unittest.TestCase):
161118

162119
def test_save_new(self):
163120
doc = {'foo': 'bar'}
@@ -198,7 +155,7 @@ def test_save_existing_batch(self):
198155

199156
def test_exists(self):
200157
self.assertTrue(self.db)
201-
self.assertFalse(client.Database('couchdb-python-tests/missing'))
158+
self.assertFalse(client.Database('couchdb-python/missing'))
202159

203160
def test_name(self):
204161
# Access name assigned during creation.
@@ -512,7 +469,7 @@ def wakeup():
512469
break
513470

514471

515-
class ViewTestCase(TempDatabaseMixin, unittest.TestCase):
472+
class ViewTestCase(testutil.TempDatabaseMixin, unittest.TestCase):
516473

517474
def test_view_multi_get(self):
518475
for i in range(1, 6):

couchdb/tests/couch_tests.py

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,13 @@
77
# This software is licensed as described in the file COPYING, which
88
# you should have received as part of this distribution.
99

10-
import os
1110
import unittest
1211

13-
from couchdb.client import Server
1412
from couchdb.http import ResourceConflict, ResourceNotFound
13+
from couchdb.tests import testutil
1514

1615

17-
class CouchTests(unittest.TestCase):
18-
19-
def setUp(self):
20-
uri = os.environ.get('COUCHDB_URI', 'http://localhost:5984/')
21-
self.server = Server(uri, full_commit=False)
22-
try:
23-
self.server.delete('python-tests')
24-
except ResourceNotFound:
25-
pass
26-
self.db = self.server.create('python-tests')
27-
28-
def tearDown(self):
29-
try:
30-
self.server.delete('python-tests')
31-
except ResourceNotFound:
32-
pass
16+
class CouchTests(testutil.TempDatabaseMixin, unittest.TestCase):
3317

3418
def _create_test_docs(self, num):
3519
for i in range(num):

couchdb/tests/mapping.py

Lines changed: 9 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,12 @@
88

99
from decimal import Decimal
1010
import doctest
11-
import os
1211
import unittest
1312

14-
from couchdb import client, design, mapping
15-
from couchdb.http import ResourceNotFound
13+
from couchdb import design, mapping
14+
from couchdb.tests import testutil
1615

17-
class DocumentTestCase(unittest.TestCase):
18-
19-
def setUp(self):
20-
uri = os.environ.get('COUCHDB_URI', 'http://localhost:5984/')
21-
self.server = client.Server(uri, full_commit=False)
22-
try:
23-
self.server.delete('python-tests')
24-
except ResourceNotFound:
25-
pass
26-
self.db = self.server.create('python-tests')
27-
28-
def tearDown(self):
29-
try:
30-
self.server.delete('python-tests')
31-
except ResourceNotFound:
32-
pass
16+
class DocumentTestCase(testutil.TempDatabaseMixin, unittest.TestCase):
3317

3418
def test_mutable_fields(self):
3519
class Test(mapping.Document):
@@ -97,22 +81,7 @@ class Post(mapping.Document):
9781
self.assertEqual(len(list(self.db.view('_all_docs'))), 1)
9882

9983

100-
class ListFieldTestCase(unittest.TestCase):
101-
102-
def setUp(self):
103-
uri = os.environ.get('COUCHDB_URI', 'http://localhost:5984/')
104-
self.server = client.Server(uri, full_commit=False)
105-
try:
106-
self.server.delete('python-tests')
107-
except ResourceNotFound:
108-
pass
109-
self.db = self.server.create('python-tests')
110-
111-
def tearDown(self):
112-
try:
113-
self.server.delete('python-tests')
114-
except client.ResourceNotFound:
115-
pass
84+
class ListFieldTestCase(testutil.TempDatabaseMixin, unittest.TestCase):
11685

11786
def test_to_json(self):
11887
# See <http://code.google.com/p/couchdb-python/issues/detail?id=14>
@@ -237,29 +206,18 @@ class Thing(mapping.Document):
237206
all_map_func = 'function(doc) { emit(doc._id, doc); }'
238207

239208

240-
class WrappingTestCase(unittest.TestCase):
209+
class WrappingTestCase(testutil.TempDatabaseMixin, unittest.TestCase):
241210

242211
class Item(mapping.Document):
243212
with_include_docs = mapping.ViewField('test', all_map_func,
244213
include_docs=True)
245214
without_include_docs = mapping.ViewField('test', all_map_func)
246215

247216
def setUp(self):
248-
uri = os.environ.get('COUCHDB_URI', 'http://localhost:5984/')
249-
self.server = client.Server(uri, full_commit=False)
250-
try:
251-
self.server.delete('python-tests')
252-
except ResourceNotFound:
253-
pass
254-
self.db = self.server.create('python-tests')
255-
design.ViewDefinition.sync_many(self.db, [self.Item.with_include_docs,
256-
self.Item.without_include_docs])
257-
258-
def tearDown(self):
259-
try:
260-
self.server.delete('python-tests')
261-
except client.ResourceNotFound:
262-
pass
217+
super(WrappingTestCase, self).setUp()
218+
design.ViewDefinition.sync_many(
219+
self.db, [self.Item.with_include_docs,
220+
self.Item.without_include_docs])
263221

264222
def test_viewfield_property(self):
265223
self.Item().store(self.db)

couchdb/tests/testutil.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# -*- coding: utf-8 -*-
2+
#
3+
# Copyright (C) 2007-2009 Christopher Lenz
4+
# All rights reserved.
5+
#
6+
# This software is licensed as described in the file COPYING, which
7+
# you should have received as part of this distribution.
8+
9+
import os
10+
import uuid
11+
from couchdb import client
12+
13+
class TempDatabaseMixin(object):
14+
15+
temp_dbs = None
16+
_db = None
17+
18+
def setUp(self):
19+
uri = os.environ.get('COUCHDB_URI', client.DEFAULT_BASE_URL)
20+
self.server = client.Server(uri, full_commit=False)
21+
22+
def tearDown(self):
23+
if self.temp_dbs:
24+
for name in self.temp_dbs:
25+
self.server.delete(name)
26+
27+
def temp_db(self):
28+
if self.temp_dbs is None:
29+
self.temp_dbs = {}
30+
name = 'couchdb-python/' + uuid.uuid4().hex
31+
db = self.server.create(name)
32+
self.temp_dbs[name] = db
33+
return name, db
34+
35+
def del_db(self, name):
36+
del self.temp_dbs[name]
37+
self.server.delete(name)
38+
39+
@property
40+
def db(self):
41+
if self._db is None:
42+
name, self._db = self.temp_db()
43+
return self._db

0 commit comments

Comments
 (0)