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.
Files changed (152) hide show
  1. data/CHANGELOG.md +9 -2
  2. data/README.md +18 -18
  3. data/lib/challah/test.rb +22 -5
  4. data/lib/challah/version.rb +1 -1
  5. data/test/audit_test.rb +32 -32
  6. data/test/controller_test.rb +9 -9
  7. data/test/cookie_store_test.rb +25 -25
  8. data/test/factories.rb +7 -7
  9. data/test/helper.rb +14 -12
  10. data/test/permission_test.rb +14 -14
  11. data/test/restrictions_controller_test.rb +29 -30
  12. data/test/role_test.rb +26 -26
  13. data/test/session_test.rb +65 -65
  14. data/test/sessions_controller_test.rb +13 -13
  15. data/test/simple_cookie_store_test.rb +25 -25
  16. data/test/user_test.rb +79 -79
  17. data/vendor/bundle/cache/factory_girl-3.0.0.gem +0 -0
  18. data/vendor/bundle/gems/factory_girl-3.0.0/Appraisals +11 -0
  19. data/vendor/bundle/gems/factory_girl-3.0.0/CONTRIBUTION_GUIDELINES.md +10 -0
  20. data/vendor/bundle/gems/factory_girl-3.0.0/Changelog +168 -0
  21. data/vendor/bundle/gems/factory_girl-3.0.0/GETTING_STARTED.md +735 -0
  22. data/vendor/bundle/gems/factory_girl-3.0.0/Gemfile +5 -0
  23. data/vendor/bundle/gems/factory_girl-3.0.0/Gemfile.lock +95 -0
  24. data/vendor/bundle/gems/factory_girl-3.0.0/LICENSE +19 -0
  25. data/vendor/bundle/gems/factory_girl-3.0.0/README.md +70 -0
  26. data/vendor/bundle/gems/factory_girl-3.0.0/Rakefile +38 -0
  27. data/vendor/bundle/gems/factory_girl-3.0.0/cucumber.yml +1 -0
  28. data/vendor/bundle/gems/factory_girl-3.0.0/factory_girl.gemspec +38 -0
  29. data/vendor/bundle/gems/factory_girl-3.0.0/features/factory_girl_steps.feature +237 -0
  30. data/vendor/bundle/gems/factory_girl-3.0.0/features/find_definitions.feature +75 -0
  31. data/vendor/bundle/gems/factory_girl-3.0.0/features/step_definitions/database_steps.rb +42 -0
  32. data/vendor/bundle/gems/factory_girl-3.0.0/features/step_definitions/factory_girl_steps.rb +43 -0
  33. data/vendor/bundle/gems/factory_girl-3.0.0/features/support/env.rb +11 -0
  34. data/vendor/bundle/gems/factory_girl-3.0.0/features/support/factories.rb +119 -0
  35. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/2.3.gemfile +7 -0
  36. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.0.gemfile +7 -0
  37. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.0.gemfile.lock +86 -0
  38. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.1.gemfile +7 -0
  39. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.1.gemfile.lock +95 -0
  40. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.2.gemfile +7 -0
  41. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.2.gemfile.lock +93 -0
  42. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl.rb +69 -0
  43. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/aliases.rb +19 -0
  44. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute.rb +40 -0
  45. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/association.rb +23 -0
  46. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/dynamic.rb +20 -0
  47. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/sequence.rb +17 -0
  48. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/static.rb +15 -0
  49. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb +73 -0
  50. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_list.rb +54 -0
  51. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/callback.rb +33 -0
  52. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration.rb +22 -0
  53. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/association.rb +25 -0
  54. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/dynamic.rb +25 -0
  55. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/implicit.rb +32 -0
  56. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/static.rb +25 -0
  57. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration_list.rb +48 -0
  58. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/definition.rb +76 -0
  59. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/definition_proxy.rb +159 -0
  60. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/errors.rb +19 -0
  61. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/evaluator.rb +76 -0
  62. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/evaluator_class_definer.rb +34 -0
  63. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/factory.rb +145 -0
  64. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/factory_runner.rb +24 -0
  65. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/find_definitions.rb +25 -0
  66. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/null_factory.rb +15 -0
  67. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/null_object.rb +7 -0
  68. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/registry.rb +46 -0
  69. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/reload.rb +8 -0
  70. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/sequence.rb +24 -0
  71. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/step_definitions.rb +130 -0
  72. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy.rb +32 -0
  73. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/attributes_for.rb +12 -0
  74. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/build.rb +15 -0
  75. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/create.rb +17 -0
  76. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/stub.rb +61 -0
  77. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy_calculator.rb +29 -0
  78. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax.rb +16 -0
  79. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/blueprint.rb +42 -0
  80. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/default.rb +56 -0
  81. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/generate.rb +70 -0
  82. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/make.rb +45 -0
  83. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/methods.rb +136 -0
  84. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/sham.rb +45 -0
  85. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/vintage.rb +130 -0
  86. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/trait.rb +29 -0
  87. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/version.rb +4 -0
  88. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/aliases_spec.rb +19 -0
  89. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attribute_aliases_spec.rb +45 -0
  90. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attribute_existing_on_object_spec.rb +68 -0
  91. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attributes_for_spec.rb +89 -0
  92. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attributes_from_instance_spec.rb +53 -0
  93. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attributes_ordered_spec.rb +51 -0
  94. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/build_list_spec.rb +41 -0
  95. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/build_spec.rb +89 -0
  96. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/build_stubbed_spec.rb +104 -0
  97. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/callbacks_spec.rb +47 -0
  98. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/create_list_spec.rb +82 -0
  99. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/create_spec.rb +117 -0
  100. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/define_child_before_parent_spec.rb +21 -0
  101. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/definition_spec.rb +26 -0
  102. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/definition_without_block_spec.rb +15 -0
  103. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/initialize_with_spec.rb +147 -0
  104. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/modify_factories_spec.rb +184 -0
  105. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/modify_inherited_spec.rb +52 -0
  106. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/nested_attributes_spec.rb +32 -0
  107. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/overrides_spec.rb +61 -0
  108. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/parent_spec.rb +90 -0
  109. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/sequence_spec.rb +33 -0
  110. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/stub_spec.rb +62 -0
  111. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/blueprint_spec.rb +34 -0
  112. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/generate_spec.rb +59 -0
  113. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/make_spec.rb +52 -0
  114. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/sham_spec.rb +43 -0
  115. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/vintage_spec.rb +217 -0
  116. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/traits_spec.rb +421 -0
  117. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/transient_attributes_spec.rb +124 -0
  118. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/aliases_spec.rb +31 -0
  119. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/association_spec.rb +28 -0
  120. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/dynamic_spec.rb +52 -0
  121. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/sequence_spec.rb +16 -0
  122. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/static_spec.rb +19 -0
  123. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute_list_spec.rb +78 -0
  124. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute_spec.rb +16 -0
  125. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/callback_spec.rb +41 -0
  126. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/declaration/implicit_spec.rb +25 -0
  127. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/declaration_list_spec.rb +71 -0
  128. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/definition_proxy_spec.rb +197 -0
  129. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/definition_spec.rb +104 -0
  130. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/evaluator_class_definer_spec.rb +54 -0
  131. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/factory_spec.rb +279 -0
  132. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/find_definitions_spec.rb +110 -0
  133. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/null_factory_spec.rb +13 -0
  134. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/null_object_spec.rb +8 -0
  135. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/registry_spec.rb +81 -0
  136. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/sequence_spec.rb +47 -0
  137. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/attributes_for_spec.rb +18 -0
  138. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/build_spec.rb +7 -0
  139. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/create_spec.rb +13 -0
  140. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/stub_spec.rb +40 -0
  141. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy_calculator_spec.rb +33 -0
  142. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy_spec.rb +21 -0
  143. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl_spec.rb +22 -0
  144. data/vendor/bundle/gems/factory_girl-3.0.0/spec/spec_helper.rb +26 -0
  145. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/macros/define_constant.rb +86 -0
  146. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/callback.rb +9 -0
  147. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/declaration.rb +71 -0
  148. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/delegate.rb +44 -0
  149. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/trait.rb +9 -0
  150. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/shared_examples/strategy.rb +104 -0
  151. data/vendor/bundle/specifications/factory_girl-3.0.0.gemspec +62 -0
  152. metadata +147 -12
