minidoc 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,183 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class PersistenceTest < Minidoc::TestCase
4
+ def test_ids
5
+ user = User.new
6
+ assert_equal BSON::ObjectId, user.id.class
7
+
8
+ user = User.new(_id: BSON::ObjectId('52955cc5f9f6a538a9000001'))
9
+ assert_equal BSON::ObjectId('52955cc5f9f6a538a9000001'), user.id
10
+
11
+ user = User.new("_id" => BSON::ObjectId('52955cc5f9f6a538a9000001'))
12
+ assert_equal BSON::ObjectId('52955cc5f9f6a538a9000001'), user.id
13
+ end
14
+
15
+ def test_new_record
16
+ user = User.new
17
+ assert_equal true, user.new_record?
18
+ user.save
19
+ assert_equal false, user.new_record?
20
+ end
21
+
22
+ def test_raises_duplicate_key_where_appropriate
23
+ mock_collection = mock()
24
+ User.stubs(:collection).returns(mock_collection)
25
+ mock_collection.stubs(:<<).raises(Mongo::OperationFailure.new('Duplicate key exception', Minidoc::DuplicateKey::DUPLICATE_KEY_ERROR_CODE))
26
+
27
+ user = User.new
28
+ assert_raises(Minidoc::DuplicateKey) { user.save }
29
+ end
30
+
31
+ def test_reraises_other_exception_types
32
+ mock_collection = mock()
33
+ User.stubs(:collection).returns(mock_collection)
34
+ mock_collection.stubs(:<<).raises(ArgumentError)
35
+
36
+ user = User.new
37
+ assert_raises(ArgumentError) { user.save }
38
+ end
39
+
40
+ def test_persisted
41
+ user = User.new
42
+ assert_equal false, user.persisted?
43
+ user.save
44
+ assert_equal true, user.persisted?
45
+ user.destroy
46
+ assert_equal false, user.persisted?
47
+ end
48
+
49
+ def test_save
50
+ user = User.new
51
+ old_id = user.id
52
+ assert_equal true, user.save
53
+ assert_equal 1, User.count
54
+ assert_equal old_id, user.id
55
+ end
56
+
57
+ def test_create
58
+ user = User.create!(name: "Bryan")
59
+ assert_equal "Bryan", user.name
60
+ assert_equal 1, User.count
61
+
62
+ user = User.create(name: "Bryan")
63
+ assert_equal "Bryan", user.name
64
+ assert_equal 2, User.count
65
+ end
66
+
67
+ def test_update
68
+ user = User.create(name: "Bryan")
69
+ user.name = "Noah"
70
+ assert_equal "Noah", user.name
71
+ user.save
72
+ assert_equal "Noah", user.reload.name
73
+ end
74
+
75
+ def test_destroy
76
+ user = User.create(name: "Bryan")
77
+ assert_equal false, user.destroyed?
78
+ user.destroy
79
+ assert_equal 0, User.count
80
+ assert_equal true, user.destroyed?
81
+ end
82
+
83
+ def test_delete
84
+ user = User.create(name: "Bryan")
85
+ User.delete(user.id)
86
+ assert_equal 0, User.count
87
+
88
+ user = User.create(name: "Bryan")
89
+ User.delete(user.id.to_s)
90
+ assert_equal 0, User.count
91
+
92
+ user = User.create(name: "Bryan")
93
+ user.delete
94
+ assert_equal 0, User.count
95
+ end
96
+
97
+ def test_reload
98
+ user = User.create(name: "Bryan")
99
+ assert_equal "Bryan", user.reload.name
100
+
101
+ User.collection.update({_id: user.id}, {name: "Noah"})
102
+ assert_equal "Noah", user.reload.name
103
+ end
104
+
105
+ def test_class_set
106
+ user = User.create(name: "Bryan")
107
+ User.set(user.id, name: "Noah")
108
+ assert_equal "Bryan", user.name # Class set can't trigger update
109
+ assert_equal "Noah", user.reload.name
110
+ assert_equal "Noah", User.first.name
111
+
112
+ User.set(user.id.to_s, name: "Mike")
113
+ assert_equal "Mike", user.reload.name
114
+ assert_equal "Mike", User.first.name
115
+ end
116
+
117
+ def test_instance_set
118
+ user = User.create(name: "Bryan")
119
+ user.set(name: "Noah")
120
+ assert_equal "Noah", user.name
121
+ assert_equal "Noah", user.reload.name
122
+ assert_equal "Noah", User.first.name
123
+
124
+ user = User.create(name: "Bryan")
125
+ user.set("name" => "Noah")
126
+ assert_equal "Noah", user.name
127
+ assert_equal "Noah", user.reload.name
128
+ end
129
+
130
+ def test_class_unset
131
+ user = User.create(name: "Bryan")
132
+ User.unset(user.id, :name)
133
+ assert_equal "Bryan", user.name # Class set can't trigger update
134
+ assert_equal nil, user.reload.name
135
+ assert_equal nil, User.first.name
136
+
137
+ User.unset(user.id.to_s, :name)
138
+ assert_equal nil, user.reload.name
139
+ assert_equal nil, User.first.name
140
+ end
141
+
142
+ def test_instance_unset
143
+ user = User.create(name: "Bryan")
144
+ user.unset(:name)
145
+ assert_equal nil, user.name
146
+ assert_equal nil, user.reload.name
147
+ assert_equal nil, User.first.name
148
+
149
+ user = User.create(name: "Bryan")
150
+ user.unset("name")
151
+ assert_equal nil, user.name
152
+ assert_equal nil, user.reload.name
153
+ end
154
+
155
+ def test_atomic_set_failure
156
+ user = User.create(name: "from", age: 18)
157
+
158
+ refute user.atomic_set({ name: "not-from" }, name: "to")
159
+ assert_equal "from", user.name
160
+ assert_equal 18, user.age
161
+
162
+ user.reload
163
+ assert_equal "from", user.name
164
+ assert_equal 18, user.age
165
+ end
166
+
167
+ def test_atomic_set_success
168
+ user = User.create(name: "from", age: 18)
169
+ other_user = User.create(name: "from", age: 21)
170
+
171
+ assert user.atomic_set({ name: "from" }, name: "to")
172
+ assert_equal "to", user.name
173
+ assert_equal 18, user.age
174
+
175
+ user.reload
176
+ assert_equal "to", user.name
177
+ assert_equal 18, user.age
178
+
179
+ other_user.reload
180
+ assert_equal "from", other_user.name
181
+ assert_equal 21, other_user.age
182
+ end
183
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class QueryTest < Minidoc::TestCase
4
+ def test_count_all
5
+ User.collection << { name: "Joe" }
6
+ User.collection << { name: "Bryan" }
7
+ assert_equal 2, User.count
8
+ end
9
+
10
+ def test_count_query
11
+ User.collection << { name: "Joe" }
12
+ User.collection << { name: "Bryan" }
13
+ assert_equal 1, User.count(name: "Bryan")
14
+ end
15
+
16
+ def test_exists
17
+ User.collection << { name: "Joe" }
18
+ assert User.exists?(name: "Joe")
19
+ refute User.exists?(name: "Bryan")
20
+ end
21
+
22
+ def test_first
23
+ assert_equal nil, User.first
24
+ user = User.create(name: "Bryan")
25
+ assert_equal "Bryan", User.first.name
26
+ assert_equal user, User.first
27
+ end
28
+
29
+ def test_find
30
+ user = User.create(name: "Bryan")
31
+ assert_equal [user], User.find({}).to_a
32
+ assert_equal [], User.find(name: "Noah").to_a
33
+ end
34
+
35
+ def test_find_one
36
+ user = User.create(name: "Bryan")
37
+ assert_equal user, User.find_one({})
38
+ assert_equal nil, User.find_one(name: "Noah")
39
+ end
40
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class ReadOnlyTest < Minidoc::TestCase
4
+ class ReadOnlyUser < Minidoc::ReadOnly
5
+ self.collection_name = "users"
6
+ attribute :name, String
7
+ end
8
+
9
+ def test_read_only
10
+ assert_raises NoMethodError do
11
+ ReadOnlyUser.create(name: "Bryan")
12
+ end
13
+
14
+ rw_user = User.create(name: "Bryan")
15
+ user = ReadOnlyUser.first
16
+ assert_equal "Bryan", user.name
17
+ assert_equal rw_user.id, user.id
18
+ assert_equal user, user.as_value
19
+
20
+ assert_raises NoMethodError do
21
+ user.name = "Noah"
22
+ end
23
+ end
24
+
25
+ def test_value
26
+ user = User.new(name: "Bryan")
27
+ user.name = "Noah"
28
+ user = user.as_value
29
+
30
+ assert_raises NoMethodError do
31
+ user.name = "Noah"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class TimestampsTest < Minidoc::TestCase
4
+ class User < ::User
5
+ include Minidoc::Timestamps
6
+ timestamps!
7
+ end
8
+
9
+ def test_create
10
+ user = User.create
11
+ assert user.created_at
12
+ assert_equal user.created_at, user.updated_at
13
+ end
14
+
15
+ def test_update
16
+ user = User.create
17
+ sleep 0.001
18
+ user.save
19
+ refute_equal user.created_at, user.updated_at
20
+ end
21
+ end
@@ -0,0 +1,68 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class UniquenessValidatorTest < Minidoc::TestCase
4
+ class User < ::User
5
+ validates :name, uniqueness: true
6
+ end
7
+
8
+ class InsensitiveUser < ::User
9
+ attribute :insensitive, String
10
+ validates :insensitive, uniqueness: { case_sensitive: false }
11
+ end
12
+
13
+ class ScopedUser < ::User
14
+ attribute :country_id, Integer
15
+ attribute :tax_id_number, Integer
16
+ validates :tax_id_number, uniqueness: { scope: :country_id }
17
+ end
18
+
19
+ def test_invalid_with_existing_value
20
+ User.create!(name: "same name")
21
+ user = User.new(name: "same name")
22
+ assert_equal false, user.valid?
23
+ assert_equal ["has already been taken"], user.errors[:name]
24
+ end
25
+
26
+ def test_case_sensitive_by_default
27
+ User.create!(name: "different case")
28
+ user = User.new(name: "DIFFERENT CASE")
29
+ assert_equal true, user.valid?
30
+ end
31
+
32
+ def test_unique_persisted_record_is_valid
33
+ user = User.create!(name: "lonely")
34
+ assert_equal true, user.valid?
35
+ end
36
+
37
+ def test_case_insensitive
38
+ InsensitiveUser.create!(insensitive: "equivalent")
39
+ user = InsensitiveUser.new(insensitive: "EquivALENT")
40
+ assert_equal false, user.valid?
41
+ assert_equal ["has already been taken"], user.errors[:insensitive]
42
+ end
43
+
44
+ def test_same_value_within_scope
45
+ ScopedUser.create!(country_id: 1, tax_id_number: 1)
46
+ user = ScopedUser.new(country_id: 1, tax_id_number: 1)
47
+ assert_equal false, user.valid?
48
+ assert_equal ["has already been taken"], user.errors[:tax_id_number]
49
+ end
50
+
51
+ def test_different_value_within_scope
52
+ ScopedUser.create!(country_id: 1, tax_id_number: 1)
53
+ user = ScopedUser.new(country_id: 1, tax_id_number: 2)
54
+ assert_equal true, user.valid?
55
+ end
56
+
57
+ def test_same_value_outside_scope
58
+ ScopedUser.create!(country_id: 1, tax_id_number: 1)
59
+ user = ScopedUser.new(country_id: 2, tax_id_number: 1)
60
+ assert_equal true, user.valid?
61
+ end
62
+
63
+ def test_same_value_outside_scope
64
+ ScopedUser.create!(country_id: 1, tax_id_number: 1)
65
+ user = ScopedUser.new(country_id: 2, tax_id_number: 2)
66
+ assert_equal true, user.valid?
67
+ end
68
+ end
@@ -0,0 +1,36 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class ValidationsTest < Minidoc::TestCase
4
+ class User < ::User
5
+ validates :name, presence: true
6
+ end
7
+
8
+ def test_valid
9
+ user = User.new
10
+ assert_equal false, user.valid?
11
+ end
12
+
13
+ def test_errors
14
+ user = User.new
15
+ user.valid?
16
+ assert_equal ["can't be blank"], user.errors[:name]
17
+ end
18
+
19
+ def test_create_bang
20
+ assert_raises Minidoc::RecordInvalid do
21
+ User.create!
22
+ end
23
+ end
24
+
25
+ def test_invalid_save
26
+ user = User.new
27
+ assert_equal false, user.save
28
+ assert_equal true, user.new_record?
29
+ end
30
+
31
+ def test_save_bang
32
+ assert_raises Minidoc::RecordInvalid do
33
+ User.new.save!
34
+ end
35
+ end
36
+ end
metadata ADDED
@@ -0,0 +1,196 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minidoc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Bryan Helmkamp
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-09-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: activemodel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: virtus
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: mongo
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mocha
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description:
112
+ email:
113
+ - bryan@brynary.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".ruby-version"
120
+ - ".travis.yml"
121
+ - Gemfile
122
+ - LICENSE.txt
123
+ - README.md
124
+ - Rakefile
125
+ - lib/minidoc.rb
126
+ - lib/minidoc/associations.rb
127
+ - lib/minidoc/autoload.rb
128
+ - lib/minidoc/connection.rb
129
+ - lib/minidoc/counters.rb
130
+ - lib/minidoc/duplicate_key.rb
131
+ - lib/minidoc/finders.rb
132
+ - lib/minidoc/grid.rb
133
+ - lib/minidoc/indexes.rb
134
+ - lib/minidoc/read_only.rb
135
+ - lib/minidoc/record_invalid.rb
136
+ - lib/minidoc/test_helpers.rb
137
+ - lib/minidoc/timestamps.rb
138
+ - lib/minidoc/validations.rb
139
+ - lib/minidoc/value.rb
140
+ - minidoc.gemspec
141
+ - test/activemodel_test.rb
142
+ - test/belongs_to_test.rb
143
+ - test/connection_test.rb
144
+ - test/counters_test.rb
145
+ - test/duplicate_key_test.rb
146
+ - test/grid_test.rb
147
+ - test/helper.rb
148
+ - test/indexes_test.rb
149
+ - test/locale/en.yml
150
+ - test/persistence_test.rb
151
+ - test/query_test.rb
152
+ - test/read_only_test.rb
153
+ - test/timestamps_test.rb
154
+ - test/uniqueness_validator_test.rb
155
+ - test/validations_test.rb
156
+ homepage: https://github.com/brynary/minidoc
157
+ licenses:
158
+ - MIT
159
+ metadata: {}
160
+ post_install_message:
161
+ rdoc_options: []
162
+ require_paths:
163
+ - lib
164
+ required_ruby_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ required_rubygems_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ requirements: []
175
+ rubyforge_project:
176
+ rubygems_version: 2.5.1
177
+ signing_key:
178
+ specification_version: 4
179
+ summary: Lightweight wrapper for MongoDB documents
180
+ test_files:
181
+ - test/activemodel_test.rb
182
+ - test/belongs_to_test.rb
183
+ - test/connection_test.rb
184
+ - test/counters_test.rb
185
+ - test/duplicate_key_test.rb
186
+ - test/grid_test.rb
187
+ - test/helper.rb
188
+ - test/indexes_test.rb
189
+ - test/locale/en.yml
190
+ - test/persistence_test.rb
191
+ - test/query_test.rb
192
+ - test/read_only_test.rb
193
+ - test/timestamps_test.rb
194
+ - test/uniqueness_validator_test.rb
195
+ - test/validations_test.rb
196
+ has_rdoc: