mongo-fixture 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +1 -0
- data/features/play_around_with_fixtures.feature +34 -3
- data/features/stepdefs/play_around_with_fixtures/create_a_simple_fixture_push_it_and_rollback.rb +7 -0
- data/features/stepdefs/play_around_with_fixtures/misconfigured_password_field.rb +1 -1
- data/features/support/hooks.rb +1 -1
- data/lib/mongo-fixture/inserter.rb +131 -0
- data/lib/mongo-fixture/version.rb +1 -1
- data/lib/mongo-fixture.rb +23 -62
- data/spec/mongo/fixture/inserter_spec.rb +429 -0
- data/spec/mongo/fixture_spec.rb +34 -161
- data/spec/spec_helper.rb +2 -0
- metadata +9 -6
- data/spec/mongo/cross_references_spec.rb +0 -39
data/Gemfile
CHANGED
@@ -64,9 +64,6 @@ Scenario: Misconfigured password field
|
|
64
64
|
missing: The field
|
65
65
|
"""
|
66
66
|
Then the loading of misconfigured fixture should fail
|
67
|
-
And I should see that the collection was "users"
|
68
|
-
And I should see that the field was "password"
|
69
|
-
And I should see that the entry was "wrong_entry"
|
70
67
|
And I should see 0 records in users
|
71
68
|
|
72
69
|
Scenario: I save the done fixtures so to perform the rollbacks later
|
@@ -113,3 +110,37 @@ Scenario: References across collections
|
|
113
110
|
And I load the references fixture
|
114
111
|
Then I should see 1 record in users with username "pepe" and name "Pepe"
|
115
112
|
And I should see 3 records in sessions
|
113
|
+
|
114
|
+
Scenario: Many-to-many associations
|
115
|
+
Given a collection users
|
116
|
+
And a collection documents
|
117
|
+
And a file "test/fixtures/associations/users.yaml" with:
|
118
|
+
"""
|
119
|
+
johnny:
|
120
|
+
name: John
|
121
|
+
documents:
|
122
|
+
documents: [brief, docs, extra_data]
|
123
|
+
susan:
|
124
|
+
name: Susan
|
125
|
+
documents:
|
126
|
+
documents: [brief, resume, docs]
|
127
|
+
"""
|
128
|
+
And a file "test/fixtures/associations/documents.yaml" with:
|
129
|
+
"""
|
130
|
+
brief:
|
131
|
+
title: Data
|
132
|
+
text: Resumee
|
133
|
+
docs:
|
134
|
+
title: Doc
|
135
|
+
text: Documentation
|
136
|
+
extra_data:
|
137
|
+
title: Xtra
|
138
|
+
text: More and more data
|
139
|
+
resume:
|
140
|
+
title: CV
|
141
|
+
text: Curriculum Vitae
|
142
|
+
"""
|
143
|
+
When I load the associations fixture
|
144
|
+
Then I should see 2 records in users
|
145
|
+
And I should see 4 records in documents
|
146
|
+
And the user named "John" should have in documents the id of the one titled "Doc"
|
data/features/stepdefs/play_around_with_fixtures/create_a_simple_fixture_push_it_and_rollback.rb
CHANGED
@@ -66,3 +66,10 @@ end
|
|
66
66
|
Then /^I should see (\d+) records in (\w+)$/ do |amount, collection|
|
67
67
|
@DB[collection].count.should == amount.to_i
|
68
68
|
end
|
69
|
+
|
70
|
+
And /^the user named "(\w+)" should have in documents the id of the one titled "(\w+)"$/ do
|
71
|
+
|name, title|
|
72
|
+
user = @DB[:users].find_one :name => name
|
73
|
+
document = @DB[:documents].find_one :title => title
|
74
|
+
user["documents"].should include document["_id"]
|
75
|
+
end
|
@@ -22,7 +22,7 @@
|
|
22
22
|
Then /^the loading of (\w+) fixture should fail$/ do |fixture|
|
23
23
|
begin
|
24
24
|
Mongo::Fixture.new fixture.to_sym, @DB
|
25
|
-
rescue Mongo::Fixture::
|
25
|
+
rescue Mongo::Fixture::ReferencedRecordNotFoundError => e
|
26
26
|
@exception = e
|
27
27
|
end
|
28
28
|
end
|
data/features/support/hooks.rb
CHANGED
@@ -0,0 +1,131 @@
|
|
1
|
+
module Mongo
|
2
|
+
class Fixture
|
3
|
+
# Handles the actual insertion into the database.
|
4
|
+
class Inserter
|
5
|
+
|
6
|
+
# Receives a fixture as argument
|
7
|
+
def initialize fixture
|
8
|
+
@fixture = fixture
|
9
|
+
@inserted = []
|
10
|
+
end
|
11
|
+
|
12
|
+
# Simplifies the hash in order to insert it into the database
|
13
|
+
# Resolves external references and flattens the values that provide alternatives
|
14
|
+
# @param [Hash] the hash to be processed
|
15
|
+
def simplify the_record
|
16
|
+
the_returned_hash = {}
|
17
|
+
the_record.each do |field, value|
|
18
|
+
begin
|
19
|
+
value = resolve_field_hash value if value.is_a? Hash
|
20
|
+
rescue Mongo::Fixture::ReferencedRecordNotFoundError => e
|
21
|
+
@fixture.rollback
|
22
|
+
raise e
|
23
|
+
end
|
24
|
+
the_returned_hash[field] = value
|
25
|
+
end
|
26
|
+
return the_returned_hash
|
27
|
+
end
|
28
|
+
|
29
|
+
# Returns the correct data for this field resolving the hash
|
30
|
+
def resolve_field_hash value
|
31
|
+
raise ArgumentError, "Hash expected" unless value.is_a? Hash
|
32
|
+
return value[:processed] if value.has_key? :processed
|
33
|
+
|
34
|
+
intersection = value.keys & @fixture.data.keys
|
35
|
+
if intersection.empty?
|
36
|
+
raise Mongo::Fixture::ReferencedRecordNotFoundError,
|
37
|
+
"This fixture does not include data for the collections [#{value.keys.join(',')}]"
|
38
|
+
else
|
39
|
+
intersection.each do |collection|
|
40
|
+
insert_data_for collection unless data_was_inserted_in? collection
|
41
|
+
if value[collection].is_a? Array
|
42
|
+
ids = []
|
43
|
+
value[collection].each do |element|
|
44
|
+
ids.push do_the_resolving collection, element.to_sym
|
45
|
+
end
|
46
|
+
return ids
|
47
|
+
else
|
48
|
+
return do_the_resolving collection, value[collection].to_sym
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# options = value.keys & @fixture.data.keys
|
55
|
+
# # If no alternative matches the name of a collection, look for a :processed value
|
56
|
+
# if options.empty?
|
57
|
+
# unless value.has_key? :processed
|
58
|
+
# raise MissingProcessedValueError.new "The processed value to insert into the db is missing from the field '#{field}', aborting", field
|
59
|
+
# end
|
60
|
+
# the_returned_hash[field] = value[:processed]
|
61
|
+
# else
|
62
|
+
#
|
63
|
+
# # Does any of the options hold a record named after the value of the option?
|
64
|
+
# actual_option = options.each do |option|
|
65
|
+
# break option if @fixture.data[option].has_key? value[option].to_sym
|
66
|
+
# end
|
67
|
+
#
|
68
|
+
# unless data_was_inserted_in? actual_option
|
69
|
+
# insert_data_for actual_option
|
70
|
+
# end
|
71
|
+
# current_collection = @connection[actual_option]
|
72
|
+
# current_data = simplify @fixture.data[actual_option][value[actual_option].to_sym]
|
73
|
+
# the_returned_hash[field] = current_collection.find(current_data).first["_id"]
|
74
|
+
# end
|
75
|
+
|
76
|
+
|
77
|
+
# Inserts the collection data into the database
|
78
|
+
def insert_data_for collection
|
79
|
+
# @data.each do |collection, matrix|
|
80
|
+
# unless @inserter.data_was_inserted_in? collection
|
81
|
+
# matrix.each do |element, values|
|
82
|
+
# begin
|
83
|
+
# @connection[collection].insert @inserter.simplify values.to_hash
|
84
|
+
# rescue MissingProcessedValueError => m
|
85
|
+
# rollback
|
86
|
+
# raise MissingProcessedValueError, "In record '#{element}' to be inserted into '#{collection}', the processed value of field '#{m.field}' is missing, aborting"
|
87
|
+
# end
|
88
|
+
# end
|
89
|
+
# @inserted << collection
|
90
|
+
# end
|
91
|
+
return if data_was_inserted_in? collection
|
92
|
+
@fixture.data[collection].each do |key, record|
|
93
|
+
begin
|
94
|
+
@fixture.connection[collection].insert simplify record
|
95
|
+
rescue MissingProcessedValueError => m
|
96
|
+
@fixture.rollback
|
97
|
+
raise MissingProcessedValueError, "In record '#{key}' to be inserted into '#{collection}', the processed value of field '#{m.field}' is missing, aborting"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
@inserted << collection
|
101
|
+
end
|
102
|
+
|
103
|
+
# Returns true if the collection was already inserted
|
104
|
+
def data_was_inserted_in? collection
|
105
|
+
@inserted.include? collection
|
106
|
+
end
|
107
|
+
|
108
|
+
def inserted
|
109
|
+
@inserted
|
110
|
+
end
|
111
|
+
|
112
|
+
# Returns the fixture
|
113
|
+
attr_reader :fixture
|
114
|
+
|
115
|
+
private
|
116
|
+
def validate_record_existence collection, record_name
|
117
|
+
unless @fixture.data[collection].has_key? record_name
|
118
|
+
raise Mongo::Fixture::ReferencedRecordNotFoundError,
|
119
|
+
"The collection '#{collection}' doesn't include the record '#{record_name}'"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def do_the_resolving collection, record_name
|
124
|
+
validate_record_existence collection, record_name
|
125
|
+
|
126
|
+
record_data = simplify @fixture.data[collection][record_name]
|
127
|
+
return @fixture.connection[collection].find(record_data).first["_id"]
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
data/lib/mongo-fixture.rb
CHANGED
@@ -4,6 +4,7 @@ require "symbolmatrix"
|
|
4
4
|
require "mongo"
|
5
5
|
|
6
6
|
require "mongo-fixture/version"
|
7
|
+
require "mongo-fixture/inserter"
|
7
8
|
|
8
9
|
module Mongo
|
9
10
|
|
@@ -25,7 +26,7 @@ module Mongo
|
|
25
26
|
load fixture if fixture
|
26
27
|
|
27
28
|
@connection = connection if connection
|
28
|
-
@
|
29
|
+
@inserter = Inserter.new self
|
29
30
|
push if fixture && connection && option_push
|
30
31
|
end
|
31
32
|
|
@@ -62,6 +63,9 @@ module Mongo
|
|
62
63
|
|
63
64
|
# Returns the current database connection
|
64
65
|
attr_reader :connection
|
66
|
+
|
67
|
+
# Returns the inserter for this fixture
|
68
|
+
attr_reader :inserter
|
65
69
|
|
66
70
|
# Sets the connection. Raises an ChangingConnectionIllegal exception if this fixture has already been checked
|
67
71
|
def connection= the_connection
|
@@ -89,65 +93,24 @@ module Mongo
|
|
89
93
|
def push
|
90
94
|
check
|
91
95
|
|
92
|
-
|
93
|
-
|
94
|
-
matrix.each do |element, values|
|
95
|
-
begin
|
96
|
-
@connection[collection].insert simplify values.to_hash
|
97
|
-
rescue MissingProcessedValueError => m
|
98
|
-
rollback
|
99
|
-
raise MissingProcessedValueError, "In record '#{element}' to be inserted into '#{collection}', the processed value of field '#{m.field}' is missing, aborting"
|
100
|
-
end
|
101
|
-
end
|
102
|
-
@inserted << collection
|
103
|
-
end
|
96
|
+
data.each_key do |collection|
|
97
|
+
@inserter.insert_data_for collection
|
104
98
|
end
|
99
|
+
# @data.each do |collection, matrix|
|
100
|
+
# unless @inserter.data_was_inserted_in? collection
|
101
|
+
# matrix.each do |element, values|
|
102
|
+
# begin
|
103
|
+
# @connection[collection].insert @inserter.simplify values.to_hash
|
104
|
+
# rescue MissingProcessedValueError => m
|
105
|
+
# rollback
|
106
|
+
# raise MissingProcessedValueError, "In record '#{element}' to be inserted into '#{collection}', the processed value of field '#{m.field}' is missing, aborting"
|
107
|
+
# end
|
108
|
+
# end
|
109
|
+
# @inserted << collection
|
110
|
+
# end
|
111
|
+
# end
|
105
112
|
end
|
106
|
-
|
107
|
-
# Simplifies the hash in order to insert it into the database
|
108
|
-
# Resolves external references and flattens the values that provide alternatives
|
109
|
-
# @param [Hash] the hash to be processed
|
110
|
-
def simplify the_hash
|
111
|
-
the_returned_hash = {}
|
112
|
-
the_hash.each do |key, value|
|
113
|
-
if value.is_a? Hash
|
114
|
-
|
115
|
-
# If no alternative matches the name of a collection, look for a :processed value
|
116
|
-
if (value.keys & @data.keys).empty?
|
117
|
-
unless value.has_key? :processed
|
118
|
-
raise MissingProcessedValueError.new "The processed value to insert into the db is missing from the field '#{key}', aborting", key
|
119
|
-
end
|
120
|
-
the_returned_hash[key] = value[:processed]
|
121
|
-
else
|
122
|
-
|
123
|
-
# Does any of the options hold a record named after the value of the option?
|
124
|
-
options = value.keys & @data.keys
|
125
|
-
actual_option = options.each do |option|
|
126
|
-
break option if @data[option].has_key? value[option].to_sym
|
127
|
-
end
|
128
|
-
|
129
|
-
unless data_was_inserted_in? actual_option
|
130
|
-
insert_data_for actual_option
|
131
|
-
end
|
132
|
-
current_collection = @connection[actual_option]
|
133
|
-
current_data = simplify @data[actual_option][value[actual_option].to_sym]
|
134
|
-
the_returned_hash[key] = current_collection.find(current_data).first["_id"]
|
135
|
-
end
|
136
|
-
else
|
137
|
-
the_returned_hash[key] = value
|
138
|
-
end
|
139
|
-
end
|
140
|
-
return the_returned_hash
|
141
|
-
end
|
142
|
-
|
143
|
-
# Inserts the collection data into the database
|
144
|
-
def insert_data_for collection
|
145
|
-
@data[collection].each do |key, record|
|
146
|
-
@connection[collection].insert simplify record
|
147
|
-
end
|
148
|
-
@inserted << collection
|
149
|
-
end
|
150
|
-
|
113
|
+
|
151
114
|
# Empties the collections, only if they were empty to begin with
|
152
115
|
def rollback
|
153
116
|
begin
|
@@ -167,6 +130,7 @@ module Mongo
|
|
167
130
|
class MissingConnectionError < StandardError; end
|
168
131
|
class ChangingConnectionIllegal < StandardError; end
|
169
132
|
class RollbackIllegalError < StandardError; end
|
133
|
+
class ReferencedRecordNotFoundError < StandardError; end
|
170
134
|
class MissingProcessedValueError < StandardError
|
171
135
|
attr_accessor :field
|
172
136
|
def initialize message, field = nil
|
@@ -175,9 +139,6 @@ module Mongo
|
|
175
139
|
end
|
176
140
|
end
|
177
141
|
|
178
|
-
|
179
|
-
def data_was_inserted_in? collection
|
180
|
-
@inserted.include? collection
|
181
|
-
end
|
142
|
+
|
182
143
|
end
|
183
144
|
end
|
@@ -0,0 +1,429 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongo::Fixture::Inserter do
|
4
|
+
describe ".new" do
|
5
|
+
it "should accept an argument" do
|
6
|
+
Mongo::Fixture::Inserter.new double "fixture"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#simplify" do
|
11
|
+
context "when receiving a multidimensional hash containing a field with raw and processed" do
|
12
|
+
it "should convert it in a simple hash using the processed value as replacement" do
|
13
|
+
base_hash = {
|
14
|
+
:name => "Jane",
|
15
|
+
:band => "Witherspoons",
|
16
|
+
:pass => {
|
17
|
+
:raw => "secret",
|
18
|
+
:processed => "53oih7fhjdgj3f8="
|
19
|
+
},
|
20
|
+
:email => {
|
21
|
+
:raw => "Jane@gmail.com ",
|
22
|
+
:processed => "jane@gmail.com"
|
23
|
+
}
|
24
|
+
}
|
25
|
+
fixture = double 'fixture', :data => {}
|
26
|
+
|
27
|
+
ins = Mongo::Fixture::Inserter.new fixture
|
28
|
+
simplified = ins.simplify base_hash
|
29
|
+
simplified.should == {
|
30
|
+
:name => "Jane",
|
31
|
+
:band => "Witherspoons",
|
32
|
+
:pass => "53oih7fhjdgj3f8=",
|
33
|
+
:email => "jane@gmail.com"
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "the multidimensional array is missing the processed part of the field" do
|
39
|
+
before do
|
40
|
+
@base_hash = {
|
41
|
+
:name => "Jane",
|
42
|
+
:pass => {
|
43
|
+
:raw => "secret",
|
44
|
+
:not_processed => "53oih7fhjdgj3f8="
|
45
|
+
},
|
46
|
+
:email => {
|
47
|
+
:raw => "Jane@gmail.com ",
|
48
|
+
:processed => "jane@gmail.com"
|
49
|
+
}
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should raise an exception" do
|
54
|
+
fixture = double 'fixture', :data => {}, :rollback => nil
|
55
|
+
ins = Mongo::Fixture::Inserter.new fixture
|
56
|
+
expect { ins.simplify @base_hash
|
57
|
+
}.to raise_error Mongo::Fixture::ReferencedRecordNotFoundError,
|
58
|
+
"This fixture does not include data for the collections [raw,not_processed]"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should call #resolve_field_hash with the data hash" do
|
62
|
+
fixture = double 'fixture', :data => {}
|
63
|
+
ins = Mongo::Fixture::Inserter.new fixture
|
64
|
+
ins.should_receive(:resolve_field_hash).with :raw => "secret", :not_processed => "53oih7fhjdgj3f8="
|
65
|
+
ins.should_receive(:resolve_field_hash).with :raw => "Jane@gmail.com ", :processed => "jane@gmail.com"
|
66
|
+
ins.simplify @base_hash
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "#resolve_field_hash" do
|
72
|
+
context "the data is not a hash" do
|
73
|
+
it "should raise a wrong argument exception" do
|
74
|
+
inserter = Mongo::Fixture::Inserter.new double 'fixture'
|
75
|
+
expect { inserter.resolve_field_hash "not a hash"
|
76
|
+
}.to raise_error ArgumentError, "Hash expected"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "at leasts one key matches a collection name" do
|
81
|
+
context "no record name matches an existing record in target collection" do
|
82
|
+
before do
|
83
|
+
@data = {
|
84
|
+
:users => { :pepe => { :name => "Jose" } },
|
85
|
+
:comments => { :demo => { :text => "Hola", :user => { :users => "lula" } } }
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should raise an exception" do
|
90
|
+
coll = double "collection", :insert => nil
|
91
|
+
connection = double "connection", :[] => coll
|
92
|
+
fixture = double 'fixture', :data => @data, :connection => connection
|
93
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
94
|
+
expect { inserter.resolve_field_hash :users => "lula"
|
95
|
+
}.to raise_error Mongo::Fixture::ReferencedRecordNotFoundError,
|
96
|
+
"The collection 'users' doesn't include the record 'lula'"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
context "many to many associations" do
|
102
|
+
before do
|
103
|
+
@data = {
|
104
|
+
:users => {
|
105
|
+
:pepe => {
|
106
|
+
:username => "jose",
|
107
|
+
:pass => "secret"
|
108
|
+
},
|
109
|
+
:lula => {
|
110
|
+
:username => "lula",
|
111
|
+
:pass => {
|
112
|
+
:raw => "moresecret",
|
113
|
+
:processed => "asdfhjlueiwywhetkjtret66666666"
|
114
|
+
}
|
115
|
+
}
|
116
|
+
},
|
117
|
+
:admins => {
|
118
|
+
:superadmin => {
|
119
|
+
:login => "super"
|
120
|
+
}
|
121
|
+
},
|
122
|
+
:comments => {
|
123
|
+
:demo => {
|
124
|
+
:text => "Simple text",
|
125
|
+
:user => {
|
126
|
+
:users => [ "pepe", "lula" ],
|
127
|
+
:admins => "superadmin"
|
128
|
+
}
|
129
|
+
},
|
130
|
+
:another => {
|
131
|
+
:text => "Die another day",
|
132
|
+
:user => {
|
133
|
+
:users => "pepe"
|
134
|
+
}
|
135
|
+
}
|
136
|
+
}
|
137
|
+
}
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should send to each comment the respective ids" do
|
141
|
+
pepe_id = "ladjsfljasf"
|
142
|
+
lula_id = "gsuyhkasrhte"
|
143
|
+
superadmin_id = "323454"
|
144
|
+
|
145
|
+
lula_record_data = double "lula record data"
|
146
|
+
lula_record_data.should_receive( :[] ).with("_id").and_return lula_id
|
147
|
+
lula_record = double "lula record", :first => lula_record_data
|
148
|
+
pepe_record_data = double "pepe record data"
|
149
|
+
pepe_record_data.should_receive(:[]).twice.with("_id").and_return(pepe_id)
|
150
|
+
pepe_record = double "pepe record"
|
151
|
+
pepe_record.should_receive(:first).twice.and_return pepe_record_data
|
152
|
+
admin_record_data = double "admin record data"
|
153
|
+
admin_record_data.should_receive(:[]).with("_id").and_return superadmin_id
|
154
|
+
admin_record = double "admin record", :first => admin_record_data
|
155
|
+
admins = double "admins", :insert => nil
|
156
|
+
admins.should_receive(:find).with( :login => "super" ).and_return admin_record
|
157
|
+
users = double 'users', :insert => nil
|
158
|
+
users.should_receive(:find).twice.with( :username => "jose", :pass => "secret" ).and_return pepe_record
|
159
|
+
users.should_receive(:find).with( :username => "lula", :pass => "asdfhjlueiwywhetkjtret66666666" ).and_return lula_record
|
160
|
+
connection = double 'connection'
|
161
|
+
connection.should_receive(:[]).exactly(5).times.with(:users).and_return users
|
162
|
+
connection.should_receive(:[]).twice.with(:admins).and_return admins
|
163
|
+
fixture = double 'fixture', :data => @data, :connection => connection
|
164
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
165
|
+
inserter.resolve_field_hash( :users => [ "pepe", "lula" ] ).should == [ pepe_id, lula_id ]
|
166
|
+
inserter.resolve_field_hash( :admins => "superadmin" ).should == superadmin_id
|
167
|
+
inserter.resolve_field_hash( :users => "pepe" ).should == pepe_id
|
168
|
+
end
|
169
|
+
|
170
|
+
context "some user is missing" do
|
171
|
+
before do
|
172
|
+
@data = {
|
173
|
+
:users => {
|
174
|
+
:pepe => {
|
175
|
+
:username => "jose",
|
176
|
+
:pass => "secret"
|
177
|
+
},
|
178
|
+
:lula => {
|
179
|
+
:username => "lula",
|
180
|
+
:pass => {
|
181
|
+
:raw => "moresecret",
|
182
|
+
:processed => "asdfhjlueiwywhetkjtret66666666"
|
183
|
+
}
|
184
|
+
}
|
185
|
+
},
|
186
|
+
:comments => {
|
187
|
+
:demo => {
|
188
|
+
:text => "Simple text",
|
189
|
+
:user => {
|
190
|
+
:users => [ "pepe", "lula", "noexiste" ],
|
191
|
+
}
|
192
|
+
},
|
193
|
+
}
|
194
|
+
}
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should raise an exception" do
|
198
|
+
pepe_id = "ladjsfljasf"
|
199
|
+
lula_id = "gsuyhkasrhte"
|
200
|
+
|
201
|
+
lula_data = double "lula_data"
|
202
|
+
lula_data.should_receive(:[]).with("_id").and_return lula_id
|
203
|
+
lula = double "lula", :first => lula_data
|
204
|
+
pepe_data = double "pepe_data"
|
205
|
+
pepe_data.should_receive(:[]).with("_id").and_return pepe_id
|
206
|
+
pepe = double "pepe", :first => pepe_data
|
207
|
+
users = double "users", :insert => nil
|
208
|
+
users.should_receive(:find).with( :username => "jose", :pass => "secret" ).and_return pepe
|
209
|
+
users.should_receive(:find).with( :username => "lula", :pass => "asdfhjlueiwywhetkjtret66666666" ).and_return lula
|
210
|
+
connection = double "connection"
|
211
|
+
connection.should_receive(:[]).exactly(4).times.with(:users).and_return users
|
212
|
+
fixture = double "fixture", :data => @data, :connection => connection
|
213
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
214
|
+
expect { inserter.resolve_field_hash( :users => [ "pepe", "lula", "noexiste" ] )
|
215
|
+
}.to raise_error Mongo::Fixture::ReferencedRecordNotFoundError,
|
216
|
+
"The collection 'users' doesn't include the record 'noexiste'"
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
context "reference from one record to another" do
|
222
|
+
context "the key matches a collection name" do
|
223
|
+
context "the referenced record exists" do
|
224
|
+
it "should call #data_was_inserted_in? with the collections name" do
|
225
|
+
@data = {
|
226
|
+
:users => { :pepe => { :name => "Jose" } },
|
227
|
+
:comments => { :demo => { :text => "hola", :user => {:users => "pepe" } } }
|
228
|
+
}
|
229
|
+
|
230
|
+
pepe_data = double "pepe_data", :[] => nil
|
231
|
+
pepe = double "pepe", :insert => nil
|
232
|
+
pepe.should_receive(:find).with(:name => "Jose").and_return double"pepeee", :first => pepe_data
|
233
|
+
connection = double "connection"
|
234
|
+
connection.should_receive(:[]).twice.with(:users).and_return pepe
|
235
|
+
fixture = double "fixture", :data => @data, :connection => connection
|
236
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
237
|
+
inserter.should_receive(:data_was_inserted_in?).twice.with(:users)
|
238
|
+
inserter.resolve_field_hash(:users => "pepe")
|
239
|
+
end
|
240
|
+
|
241
|
+
context "the data wasn't inserted into users" do
|
242
|
+
it "should call #insert_data_for with the collections name" do
|
243
|
+
@data = {
|
244
|
+
:users => { :pepe => { :name => "Jose" } },
|
245
|
+
:comments => { :demo => { :text => "hola", :user => {:users => "pepe" } } }
|
246
|
+
}
|
247
|
+
|
248
|
+
pepe_data = double "pepe_data", :[] => nil
|
249
|
+
pepe = double "pepe"
|
250
|
+
pepe.should_receive(:find).with(:name => "Jose").and_return double"pepeee", :first => pepe_data
|
251
|
+
connection = double "connection"
|
252
|
+
connection.should_receive(:[]).with(:users).and_return pepe
|
253
|
+
fixture = double "fixture", :data => @data, :connection => connection
|
254
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
255
|
+
inserter.should_receive(:insert_data_for).with(:users)
|
256
|
+
inserter.resolve_field_hash(:users => "pepe")
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
context "the data was inserted into users" do
|
261
|
+
it "should NOT call #insert_data_for with the collections name" do
|
262
|
+
@data = {
|
263
|
+
:users => { :pepe => { :name => "Jose" } },
|
264
|
+
:comments => { :demo => { :text => "hola", :user => {:users => "pepe" } } }
|
265
|
+
}
|
266
|
+
|
267
|
+
pepe_data = double "pepe_data", :[] => nil
|
268
|
+
pepe = double "pepe"
|
269
|
+
pepe.should_receive(:find).with(:name => "Jose").and_return double"pepeee", :first => pepe_data
|
270
|
+
connection = double "connection"
|
271
|
+
connection.should_receive(:[]).with(:users).and_return pepe
|
272
|
+
fixture = double "fixture", :data => @data, :connection => connection
|
273
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
274
|
+
inserter.should_receive(:insert_data_for).with(:users)
|
275
|
+
inserter.resolve_field_hash(:users => "pepe")
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
|
280
|
+
it "should return the object id of the referenced record" do
|
281
|
+
@data = {
|
282
|
+
:users => { :pepe => { :name => "Jose" } },
|
283
|
+
:comments => { :demo => { :text => "hola", :user => {:users => "pepe" } } }
|
284
|
+
}
|
285
|
+
|
286
|
+
actual_record = double "actual_record"
|
287
|
+
actual_record.should_receive(:[]).with("_id").and_return "un id"
|
288
|
+
record_from_db = double 'record from db', :first => actual_record
|
289
|
+
|
290
|
+
collection = double 'collection', :insert => nil
|
291
|
+
collection.should_receive(:find).with(:name => "Jose").and_return record_from_db
|
292
|
+
fixture = double 'fixture', :data => @data, :connection => double( :[] => collection)
|
293
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
294
|
+
inserter.resolve_field_hash( :users => "pepe" ).should == "un id"
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
context "the referenced record exists, but have complex field values" do
|
299
|
+
it "should return the object id of the referenced record" do
|
300
|
+
@data = {
|
301
|
+
:users => { :pepe => { :name => "Jose", :pass => { :raw => "a", :processed => "234" } } },
|
302
|
+
:comments => { :demo => { :text => "hola", :user => {:users => "pepe" } } }
|
303
|
+
}
|
304
|
+
|
305
|
+
actual_record = double "actual_record"
|
306
|
+
actual_record.should_receive(:[]).with("_id").and_return "un id"
|
307
|
+
record_from_db = double 'record from db', :first => actual_record
|
308
|
+
|
309
|
+
collection = double 'collection', :insert => nil
|
310
|
+
collection.should_receive(:find).with(:name => "Jose", :pass => "234").and_return record_from_db
|
311
|
+
fixture = double 'fixture', :data => @data, :connection => double( :[] => collection)
|
312
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
313
|
+
inserter.resolve_field_hash( :users => "pepe" ).should == "un id"
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
|
318
|
+
context "the referenced record does not exist" do
|
319
|
+
it "should raise an error" do
|
320
|
+
data = { :users => "user" }
|
321
|
+
inserter = Mongo::Fixture::Inserter.new double 'fixture', :data => {}
|
322
|
+
expect { inserter.resolve_field_hash data
|
323
|
+
}.to raise_error Mongo::Fixture::ReferencedRecordNotFoundError,
|
324
|
+
"This fixture does not include data for the collections [users]"
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
context "no key matches a collection name" do
|
330
|
+
it "should raise an error" do
|
331
|
+
data = { :users => "user", :comments => "comment"}
|
332
|
+
fixture = stub 'fixture', :data => { :collection => "", :another_collection => ""}
|
333
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
334
|
+
expect { inserter.resolve_field_hash data
|
335
|
+
}.to raise_error Mongo::Fixture::ReferencedRecordNotFoundError,
|
336
|
+
"This fixture does not include data for the collections [users,comments]"
|
337
|
+
end
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
context "there is a :processed key" do
|
342
|
+
it "should return the value of the :processed field" do
|
343
|
+
data = { :raw => "hello", :processed => "hash" }
|
344
|
+
inserter = Mongo::Fixture::Inserter.new double "fixture"
|
345
|
+
inserter.resolve_field_hash(data).should == "hash"
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
describe "#data_was_inserted_in?" do
|
351
|
+
context "there is a simple fixture and a collection has been inserted by this fixture" do
|
352
|
+
before do
|
353
|
+
Fast.file.write "test/fixtures/test/users.yaml", "pepe: { user: pepe }"
|
354
|
+
end
|
355
|
+
|
356
|
+
it "should return true" do
|
357
|
+
database = double 'database'
|
358
|
+
coll = double 'collection', :count => 0, :insert => nil
|
359
|
+
database.stub :[] => coll
|
360
|
+
fix = Mongo::Fixture.new :test, database
|
361
|
+
ins = fix.inserter
|
362
|
+
ins.data_was_inserted_in?(:users).should === true
|
363
|
+
end
|
364
|
+
|
365
|
+
after do
|
366
|
+
Fast.dir.remove! :test
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
context "there is a simple fixture and a collection was inserted but not this" do
|
371
|
+
before do
|
372
|
+
Fast.file.write "test/fixtures/test/users.yaml", "pepe: { user: pepe }"
|
373
|
+
end
|
374
|
+
|
375
|
+
it "should return false" do
|
376
|
+
database = double 'database'
|
377
|
+
coll = double 'collection', :count => 0, :insert => nil
|
378
|
+
database.stub :[] => coll
|
379
|
+
fix = Mongo::Fixture.new :test, database
|
380
|
+
ins = Mongo::Fixture::Inserter.new fix
|
381
|
+
def ins.loot
|
382
|
+
data_was_inserted_in?(:comment).should === false
|
383
|
+
end
|
384
|
+
ins.loot
|
385
|
+
end
|
386
|
+
|
387
|
+
after do
|
388
|
+
Fast.dir.remove! :test
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
describe "#insert_data_for" do
|
394
|
+
context "provided the collection has data in the fixture" do
|
395
|
+
it "should insert the data of the collection using the fixture's connection" do
|
396
|
+
@data = { :users => { :pepe => { :name => "Jose" } } }
|
397
|
+
collection = double "collection"
|
398
|
+
collection.should_receive(:insert).with( :name => "Jose" )
|
399
|
+
connection = double 'connection'
|
400
|
+
connection.should_receive(:[]).with(:users).and_return collection
|
401
|
+
fixture = double "fixture", :data => @data
|
402
|
+
fixture.should_receive(:connection).and_return connection
|
403
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
404
|
+
inserter.insert_data_for :users
|
405
|
+
end
|
406
|
+
|
407
|
+
it "should add the collection as inserted" do
|
408
|
+
@data = { :users => { :pepe => { :name => "Jose" } } }
|
409
|
+
collection = double "collection"
|
410
|
+
collection.should_receive(:insert).with( :name => "Jose" )
|
411
|
+
connection = double 'connection'
|
412
|
+
connection.should_receive(:[]).with(:users).and_return collection
|
413
|
+
fixture = double "fixture", :data => @data
|
414
|
+
fixture.should_receive(:connection).and_return connection
|
415
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
416
|
+
inserter.insert_data_for :users
|
417
|
+
inserter.inserted.should include :users
|
418
|
+
end
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
describe "#fixture" do
|
423
|
+
it "should return the fixture" do
|
424
|
+
fixture = double "fixture"
|
425
|
+
inserter = Mongo::Fixture::Inserter.new fixture
|
426
|
+
inserter.fixture.should === fixture
|
427
|
+
end
|
428
|
+
end
|
429
|
+
end
|
data/spec/mongo/fixture_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require "
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
describe Mongo::Fixture do
|
4
4
|
describe ".path" do
|
@@ -84,7 +84,7 @@ describe Mongo::Fixture do
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
87
|
-
|
87
|
+
|
88
88
|
describe "#force_checked!" do
|
89
89
|
it "check should return true and should not call [] in the passed database" do
|
90
90
|
database = stub 'database'
|
@@ -96,7 +96,7 @@ describe Mongo::Fixture do
|
|
96
96
|
fix.check.should === true
|
97
97
|
end
|
98
98
|
end
|
99
|
-
|
99
|
+
|
100
100
|
describe "#[]" do
|
101
101
|
context "a valid fixture has been loaded" do
|
102
102
|
before do
|
@@ -122,7 +122,7 @@ describe Mongo::Fixture do
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
end
|
125
|
-
|
125
|
+
|
126
126
|
describe "#method_missing" do
|
127
127
|
context "a valid fixture has been loaded" do
|
128
128
|
context "a collection key is passed" do
|
@@ -153,7 +153,7 @@ describe Mongo::Fixture do
|
|
153
153
|
}.to raise_error NoMethodError
|
154
154
|
end
|
155
155
|
end
|
156
|
-
|
156
|
+
|
157
157
|
describe "#fixtures_path" do
|
158
158
|
it "should call Mongo::Fixture.path" do
|
159
159
|
Mongo::Fixture.should_receive :path
|
@@ -288,7 +288,7 @@ describe Mongo::Fixture do
|
|
288
288
|
fix.connection.should === connection
|
289
289
|
end
|
290
290
|
end
|
291
|
-
|
291
|
+
|
292
292
|
describe "#connection=" do
|
293
293
|
it "sets the connection" do
|
294
294
|
fix = Mongo::Fixture.new
|
@@ -318,7 +318,7 @@ describe Mongo::Fixture do
|
|
318
318
|
end
|
319
319
|
end
|
320
320
|
end
|
321
|
-
|
321
|
+
|
322
322
|
describe "#data" do
|
323
323
|
context "a fixture has been loaded" do
|
324
324
|
before do
|
@@ -343,7 +343,7 @@ describe Mongo::Fixture do
|
|
343
343
|
end
|
344
344
|
end
|
345
345
|
end
|
346
|
-
|
346
|
+
|
347
347
|
describe "#push" do
|
348
348
|
it "should call #check" do
|
349
349
|
fix = Mongo::Fixture.new
|
@@ -407,8 +407,8 @@ describe Mongo::Fixture do
|
|
407
407
|
database = double 'database', :[] => stub( 'collection', :count => 0, :drop => nil )
|
408
408
|
fix = Mongo::Fixture.new :test, database, false
|
409
409
|
expect { fix.push
|
410
|
-
}.to raise_error Mongo::Fixture::
|
411
|
-
"
|
410
|
+
}.to raise_error Mongo::Fixture::ReferencedRecordNotFoundError,
|
411
|
+
"This fixture does not include data for the collections [raw]"
|
412
412
|
end
|
413
413
|
|
414
414
|
|
@@ -417,14 +417,14 @@ describe Mongo::Fixture do
|
|
417
417
|
fix = Mongo::Fixture.new :test, database, false
|
418
418
|
fix.should_receive :rollback
|
419
419
|
expect { fix.push
|
420
|
-
}.to raise_error Mongo::Fixture::
|
420
|
+
}.to raise_error Mongo::Fixture::ReferencedRecordNotFoundError
|
421
421
|
end
|
422
422
|
|
423
423
|
after do
|
424
424
|
Fast.dir.remove! :test
|
425
425
|
end
|
426
426
|
end
|
427
|
-
|
427
|
+
|
428
428
|
context "a fixture with a field with one alternative name matches a collection name" do
|
429
429
|
context "the alternative value matches a record and in the collection" do
|
430
430
|
before do
|
@@ -433,21 +433,26 @@ describe Mongo::Fixture do
|
|
433
433
|
end
|
434
434
|
|
435
435
|
it "should insert the comment so that the comment user value matches the '_id' of the user" do
|
436
|
-
|
437
|
-
|
438
|
-
|
436
|
+
comments = double 'comments', :count => 0, :drop => nil
|
437
|
+
comments.should_receive( :insert ).with( :user => "un id", :text => "FLAME" )
|
438
|
+
|
439
439
|
record = stub 'record'
|
440
440
|
record.should_receive( :[] ).with( "_id" ).and_return "un id"
|
441
|
+
|
441
442
|
usrs = double 'users', :count => 0, :find => stub( :first => record ), :drop => nil, :insert => nil
|
443
|
+
|
444
|
+
database = double 'database'
|
442
445
|
database.stub :[] do |coll|
|
443
446
|
case coll
|
444
447
|
when :users
|
445
448
|
usrs
|
446
449
|
when :comments
|
447
|
-
|
450
|
+
comments
|
448
451
|
end
|
449
452
|
end
|
450
|
-
|
453
|
+
|
454
|
+
fix = Mongo::Fixture.new :test, database, false
|
455
|
+
fix.push
|
451
456
|
end
|
452
457
|
|
453
458
|
context "the collection is ordered so that the comment collection comes before the users one" do
|
@@ -473,121 +478,25 @@ describe Mongo::Fixture do
|
|
473
478
|
fix.push
|
474
479
|
end
|
475
480
|
end
|
476
|
-
|
481
|
+
|
477
482
|
after do
|
478
483
|
Fast.dir.remove! :test
|
479
484
|
end
|
480
|
-
end
|
481
|
-
end
|
482
|
-
end
|
483
|
-
|
484
|
-
describe "#data_was_inserted_in?" do
|
485
|
-
it "should be private" do
|
486
|
-
fix = Mongo::Fixture.new
|
487
|
-
fix.private_methods(false).should include :data_was_inserted_in?
|
488
|
-
end
|
489
|
-
|
490
|
-
context "there is a simple fixture and a collection has been inserted by this fixture" do
|
491
|
-
before do
|
492
|
-
Fast.file.write "test/fixtures/test/users.yaml", "pepe: { user: pepe }"
|
493
485
|
end
|
494
|
-
|
495
|
-
it "should return true" do
|
496
|
-
database = double 'database'
|
497
|
-
coll = double 'collection', :count => 0, :insert => nil
|
498
|
-
database.stub :[] => coll
|
499
|
-
fix = Mongo::Fixture.new :test, database
|
500
|
-
def fix.loot
|
501
|
-
data_was_inserted_in?(:users).should === true
|
502
|
-
end
|
503
|
-
fix.loot
|
504
|
-
end
|
505
|
-
|
506
|
-
after do
|
507
|
-
Fast.dir.remove! :test
|
508
|
-
end
|
509
|
-
end
|
510
|
-
|
511
|
-
context "there is a simple fixture and a collection was inserted but not this" do
|
512
|
-
before do
|
513
|
-
Fast.file.write "test/fixtures/test/users.yaml", "pepe: { user: pepe }"
|
514
|
-
end
|
515
|
-
|
516
|
-
it "should return false" do
|
517
|
-
database = double 'database'
|
518
|
-
coll = double 'collection', :count => 0, :insert => nil
|
519
|
-
database.stub :[] => coll
|
520
|
-
fix = Mongo::Fixture.new :test, database
|
521
|
-
def fix.loot
|
522
|
-
data_was_inserted_in?(:comment).should === false
|
523
|
-
end
|
524
|
-
fix.loot
|
525
|
-
end
|
526
|
-
|
527
|
-
after do
|
528
|
-
Fast.dir.remove! :test
|
529
|
-
end
|
530
|
-
end
|
486
|
+
end
|
531
487
|
end
|
532
|
-
|
533
|
-
#
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
:raw => "secret",
|
542
|
-
:processed => "53oih7fhjdgj3f8="
|
543
|
-
},
|
544
|
-
:email => {
|
545
|
-
:raw => "Jane@gmail.com ",
|
546
|
-
:processed => "jane@gmail.com"
|
547
|
-
}
|
548
|
-
}
|
549
|
-
|
550
|
-
fix = Mongo::Fixture.new
|
551
|
-
def fix.stub_data
|
552
|
-
@data = {}
|
553
|
-
end
|
554
|
-
fix.stub_data
|
555
|
-
simplified = fix.simplify base_hash
|
556
|
-
simplified.should == {
|
557
|
-
:name => "Jane",
|
558
|
-
:band => "Witherspoons",
|
559
|
-
:pass => "53oih7fhjdgj3f8=",
|
560
|
-
:email => "jane@gmail.com"
|
561
|
-
}
|
562
|
-
end
|
563
|
-
end
|
564
|
-
|
565
|
-
context "the multidimensional array is missing the processed part of the field" do
|
566
|
-
it "should raise an exception" do
|
567
|
-
base_hash = {
|
568
|
-
:name => "Jane",
|
569
|
-
:pass => {
|
570
|
-
:raw => "secret",
|
571
|
-
:not_processed => "53oih7fhjdgj3f8="
|
572
|
-
},
|
573
|
-
:email => {
|
574
|
-
:raw => "Jane@gmail.com ",
|
575
|
-
:processed => "jane@gmail.com"
|
576
|
-
}
|
577
|
-
}
|
578
|
-
|
579
|
-
fix = Mongo::Fixture.new
|
580
|
-
def fix.stub_data
|
581
|
-
@data = {}
|
582
|
-
end
|
583
|
-
fix.stub_data
|
584
|
-
expect { fix.simplify base_hash
|
585
|
-
}.to raise_error Mongo::Fixture::MissingProcessedValueError,
|
586
|
-
"The processed value to insert into the db is missing from the field 'pass', aborting"
|
587
|
-
end
|
488
|
+
|
489
|
+
describe "#inserter" do
|
490
|
+
it "should return an inserter with a reference to this" do
|
491
|
+
database = double 'database'
|
492
|
+
Mongo::Fixture.any_instance.stub :load
|
493
|
+
fixture = Mongo::Fixture.new :test, database, false
|
494
|
+
inserter = fixture.inserter
|
495
|
+
inserter.should be_a Mongo::Fixture::Inserter
|
496
|
+
inserter.fixture.should === fixture
|
588
497
|
end
|
589
498
|
end
|
590
|
-
|
499
|
+
|
591
500
|
describe "#rollback" do
|
592
501
|
it "should check" do
|
593
502
|
fix = Mongo::Fixture.new
|
@@ -632,40 +541,4 @@ describe Mongo::Fixture do
|
|
632
541
|
end
|
633
542
|
end
|
634
543
|
end
|
635
|
-
|
636
|
-
context "two collections are to be inserted with references" do
|
637
|
-
before do
|
638
|
-
Fast.file.write "test/fixtures/references/users.yaml", "pepe:
|
639
|
-
username: pepe
|
640
|
-
password:
|
641
|
-
raw: secreto
|
642
|
-
processed: 252db48960f032db4bb604bc26f97106fa85ff88dedef3a28671b6bcd9f9644bf90d7e444d587c9351dfa237a6fc8fe38641a8469d084a166c7807d9c6564860
|
643
|
-
name: Pepe"
|
644
|
-
Fast.file.write "test/fixtures/references/sessions.yaml", "14_horas:
|
645
|
-
user:
|
646
|
-
users: pepe
|
647
|
-
time: 2012-07-30T14:02:40-03:00
|
648
|
-
y_tres_minutos:
|
649
|
-
user:
|
650
|
-
users: pepe
|
651
|
-
time: 2012-07-30T14:03:40-03:00
|
652
|
-
y_cuatro_minutos:
|
653
|
-
user:
|
654
|
-
users: pepe
|
655
|
-
time: 2012-07-30T14:04:40-03:00"
|
656
|
-
end
|
657
|
-
|
658
|
-
it "should not fail!" do
|
659
|
-
collection = double 'coll', :count => 0, :insert => nil
|
660
|
-
database = double 'database'
|
661
|
-
database.stub :[] do |argument|
|
662
|
-
collection
|
663
|
-
end
|
664
|
-
Mongo::Fixture.new :references, database
|
665
|
-
end
|
666
|
-
|
667
|
-
after do
|
668
|
-
Fast.dir.remove! :test
|
669
|
-
end
|
670
|
-
end
|
671
544
|
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo-fixture
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongo
|
@@ -97,10 +97,12 @@ files:
|
|
97
97
|
- features/support/env.rb
|
98
98
|
- features/support/hooks.rb
|
99
99
|
- lib/mongo-fixture.rb
|
100
|
+
- lib/mongo-fixture/inserter.rb
|
100
101
|
- lib/mongo-fixture/version.rb
|
101
102
|
- mongo-fixture.gemspec
|
102
|
-
- spec/mongo/
|
103
|
+
- spec/mongo/fixture/inserter_spec.rb
|
103
104
|
- spec/mongo/fixture_spec.rb
|
105
|
+
- spec/spec_helper.rb
|
104
106
|
homepage: http://github.com/Fetcher/mongo-fixture
|
105
107
|
licenses: []
|
106
108
|
post_install_message:
|
@@ -115,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
115
117
|
version: '0'
|
116
118
|
segments:
|
117
119
|
- 0
|
118
|
-
hash: -
|
120
|
+
hash: -421222579
|
119
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
122
|
none: false
|
121
123
|
requirements:
|
@@ -124,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
126
|
version: '0'
|
125
127
|
segments:
|
126
128
|
- 0
|
127
|
-
hash: -
|
129
|
+
hash: -421222579
|
128
130
|
requirements: []
|
129
131
|
rubyforge_project:
|
130
132
|
rubygems_version: 1.8.24
|
@@ -139,5 +141,6 @@ test_files:
|
|
139
141
|
- features/stepdefs/play_around_with_fixtures/misconfigured_password_field.rb
|
140
142
|
- features/support/env.rb
|
141
143
|
- features/support/hooks.rb
|
142
|
-
- spec/mongo/
|
144
|
+
- spec/mongo/fixture/inserter_spec.rb
|
143
145
|
- spec/mongo/fixture_spec.rb
|
146
|
+
- spec/spec_helper.rb
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require "mongo-fixture"
|
2
|
-
|
3
|
-
describe Mongo::Fixture do
|
4
|
-
context "two collections are to be inserted with references" do
|
5
|
-
before do
|
6
|
-
Fast.file.write "test/fixtures/references/users.yaml", "pepe:
|
7
|
-
username: pepe
|
8
|
-
password:
|
9
|
-
raw: secreto
|
10
|
-
processed: 252db48960f032db4bb604bc26f97106fa85ff88dedef3a28671b6bcd9f9644bf90d7e444d587c9351dfa237a6fc8fe38641a8469d084a166c7807d9c6564860
|
11
|
-
name: Pepe"
|
12
|
-
Fast.file.write "test/fixtures/references/sessions.yaml", "14_horas:
|
13
|
-
user:
|
14
|
-
users: pepe
|
15
|
-
time: 2012-07-30T14:02:40-03:00
|
16
|
-
y_tres_minutos:
|
17
|
-
user:
|
18
|
-
users: pepe
|
19
|
-
time: 2012-07-30T14:03:40-03:00
|
20
|
-
y_cuatro_minutos:
|
21
|
-
user:
|
22
|
-
users: pepe
|
23
|
-
time: 2012-07-30T14:04:40-03:00"
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should not fail!" do
|
27
|
-
collection = double 'coll', :count => 0, :insert => nil
|
28
|
-
database = double 'database'
|
29
|
-
database.stub :[] do |argument|
|
30
|
-
collection
|
31
|
-
end
|
32
|
-
Mongo::Fixture.new :references, database
|
33
|
-
end
|
34
|
-
|
35
|
-
after do
|
36
|
-
Fast.dir.remove! :test
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|