@@ -0,0 +1,32 @@
1
+ require "spec_helper"
2
+
3
+ describe "association assignment from nested attributes" do
4
+ before do
5
+ define_model("Post", title: :string) do
6
+ has_many :comments
7
+ accepts_nested_attributes_for :comments
8
+ end
9
+
10
+ define_model("Comment", post_id: :integer, body: :text) do
11
+ belongs_to :post
12
+ end
13
+
14
+ FactoryGirl.define do
15
+ factory :post do
16
+ comments_attributes { [FactoryGirl.attributes_for(:comment), FactoryGirl.attributes_for(:comment)] }
17
+ end
18
+
19
+ factory :comment do
20
+ sequence(:body) {|n| "Body #{n}" }
21
+ end
22
+ end
23
+ end
24
+
25
+ it "assigns the correct amount of comments" do
26
+ FactoryGirl.create(:post).comments.count.should == 2
27
+ end
28
+
29
+ it "assigns the correct amount of comments when overridden" do
30
+ FactoryGirl.create(:post, :comments_attributes => [FactoryGirl.attributes_for(:comment)]).comments.count.should == 1
31
+ end
32
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe "attribute overrides" do
4
+ before do
5
+ define_model('User', admin: :boolean)
6
+ define_model('Post', title: :string,
7
+ secure: :boolean,
8
+ user_id: :integer) do
9
+ belongs_to :user
10
+
11
+ def secure=(value)
12
+ return unless user && user.admin?
13
+ write_attribute(:secure, value)
14
+ end
15
+ end
16
+
17
+ FactoryGirl.define do
18
+ factory :user do
19
+ factory :admin do
20
+ admin true
21
+ end
22
+ end
23
+
24
+ factory :post do
25
+ user
26
+ title "default title"
27
+ end
28
+ end
29
+ end
30
+
31
+ let(:admin) { FactoryGirl.create(:admin) }
32
+
33
+ let(:post_attributes) do
34
+ { secure: false }
35
+ end
36
+
37
+ let(:non_admin_post_attributes) do
38
+ post_attributes[:user] = FactoryGirl.create(:user)
39
+ post_attributes
40
+ end
41
+
42
+ let(:admin_post_attributes) do
43
+ post_attributes[:user] = admin
44
+ post_attributes
45
+ end
46
+
47
+ context "with an admin posting" do
48
+ subject { FactoryGirl.create(:post, admin_post_attributes) }
49
+ its(:secure) { should == false }
50
+ end
51
+
52
+ context "with a non-admin posting" do
53
+ subject { FactoryGirl.create(:post, non_admin_post_attributes) }
54
+ its(:secure) { should be_nil }
55
+ end
56
+
57
+ context "with no user posting" do
58
+ subject { FactoryGirl.create(:post, post_attributes) }
59
+ its(:secure) { should be_nil }
60
+ end
61
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ describe "an instance generated by a factory that inherits from another factory" do
4
+ before do
5
+ define_model("User", name: :string, admin: :boolean, email: :string, upper_email: :string, login: :string)
6
+
7
+ FactoryGirl.define do
8
+ factory :user do
9
+ name "John"
10
+ email { "#{name.downcase}@example.com" }
11
+ login { email }
12
+
13
+ factory :admin do
14
+ name "admin"
15
+ admin true
16
+ upper_email { email.upcase }
17
+ end
18
+
19
+ factory :guest do
20
+ email { "#{name}-guest@example.com" }
21
+ end
22
+
23
+ factory :no_email do
24
+ email ""
25
+ end
26
+
27
+ factory :bill do
28
+ name { "Bill" } #block to make attribute dynamic
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ describe "the parent class" do
35
+ subject { FactoryGirl.create(:user) }
36
+ it { should_not be_admin }
37
+ its(:email) { should == "john@example.com" }
38
+ end
39
+
40
+ describe "the child class redefining parent's static method used by a dynamic method" do
41
+ subject { FactoryGirl.create(:admin) }
42
+ it { should be_kind_of(User) }
43
+ it { should be_admin }
44
+ its(:name) { should == "admin" }
45
+ its(:email) { should == "admin@example.com" }
46
+ its(:upper_email) { should == "ADMIN@EXAMPLE.COM"}
47
+ end
48
+
49
+ describe "the child class redefining parent's dynamic method" do
50
+ subject { FactoryGirl.create(:guest) }
51
+ it { should_not be_admin }
52
+ its(:name) { should == "John" }
53
+ its(:email) { should eql "John-guest@example.com" }
54
+ its(:login) { should == "John-guest@example.com" }
55
+ end
56
+
57
+ describe "the child class redefining parent's dynamic attribute with static attribute" do
58
+ subject { FactoryGirl.create(:no_email) }
59
+ its(:email) { should == "" }
60
+ end
61
+
62
+ describe "the child class redefining parent's static attribute with dynamic attribute" do
63
+ subject { FactoryGirl.create(:bill) }
64
+ its(:name) { should == "Bill" }
65
+ end
66
+ end
67
+
68
+ describe "nested factories with different parents" do
69
+ before do
70
+ define_model("User", name: :string)
71
+
72
+ FactoryGirl.define do
73
+ factory :user do
74
+ name "Basic User"
75
+
76
+ factory :male_user do
77
+ name "John Doe"
78
+ end
79
+
80
+ factory :uppercase_male_user, parent: :male_user do
81
+ after_build {|user| user.name = user.name.upcase }
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+ it "honors :parent over the factory block nesting" do
88
+ FactoryGirl.build(:uppercase_male_user).name.should == "JOHN DOE"
89
+ end
90
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe "sequences" do
4
+ include FactoryGirl::Syntax::Methods
5
+
6
+ it "generates several values in the correct format" do
7
+ FactoryGirl.define do
8
+ sequence :email do |n|
9
+ "somebody#{n}@example.com"
10
+ end
11
+ end
12
+
13
+ first_value = generate(:email)
14
+ another_value = generate(:email)
15
+
16
+ first_value.should =~ /^somebody\d+@example\.com$/
17
+ another_value.should =~ /^somebody\d+@example\.com$/
18
+ first_value.should_not == another_value
19
+ end
20
+
21
+ it "generates sequential numbers if no block is given" do
22
+ FactoryGirl.define do
23
+ sequence :order
24
+ end
25
+
26
+ first_value = generate(:order)
27
+ another_value = generate(:order)
28
+
29
+ first_value.should == 1
30
+ another_value.should == 2
31
+ first_value.should_not == another_value
32
+ end
33
+ end
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+
3
+ describe "a stubbed instance" do
4
+ include FactoryGirl::Syntax::Methods
5
+
6
+ before do
7
+ define_model('User')
8
+
9
+ define_model('Post', user_id: :integer) do
10
+ belongs_to :user
11
+ end
12
+
13
+ FactoryGirl.define do
14
+ factory :user
15
+
16
+ factory :post do
17
+ user
18
+ end
19
+ end
20
+ end
21
+
22
+ subject { build_stubbed(:post) }
23
+
24
+ it "acts as if it came from the database" do
25
+ should_not be_new_record
26
+ end
27
+
28
+ it "assigns associations and acts as if it is saved" do
29
+ subject.user.should be_kind_of(User)
30
+ subject.user.should_not be_new_record
31
+ end
32
+ end
33
+
34
+ describe "a stubbed instance overriding strategy" do
35
+ include FactoryGirl::Syntax::Methods
36
+
37
+ before do
38
+ define_model('User')
39
+ define_model('Post', user_id: :integer) do
40
+ belongs_to :user
41
+ end
42
+
43
+ FactoryGirl.define do
44
+ factory :user
45
+
46
+ factory :post do
47
+ association(:user, strategy: :build)
48
+ end
49
+ end
50
+ end
51
+
52
+ subject { build_stubbed(:post) }
53
+
54
+ it "acts as if it is saved in the database" do
55
+ should_not be_new_record
56
+ end
57
+
58
+ it "assigns associations and acts as if it is saved" do
59
+ subject.user.should be_kind_of(User)
60
+ subject.user.should_not be_new_record
61
+ end
62
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ require 'factory_girl/syntax/blueprint'
4
+
5
+ describe "a blueprint" do
6
+ before do
7
+ define_model('User', first_name: :string, last_name: :string, email: :string)
8
+
9
+ FactoryGirl.define do
10
+ sequence(:email) { |n| "somebody#{n}@example.com" }
11
+ end
12
+
13
+ User.blueprint do
14
+ first_name { 'Bill' }
15
+ last_name { 'Nye' }
16
+ email { FactoryGirl.generate(:email) }
17
+ end
18
+ end
19
+
20
+ describe "after making an instance" do
21
+ before do
22
+ @instance = FactoryGirl.create(:user, last_name: 'Rye')
23
+ end
24
+
25
+ it "uses attributes from the blueprint" do
26
+ @instance.first_name.should == 'Bill'
27
+ end
28
+
29
+ it "evaluates attribute blocks for each instance" do
30
+ @instance.email.should =~ /somebody\d+@example.com/
31
+ FactoryGirl.create(:user).email.should_not == @instance.email
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ require 'factory_girl/syntax/generate'
4
+
5
+ describe "a factory using generate syntax" do
6
+ before do
7
+ define_model('User', first_name: :string, last_name: :string, email: :string) do
8
+ validates_presence_of :first_name
9
+ end
10
+
11
+ FactoryGirl.define do
12
+ factory :user do
13
+ first_name 'Bill'
14
+ last_name 'Nye'
15
+ email 'science@guys.net'
16
+ end
17
+ end
18
+ end
19
+
20
+ it "does not raise an error when generating an invalid instance" do
21
+ expect { User.generate(first_name: nil) }.to_not raise_error
22
+ end
23
+
24
+ it "raises an error when forcefully generating an invalid instance" do
25
+ expect { User.generate!(first_name: nil) }.to raise_error(ActiveRecord::RecordInvalid)
26
+ end
27
+
28
+ %w(generate generate! spawn).each do |method|
29
+ it "yields a generated instance when using #{method} with a block" do
30
+ saved_instance = nil
31
+ User.send(method) {|instance| saved_instance = instance }
32
+ saved_instance.should be_kind_of(User)
33
+ end
34
+
35
+ describe "after generating an instance using #{method}" do
36
+ before do
37
+ @instance = User.send(method, last_name: 'Rye')
38
+ end
39
+
40
+ it "uses attributes from the factory" do
41
+ @instance.first_name.should == 'Bill'
42
+ end
43
+
44
+ it "uses attributes passed to generate" do
45
+ @instance.last_name.should == 'Rye'
46
+ end
47
+
48
+ if method == 'spawn'
49
+ it "does not save the record" do
50
+ @instance.should be_new_record
51
+ end
52
+ else
53
+ it "does save the record" do
54
+ @instance.should_not be_new_record
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ require 'factory_girl/syntax/make'
4
+
5
+ describe "a factory using make syntax" do
6
+ before do
7
+ define_model('User', first_name: :string, last_name: :string)
8
+
9
+ FactoryGirl.define do
10
+ factory :user do
11
+ first_name 'Bill'
12
+ last_name 'Nye'
13
+ end
14
+ end
15
+ end
16
+
17
+ describe "after make" do
18
+ before do
19
+ @instance = User.make(last_name: 'Rye')
20
+ end
21
+
22
+ it "uses attributes from the factory" do
23
+ @instance.first_name.should == 'Bill'
24
+ end
25
+
26
+ it "uses attributes passed to make" do
27
+ @instance.last_name.should == 'Rye'
28
+ end
29
+
30
+ it "builds the record" do
31
+ @instance.should be_new_record
32
+ end
33
+ end
34
+
35
+ describe "after make!" do
36
+ before do
37
+ @instance = User.make!(last_name: 'Rye')
38
+ end
39
+
40
+ it "uses attributes from the factory" do
41
+ @instance.first_name.should == 'Bill'
42
+ end
43
+
44
+ it "uses attributes passed to make" do
45
+ @instance.last_name.should == 'Rye'
46
+ end
47
+
48
+ it "saves the record" do
49
+ @instance.should_not be_new_record
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ require 'factory_girl/syntax/sham'
4
+
5
+ describe "a factory using sham syntax" do
6
+ before do
7
+ define_model('User', first_name: :string,
8
+ last_name: :string,
9
+ email: :string,
10
+ username: :string)
11
+
12
+ Sham.name { "Name" }
13
+ Sham.email { "somebody#{rand(5)}@example.com" }
14
+ Sham.username("FOO") { |c| "User-#{c}" }
15
+
16
+ FactoryGirl.define do
17
+ factory :user do
18
+ first_name { Sham.name }
19
+ last_name { Sham.name }
20
+ email { Sham.email }
21
+ username { Sham.username }
22
+ end
23
+ end
24
+ end
25
+
26
+ describe "after making an instance" do
27
+ before do
28
+ @instance = FactoryGirl.create(:user, last_name: 'Rye')
29
+ end
30
+
31
+ it "supports a sham called 'name'" do
32
+ @instance.first_name.should == 'Name'
33
+ end
34
+
35
+ it "supports shams with starting values" do
36
+ @instance.username.should == 'User-FOO'
37
+ end
38
+
39
+ it "uses the sham for the email" do
40
+ @instance.email.should =~ /somebody\d@example.com/
41
+ end
42
+ end
43
+ end