challah 0.5.2 → 0.5.3
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/CHANGELOG.md +9 -2
- data/README.md +18 -18
- data/lib/challah/test.rb +22 -5
- data/lib/challah/version.rb +1 -1
- data/test/audit_test.rb +32 -32
- data/test/controller_test.rb +9 -9
- data/test/cookie_store_test.rb +25 -25
- data/test/factories.rb +7 -7
- data/test/helper.rb +14 -12
- data/test/permission_test.rb +14 -14
- data/test/restrictions_controller_test.rb +29 -30
- data/test/role_test.rb +26 -26
- data/test/session_test.rb +65 -65
- data/test/sessions_controller_test.rb +13 -13
- data/test/simple_cookie_store_test.rb +25 -25
- data/test/user_test.rb +79 -79
- data/vendor/bundle/cache/factory_girl-3.0.0.gem +0 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/Appraisals +11 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/CONTRIBUTION_GUIDELINES.md +10 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/Changelog +168 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/GETTING_STARTED.md +735 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/Gemfile +5 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/Gemfile.lock +95 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/LICENSE +19 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/README.md +70 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/Rakefile +38 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/cucumber.yml +1 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/factory_girl.gemspec +38 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/features/factory_girl_steps.feature +237 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/features/find_definitions.feature +75 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/features/step_definitions/database_steps.rb +42 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/features/step_definitions/factory_girl_steps.rb +43 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/features/support/env.rb +11 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/features/support/factories.rb +119 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/2.3.gemfile +7 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.0.gemfile +7 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.0.gemfile.lock +86 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.1.gemfile +7 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.1.gemfile.lock +95 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.2.gemfile +7 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.2.gemfile.lock +93 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl.rb +69 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/aliases.rb +19 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute.rb +40 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/association.rb +23 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/dynamic.rb +20 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/sequence.rb +17 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/static.rb +15 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb +73 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_list.rb +54 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/callback.rb +33 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration.rb +22 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/association.rb +25 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/dynamic.rb +25 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/implicit.rb +32 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/static.rb +25 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration_list.rb +48 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/definition.rb +76 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/definition_proxy.rb +159 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/errors.rb +19 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/evaluator.rb +76 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/evaluator_class_definer.rb +34 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/factory.rb +145 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/factory_runner.rb +24 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/find_definitions.rb +25 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/null_factory.rb +15 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/null_object.rb +7 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/registry.rb +46 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/reload.rb +8 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/sequence.rb +24 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/step_definitions.rb +130 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy.rb +32 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/attributes_for.rb +12 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/build.rb +15 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/create.rb +17 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/stub.rb +61 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy_calculator.rb +29 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax.rb +16 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/blueprint.rb +42 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/default.rb +56 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/generate.rb +70 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/make.rb +45 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/methods.rb +136 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/sham.rb +45 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/vintage.rb +130 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/trait.rb +29 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/version.rb +4 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/aliases_spec.rb +19 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attribute_aliases_spec.rb +45 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attribute_existing_on_object_spec.rb +68 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attributes_for_spec.rb +89 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attributes_from_instance_spec.rb +53 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attributes_ordered_spec.rb +51 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/build_list_spec.rb +41 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/build_spec.rb +89 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/build_stubbed_spec.rb +104 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/callbacks_spec.rb +47 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/create_list_spec.rb +82 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/create_spec.rb +117 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/define_child_before_parent_spec.rb +21 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/definition_spec.rb +26 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/definition_without_block_spec.rb +15 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/initialize_with_spec.rb +147 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/modify_factories_spec.rb +184 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/modify_inherited_spec.rb +52 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/nested_attributes_spec.rb +32 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/overrides_spec.rb +61 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/parent_spec.rb +90 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/sequence_spec.rb +33 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/stub_spec.rb +62 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/blueprint_spec.rb +34 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/generate_spec.rb +59 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/make_spec.rb +52 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/sham_spec.rb +43 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/vintage_spec.rb +217 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/traits_spec.rb +421 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/transient_attributes_spec.rb +124 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/aliases_spec.rb +31 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/association_spec.rb +28 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/dynamic_spec.rb +52 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/sequence_spec.rb +16 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/static_spec.rb +19 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute_list_spec.rb +78 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute_spec.rb +16 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/callback_spec.rb +41 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/declaration/implicit_spec.rb +25 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/declaration_list_spec.rb +71 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/definition_proxy_spec.rb +197 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/definition_spec.rb +104 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/evaluator_class_definer_spec.rb +54 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/factory_spec.rb +279 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/find_definitions_spec.rb +110 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/null_factory_spec.rb +13 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/null_object_spec.rb +8 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/registry_spec.rb +81 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/sequence_spec.rb +47 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/attributes_for_spec.rb +18 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/build_spec.rb +7 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/create_spec.rb +13 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/stub_spec.rb +40 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy_calculator_spec.rb +33 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy_spec.rb +21 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl_spec.rb +22 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/spec_helper.rb +26 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/macros/define_constant.rb +86 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/callback.rb +9 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/declaration.rb +71 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/delegate.rb +44 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/trait.rb +9 -0
- data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/shared_examples/strategy.rb +104 -0
- data/vendor/bundle/specifications/factory_girl-3.0.0.gemspec +62 -0
- metadata +147 -12
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "vintage syntax" do
|
|
4
|
+
before do
|
|
5
|
+
define_model('User', first_name: :string,
|
|
6
|
+
last_name: :string,
|
|
7
|
+
email: :string)
|
|
8
|
+
|
|
9
|
+
Factory.sequence(:email) { |n| "somebody#{n}@example.com" }
|
|
10
|
+
Factory.define :user do |factory|
|
|
11
|
+
factory.first_name { 'Bill' }
|
|
12
|
+
factory.last_name { 'Nye' }
|
|
13
|
+
factory.email { Factory.next(:email) }
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe "after making an instance" do
|
|
18
|
+
before do
|
|
19
|
+
@instance = Factory(:user, last_name: 'Rye')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should use attributes from the definition" do
|
|
23
|
+
@instance.first_name.should == 'Bill'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should evaluate attribute blocks for each instance" do
|
|
27
|
+
@instance.email.should =~ /somebody\d+@example.com/
|
|
28
|
+
Factory(:user).email.should_not == @instance.email
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "raises Factory::SequenceAbuseError" do
|
|
33
|
+
Factory.define :sequence_abuser, class: User do |factory|
|
|
34
|
+
factory.first_name { Factory.sequence(:name) }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
expect {
|
|
38
|
+
Factory(:sequence_abuser)
|
|
39
|
+
}.to raise_error(FactoryGirl::SequenceAbuseError)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe Factory, "referencing a nonexistent factory as a parent" do
|
|
44
|
+
it "raises an ArgumentError when trying to use a non-existent factory as parent" do
|
|
45
|
+
expect {
|
|
46
|
+
Factory.define(:child, parent: :nonexsitent) {}
|
|
47
|
+
Factory.build(:child)
|
|
48
|
+
}.to raise_error(ArgumentError)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
describe "defining a factory" do
|
|
53
|
+
before do
|
|
54
|
+
@name = :user
|
|
55
|
+
@factory = stub("factory", names: [@name])
|
|
56
|
+
@proxy = "proxy"
|
|
57
|
+
@options = { class: 'magic' }
|
|
58
|
+
FactoryGirl::Factory.stubs(new: @factory)
|
|
59
|
+
FactoryGirl::DefinitionProxy.stubs(new: @proxy)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "creates a new factory using the specified name and options" do
|
|
63
|
+
FactoryGirl::Factory.stubs(new: @factory)
|
|
64
|
+
Factory.define(@name, @options) {|f| }
|
|
65
|
+
FactoryGirl::Factory.should have_received(:new).with(@name, @options)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "passes the factory do the block" do
|
|
69
|
+
yielded = nil
|
|
70
|
+
Factory.define(@name) do |y|
|
|
71
|
+
yielded = y
|
|
72
|
+
end
|
|
73
|
+
yielded.should == @proxy
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "adds the factory to the list of factories" do
|
|
77
|
+
Factory.define(@name) {|f| }
|
|
78
|
+
@factory.should == FactoryGirl.factory_by_name(@name)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
describe "after defining a factory" do
|
|
83
|
+
before do
|
|
84
|
+
@name = :user
|
|
85
|
+
@factory = FactoryGirl::Factory.new(@name)
|
|
86
|
+
|
|
87
|
+
FactoryGirl.register_factory(@factory)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "uses Strategy::AttributesFor for Factory.attributes_for" do
|
|
91
|
+
@factory.stubs(run: "result")
|
|
92
|
+
Factory.attributes_for(@name, attr: 'value').should == 'result'
|
|
93
|
+
@factory.should have_received(:run).with(FactoryGirl::Strategy::AttributesFor, attr: 'value')
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "uses Strategy::Build for Factory.build" do
|
|
97
|
+
@factory.stubs(run: "result")
|
|
98
|
+
Factory.build(@name, attr: 'value').should == 'result'
|
|
99
|
+
@factory.should have_received(:run).with(FactoryGirl::Strategy::Build, attr: 'value')
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "uses Strategy::Create for Factory.create" do
|
|
103
|
+
@factory.stubs(run: "result")
|
|
104
|
+
Factory.create(@name, attr: 'value').should == 'result'
|
|
105
|
+
@factory.should have_received(:run).with(FactoryGirl::Strategy::Create, attr: 'value')
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "uses Strategy::Stub for Factory.stub" do
|
|
109
|
+
@factory.stubs(run: "result")
|
|
110
|
+
Factory.stub(@name, attr: 'value').should == 'result'
|
|
111
|
+
@factory.should have_received(:run).with(FactoryGirl::Strategy::Stub, attr: 'value')
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
[:build, :create, :attributes_for, :stub].each do |method|
|
|
115
|
+
it "raises an ArgumentError on #{method} with a nonexistent factory" do
|
|
116
|
+
expect { Factory.send(method, :bogus) }.to raise_error(ArgumentError)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "recognizes either 'name' or :name for Factory.#{method}" do
|
|
120
|
+
@factory.stubs(:run)
|
|
121
|
+
lambda { Factory.send(method, @name.to_s) }.should_not raise_error
|
|
122
|
+
lambda { Factory.send(method, @name.to_sym) }.should_not raise_error
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
describe "defining a sequence" do
|
|
128
|
+
before do
|
|
129
|
+
@name = :count
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "creates a new sequence" do
|
|
133
|
+
Factory.sequence(@name)
|
|
134
|
+
Factory.next(@name).should == 1
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it "uses the supplied block as the sequence generator" do
|
|
138
|
+
Factory.sequence(@name) {|n| "user-#{n}" }
|
|
139
|
+
Factory.next(@name).should == "user-1"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it "uses the supplied start_value as the sequence start_value" do
|
|
143
|
+
Factory.sequence(@name, "A")
|
|
144
|
+
Factory.next(@name).should == "A"
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
describe "after defining a sequence" do
|
|
149
|
+
before do
|
|
150
|
+
@name = :test
|
|
151
|
+
@sequence = FactoryGirl::Sequence.new(@name) {}
|
|
152
|
+
@value = '1 2 5'
|
|
153
|
+
|
|
154
|
+
@sequence.stubs(next: @value)
|
|
155
|
+
FactoryGirl::Sequence.stubs(new: @sequence)
|
|
156
|
+
|
|
157
|
+
Factory.sequence(@name) {}
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it "calls next on the sequence when sent next" do
|
|
161
|
+
Factory.next(@name)
|
|
162
|
+
@sequence.should have_received(:next)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it "returns the value from the sequence" do
|
|
166
|
+
Factory.next(@name).should == @value
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
describe "an attribute generated by an in-line sequence" do
|
|
171
|
+
before do
|
|
172
|
+
define_model('User', username: :string)
|
|
173
|
+
|
|
174
|
+
Factory.define :user do |factory|
|
|
175
|
+
factory.sequence(:username) { |n| "username#{n}" }
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
@username = Factory.attributes_for(:user)[:username]
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "matches the correct format" do
|
|
182
|
+
@username.should =~ /^username\d+$/
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
describe "after the attribute has already been generated once" do
|
|
186
|
+
before do
|
|
187
|
+
@another_username = Factory.attributes_for(:user)[:username]
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it "matches the correct format" do
|
|
191
|
+
@username.should =~ /^username\d+$/
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
it "is not the same as the first generated value" do
|
|
195
|
+
@another_username.should_not == @username
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
describe "a factory with a parent" do
|
|
202
|
+
before do
|
|
203
|
+
define_model("User", username: :string)
|
|
204
|
+
|
|
205
|
+
Factory.define(:user) do |factory|
|
|
206
|
+
factory.username "awesome_username"
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
Factory.define(:boring_user, parent: :user) do |factory|
|
|
210
|
+
factory.username "boring_username"
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it "supports defining parents" do
|
|
215
|
+
Factory.build(:boring_user).username.should == "boring_username"
|
|
216
|
+
end
|
|
217
|
+
end
|
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe "an instance generated by a factory with multiple traits" do
|
|
4
|
+
before do
|
|
5
|
+
define_model("User",
|
|
6
|
+
name: :string,
|
|
7
|
+
admin: :boolean,
|
|
8
|
+
gender: :string,
|
|
9
|
+
email: :string,
|
|
10
|
+
date_of_birth: :date,
|
|
11
|
+
great: :string)
|
|
12
|
+
|
|
13
|
+
FactoryGirl.define do
|
|
14
|
+
factory :user_without_admin_scoping, class: User do
|
|
15
|
+
admin_trait
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
factory :user do
|
|
19
|
+
name "John"
|
|
20
|
+
|
|
21
|
+
trait :great do
|
|
22
|
+
great "GREAT!!!"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
trait :admin do
|
|
26
|
+
admin true
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
trait :admin_trait do
|
|
30
|
+
admin true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
trait :male do
|
|
34
|
+
name "Joe"
|
|
35
|
+
gender "Male"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
trait :female do
|
|
39
|
+
name "Jane"
|
|
40
|
+
gender "Female"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
factory :great_user do
|
|
44
|
+
great
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
factory :admin, traits: [:admin]
|
|
48
|
+
|
|
49
|
+
factory :male_user do
|
|
50
|
+
male
|
|
51
|
+
|
|
52
|
+
factory :child_male_user do
|
|
53
|
+
date_of_birth { Date.parse("1/1/2000") }
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
factory :female, traits: [:female] do
|
|
58
|
+
trait :admin do
|
|
59
|
+
admin true
|
|
60
|
+
name "Judy"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
factory :female_great_user do
|
|
64
|
+
great
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
factory :female_admin_judy, traits: [:admin]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
factory :female_admin, traits: [:female, :admin]
|
|
71
|
+
factory :female_after_male_admin, traits: [:male, :female, :admin]
|
|
72
|
+
factory :male_after_female_admin, traits: [:female, :male, :admin]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
trait :email do
|
|
76
|
+
email { "#{name}@example.com" }
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
factory :user_with_email, class: User, traits: [:email] do
|
|
80
|
+
name "Bill"
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
context "the parent class" do
|
|
86
|
+
subject { FactoryGirl.create(:user) }
|
|
87
|
+
its(:name) { should == "John" }
|
|
88
|
+
its(:gender) { should be_nil }
|
|
89
|
+
it { should_not be_admin }
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
context "the child class with one trait" do
|
|
93
|
+
subject { FactoryGirl.create(:admin) }
|
|
94
|
+
its(:name) { should == "John" }
|
|
95
|
+
its(:gender) { should be_nil }
|
|
96
|
+
it { should be_admin }
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
context "the other child class with one trait" do
|
|
100
|
+
subject { FactoryGirl.create(:female) }
|
|
101
|
+
its(:name) { should == "Jane" }
|
|
102
|
+
its(:gender) { should == "Female" }
|
|
103
|
+
it { should_not be_admin }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
context "the child with multiple traits" do
|
|
107
|
+
subject { FactoryGirl.create(:female_admin) }
|
|
108
|
+
its(:name) { should == "Jane" }
|
|
109
|
+
its(:gender) { should == "Female" }
|
|
110
|
+
it { should be_admin }
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
context "the child with multiple traits and overridden attributes" do
|
|
114
|
+
subject { FactoryGirl.create(:female_admin, name: "Jill", gender: nil) }
|
|
115
|
+
its(:name) { should == "Jill" }
|
|
116
|
+
its(:gender) { should be_nil }
|
|
117
|
+
it { should be_admin }
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
context "the child with multiple traits who override the same attribute" do
|
|
121
|
+
context "when the male assigns name after female" do
|
|
122
|
+
subject { FactoryGirl.create(:male_after_female_admin) }
|
|
123
|
+
its(:name) { should == "Joe" }
|
|
124
|
+
its(:gender) { should == "Male" }
|
|
125
|
+
it { should be_admin }
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
context "when the female assigns name after male" do
|
|
129
|
+
subject { FactoryGirl.create(:female_after_male_admin) }
|
|
130
|
+
its(:name) { should == "Jane" }
|
|
131
|
+
its(:gender) { should == "Female" }
|
|
132
|
+
it { should be_admin }
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
context "child class with scoped trait and inherited trait" do
|
|
137
|
+
subject { FactoryGirl.create(:female_admin_judy) }
|
|
138
|
+
its(:name) { should == "Judy" }
|
|
139
|
+
its(:gender) { should == "Female" }
|
|
140
|
+
it { should be_admin }
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
context "factory using global trait" do
|
|
144
|
+
subject { FactoryGirl.create(:user_with_email) }
|
|
145
|
+
its(:name) { should == "Bill" }
|
|
146
|
+
its(:email) { should == "Bill@example.com"}
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
context "factory created with alternate syntax for specifying trait" do
|
|
150
|
+
subject { FactoryGirl.create(:male_user) }
|
|
151
|
+
its(:gender) { should == "Male" }
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
context "factory created with alternate syntax where trait name and attribute are the same" do
|
|
155
|
+
subject { FactoryGirl.create(:great_user) }
|
|
156
|
+
its(:great) { should == "GREAT!!!" }
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
context "factory created with alternate syntax where trait name and attribute are the same and attribute is overridden" do
|
|
160
|
+
subject { FactoryGirl.create(:great_user, great: "SORT OF!!!") }
|
|
161
|
+
its(:great) { should == "SORT OF!!!" }
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
context "child factory created where trait attributes are inherited" do
|
|
165
|
+
subject { FactoryGirl.create(:child_male_user) }
|
|
166
|
+
its(:gender) { should == "Male" }
|
|
167
|
+
its(:date_of_birth) { should == Date.parse("1/1/2000") }
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
context "factory outside of scope" do
|
|
171
|
+
subject { FactoryGirl.create(:user_without_admin_scoping) }
|
|
172
|
+
it { expect { subject }.to raise_error(ArgumentError, "Trait not registered: admin_trait") }
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
context "child factory using grandparents' trait" do
|
|
176
|
+
subject { FactoryGirl.create(:female_great_user) }
|
|
177
|
+
its(:great) { should == "GREAT!!!" }
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
describe "traits with callbacks" do
|
|
182
|
+
before do
|
|
183
|
+
define_model("User", name: :string)
|
|
184
|
+
|
|
185
|
+
FactoryGirl.define do
|
|
186
|
+
factory :user do
|
|
187
|
+
name "John"
|
|
188
|
+
|
|
189
|
+
trait :great do
|
|
190
|
+
after_create {|user| user.name.upcase! }
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
trait :awesome do
|
|
194
|
+
after_create {|user| user.name = "awesome" }
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
factory :caps_user, traits: [:great]
|
|
198
|
+
factory :awesome_user, traits: [:great, :awesome]
|
|
199
|
+
|
|
200
|
+
factory :caps_user_implicit_trait do
|
|
201
|
+
great
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
context "when the factory has a trait passed via arguments" do
|
|
208
|
+
subject { FactoryGirl.create(:caps_user) }
|
|
209
|
+
its(:name) { should == "JOHN" }
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
context "when the factory has an implicit trait" do
|
|
213
|
+
subject { FactoryGirl.create(:caps_user_implicit_trait) }
|
|
214
|
+
its(:name) { should == "JOHN" }
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it "executes callbacks in the order assigned" do
|
|
218
|
+
FactoryGirl.create(:awesome_user).name.should == "awesome"
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
describe "traits added via strategy" do
|
|
223
|
+
before do
|
|
224
|
+
define_model("User", name: :string, admin: :boolean)
|
|
225
|
+
|
|
226
|
+
FactoryGirl.define do
|
|
227
|
+
factory :user do
|
|
228
|
+
name "John"
|
|
229
|
+
|
|
230
|
+
trait :admin do
|
|
231
|
+
admin true
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
trait :great do
|
|
235
|
+
after_create {|user| user.name.upcase! }
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
context "adding traits in create" do
|
|
242
|
+
subject { FactoryGirl.create(:user, :admin, :great, name: "Joe") }
|
|
243
|
+
|
|
244
|
+
its(:admin) { should be_true }
|
|
245
|
+
its(:name) { should == "JOE" }
|
|
246
|
+
|
|
247
|
+
it "doesn't modify the user factory" do
|
|
248
|
+
subject
|
|
249
|
+
FactoryGirl.create(:user).should_not be_admin
|
|
250
|
+
FactoryGirl.create(:user).name.should == "John"
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
context "adding traits in build" do
|
|
255
|
+
subject { FactoryGirl.build(:user, :admin, :great, name: "Joe") }
|
|
256
|
+
|
|
257
|
+
its(:admin) { should be_true }
|
|
258
|
+
its(:name) { should == "Joe" }
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
context "adding traits in attributes_for" do
|
|
262
|
+
subject { FactoryGirl.attributes_for(:user, :admin, :great) }
|
|
263
|
+
|
|
264
|
+
its([:admin]) { should be_true }
|
|
265
|
+
its([:name]) { should == "John" }
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
context "adding traits in build_stubbed" do
|
|
269
|
+
subject { FactoryGirl.build_stubbed(:user, :admin, :great, name: "Jack") }
|
|
270
|
+
|
|
271
|
+
its(:admin) { should be_true }
|
|
272
|
+
its(:name) { should == "Jack" }
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
context "adding traits in create_list" do
|
|
276
|
+
subject { FactoryGirl.create_list(:user, 2, :admin, :great, name: "Joe") }
|
|
277
|
+
|
|
278
|
+
its(:length) { should == 2 }
|
|
279
|
+
|
|
280
|
+
it "creates all the records" do
|
|
281
|
+
subject.each do |record|
|
|
282
|
+
record.admin.should be_true
|
|
283
|
+
record.name.should == "JOE"
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
context "adding traits in build_list" do
|
|
289
|
+
subject { FactoryGirl.build_list(:user, 2, :admin, :great, name: "Joe") }
|
|
290
|
+
|
|
291
|
+
its(:length) { should == 2 }
|
|
292
|
+
|
|
293
|
+
it "builds all the records" do
|
|
294
|
+
subject.each do |record|
|
|
295
|
+
record.admin.should be_true
|
|
296
|
+
record.name.should == "Joe"
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
describe "traits and dynamic attributes that are applied simultaneously" do
|
|
303
|
+
before do
|
|
304
|
+
define_model("User", name: :string, email: :string, combined: :string)
|
|
305
|
+
|
|
306
|
+
FactoryGirl.define do
|
|
307
|
+
trait :email do
|
|
308
|
+
email { "#{name}@example.com" }
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
factory :user do
|
|
312
|
+
name "John"
|
|
313
|
+
email
|
|
314
|
+
combined { "#{name} <#{email}>" }
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
subject { FactoryGirl.build(:user) }
|
|
320
|
+
its(:name) { should == "John" }
|
|
321
|
+
its(:email) { should == "John@example.com" }
|
|
322
|
+
its(:combined) { should == "John <John@example.com>" }
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
describe "applying inline traits" do
|
|
326
|
+
before do
|
|
327
|
+
define_model("User") do
|
|
328
|
+
has_many :posts
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
define_model("Post", user_id: :integer) do
|
|
332
|
+
belongs_to :user
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
FactoryGirl.define do
|
|
336
|
+
factory :user do
|
|
337
|
+
trait :with_post do
|
|
338
|
+
posts { [ Post.new ] }
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
it "applies traits only to the instance generated for that call" do
|
|
345
|
+
FactoryGirl.create(:user, :with_post).posts.should_not be_empty
|
|
346
|
+
FactoryGirl.create(:user).posts.should be_empty
|
|
347
|
+
FactoryGirl.create(:user, :with_post).posts.should_not be_empty
|
|
348
|
+
end
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
describe "inline traits overriding existing attributes" do
|
|
352
|
+
before do
|
|
353
|
+
define_model("User", status: :string)
|
|
354
|
+
|
|
355
|
+
FactoryGirl.define do
|
|
356
|
+
factory :user do
|
|
357
|
+
status "pending"
|
|
358
|
+
|
|
359
|
+
trait(:accepted) { status "accepted" }
|
|
360
|
+
trait(:declined) { status "declined" }
|
|
361
|
+
|
|
362
|
+
factory :declined_user, traits: [:declined]
|
|
363
|
+
factory :extended_declined_user, traits: [:declined] do
|
|
364
|
+
status "extended_declined"
|
|
365
|
+
end
|
|
366
|
+
end
|
|
367
|
+
end
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
it "returns the default status" do
|
|
371
|
+
FactoryGirl.build(:user).status.should == "pending"
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
it "prefers inline trait attributes over default attributes" do
|
|
375
|
+
FactoryGirl.build(:user, :accepted).status.should == "accepted"
|
|
376
|
+
end
|
|
377
|
+
|
|
378
|
+
it "prefers traits on a factory over default attributes" do
|
|
379
|
+
FactoryGirl.build(:declined_user).status.should == "declined"
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
it "prefers inline trait attributes over traits on a factory" do
|
|
383
|
+
FactoryGirl.build(:declined_user, :accepted).status.should == "accepted"
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
it "prefers attributes on factories over attributes from non-inline traits" do
|
|
387
|
+
FactoryGirl.build(:extended_declined_user).status.should == "extended_declined"
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
it "prefers inline traits over attributes on factories" do
|
|
391
|
+
FactoryGirl.build(:extended_declined_user, :accepted).status.should == "accepted"
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
it "prefers overridden attributes over attributes from traits, inline traits, or attributes on factories" do
|
|
395
|
+
FactoryGirl.build(:extended_declined_user, :accepted, status: "completely overridden").status.should == "completely overridden"
|
|
396
|
+
end
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
describe "making sure the factory is properly compiled the first time we want to instantiate it" do
|
|
400
|
+
before do
|
|
401
|
+
define_model("User", role: :string, gender: :string, age: :integer)
|
|
402
|
+
|
|
403
|
+
FactoryGirl.define do
|
|
404
|
+
factory :user do
|
|
405
|
+
trait(:female) { gender "female" }
|
|
406
|
+
trait(:admin) { role "admin" }
|
|
407
|
+
|
|
408
|
+
factory :female_user do
|
|
409
|
+
female
|
|
410
|
+
end
|
|
411
|
+
end
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
it "can honor traits on the very first call" do
|
|
416
|
+
user = FactoryGirl.build(:female_user, :admin, age: 30)
|
|
417
|
+
user.gender.should == 'female'
|
|
418
|
+
user.age.should == 30
|
|
419
|
+
user.role.should == 'admin'
|
|
420
|
+
end
|
|
421
|
+
end
|