clean up
[ruby-couchdb.git] / test.rb
blob2e0024191ca1d6a4fa53166e6b0ccd0cbb78efc0
1 require 'rubygems'
2 require 'ruby-debug'
3 require 'test/unit'
4 require 'net/http'
5 require File.dirname(__FILE__) + '/couchdb'
6 Debugger.start
8 class DatabaseTest < Test::Unit::TestCase
9   include CouchDB
10   def setup
11     connection = Net::HTTP.new('localhost', '5984')
12     connection.request Net::HTTP::Put.new('/test1')
13     connection.request Net::HTTP::Delete.new('/test2')
14   end
15   
16   def test_exists?
17     assert Database.new('test1').exists?
18     assert !Database.new('test2').exists?
19   end
20   
21   def test_create
22     db = Database.new('test2')
23     db.create!
24     assert db.exists?
25   end
26 end
28 class DocumentTest < Test::Unit::TestCase
29   include CouchDB
30   def setup
31     @db = Database.new('test1')
32     connection = Net::HTTP.new('localhost', '5984')
33     connection.request Net::HTTP::Delete.new('/test1/something')
34   end
35   
36   def test_save
37     doc = Document.new('hello' => 'world')
38     assert @db.save(doc)
39     assert doc.id
40     assert doc.revision
41     assert doc.database 
42     doc.reload   
44     assert_equal 1, doc.attributes.size
45     doc['something'] = 'else'
46     doc['hello'] = 'blah!'
47     assert doc.save
48     assert doc.revision
49     doc.reload
50     assert_equal 'else', doc['something']
51     assert_equal 'blah!', doc['hello']
52     assert_equal 2, doc.attributes.size
53   end
54   
55   def test_bulk_update
56     docs = [
57       Document.new('a' => 1),
58       Document.new('b' => 2),
59       Document.new('c' => 3)
60     ]
61     
62     assert @db.save(docs)
63     
64     docs.each { |doc| doc.reload }
65     
66     assert_equal 1, docs[0]['a']
67     assert_equal 2, docs[1]['b']
68     assert_equal 3, docs[2]['c']
69     
70     docs[0]['a'] = 11
71     docs[1]['b'] = 22
72     docs[2]['c'] = 33
73     
74     assert @db.save(docs)
75     
76     docs.each { |doc| doc.reload }
77     assert_equal 11, docs[0]['a']
78     assert_equal 22, docs[1]['b']
79     assert_equal 33, docs[2]['c']
80     
81   end
82 end
84 class ViewTest < Test::Unit::TestCase
85   include CouchDB
86   def setup
87     connection = Net::HTTP.new('localhost', '5984')
88     connection.request Net::HTTP::Delete.new('/test1')
89     @db = Database.new('test1')
90     @db.create!
91   end
92   
93   def test_view_creation
94     assert view = @db.view('overview', 'view1')
95     source = "function (doc) { map(doc._id, doc); }"
96     view.source = source
97     assert view.save
98     
99     overview = @db.retrieve('_design/overview')
100     assert_equal overview['views']['view1'], source
101     
102     view2 = @db.view('overview', 'view1')
103     assert_equal view.source, view2.source
104     
105     assert @db.save([
106       Document.new('a' => 1),
107       Document.new('b' => 2),
108       Document.new('c' => 3)
109     ])
111     view = @db.view('overview', 'view1')
112     
113     docs = view.find
114     assert_equal 3, docs.length
115     docs.each do |d|
116       # ugly
117       assert_equal 1, d['a'] if d['a']
118       assert_equal 2, d['b'] if d['b']
119       assert_equal 3, d['c'] if d['c']
120     end
121   
122     docs2 = view.find(:key => docs.first.id)
123     assert_equal 1, docs2.length
124   end