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,110 @@
1
+ require 'spec_helper'
2
+
3
+ share_examples_for "finds definitions" do
4
+ before do
5
+ FactoryGirl.stubs(:load)
6
+ FactoryGirl.find_definitions
7
+ end
8
+
9
+ subject { FactoryGirl }
10
+ end
11
+
12
+ RSpec::Matchers.define :load_definitions_from do |file|
13
+ match do |given|
14
+ @has_received = have_received(:load).with(File.expand_path(file))
15
+ @has_received.matches?(given)
16
+ end
17
+
18
+ description do
19
+ "load definitions from #{file}"
20
+ end
21
+
22
+ failure_message_for_should do
23
+ @has_received.failure_message
24
+ end
25
+ end
26
+
27
+ describe "definition loading" do
28
+ def self.in_directory_with_files(*files)
29
+ before do
30
+ @pwd = Dir.pwd
31
+ @tmp_dir = File.join(File.dirname(__FILE__), 'tmp')
32
+ FileUtils.mkdir_p @tmp_dir
33
+ Dir.chdir(@tmp_dir)
34
+
35
+ files.each do |file|
36
+ FileUtils.mkdir_p File.dirname(file)
37
+ FileUtils.touch file
38
+ end
39
+ end
40
+
41
+ after do
42
+ Dir.chdir(@pwd)
43
+ FileUtils.rm_rf(@tmp_dir)
44
+ end
45
+ end
46
+
47
+ describe "with factories.rb" do
48
+ in_directory_with_files 'factories.rb'
49
+ it_should_behave_like "finds definitions" do
50
+ it { should load_definitions_from('factories.rb') }
51
+ end
52
+ end
53
+
54
+ %w(spec test).each do |dir|
55
+ describe "with a factories file under #{dir}" do
56
+ in_directory_with_files File.join(dir, 'factories.rb')
57
+ it_should_behave_like "finds definitions" do
58
+ it { should load_definitions_from("#{dir}/factories.rb") }
59
+ end
60
+ end
61
+
62
+ describe "with a factories file under #{dir}/factories" do
63
+ in_directory_with_files File.join(dir, 'factories', 'post_factory.rb')
64
+ it_should_behave_like "finds definitions" do
65
+ it { should load_definitions_from("#{dir}/factories/post_factory.rb") }
66
+ end
67
+ end
68
+
69
+ describe "with several factories files under #{dir}/factories" do
70
+ in_directory_with_files File.join(dir, 'factories', 'post_factory.rb'),
71
+ File.join(dir, 'factories', 'person_factory.rb')
72
+ it_should_behave_like "finds definitions" do
73
+ it { should load_definitions_from("#{dir}/factories/post_factory.rb") }
74
+ it { should load_definitions_from("#{dir}/factories/person_factory.rb") }
75
+ end
76
+ end
77
+
78
+ describe "with several factories files under #{dir}/factories in non-alphabetical order" do
79
+ in_directory_with_files File.join(dir, 'factories', 'b.rb'),
80
+ File.join(dir, 'factories', 'a.rb')
81
+ it "loads the files in the right order" do
82
+ FactoryGirl.stubs(:load)
83
+ sorted_load_order = sequence("load order")
84
+ FactoryGirl.expects(:load).with(includes("a.rb")).in_sequence(sorted_load_order)
85
+ FactoryGirl.expects(:load).with(includes("b.rb")).in_sequence(sorted_load_order)
86
+ FactoryGirl.find_definitions
87
+ end
88
+ end
89
+
90
+ describe "with nested and unnested factories files under #{dir}" do
91
+ in_directory_with_files File.join(dir, 'factories.rb'),
92
+ File.join(dir, 'factories', 'post_factory.rb'),
93
+ File.join(dir, 'factories', 'person_factory.rb')
94
+ it_should_behave_like "finds definitions" do
95
+ it { should load_definitions_from("#{dir}/factories.rb") }
96
+ it { should load_definitions_from("#{dir}/factories/post_factory.rb") }
97
+ it { should load_definitions_from("#{dir}/factories/person_factory.rb") }
98
+ end
99
+ end
100
+
101
+ describe "with deeply nested factory files under #{dir}" do
102
+ in_directory_with_files File.join(dir, 'factories', 'subdirectory', 'post_factory.rb'),
103
+ File.join(dir, 'factories', 'subdirectory', 'person_factory.rb')
104
+ it_should_behave_like "finds definitions" do
105
+ it { should load_definitions_from("#{dir}/factories/subdirectory/post_factory.rb") }
106
+ it { should load_definitions_from("#{dir}/factories/subdirectory/person_factory.rb") }
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe FactoryGirl::NullFactory do
4
+ it { should delegate(:defined_traits).to(:definition) }
5
+ it { should delegate(:callbacks).to(:definition) }
6
+ it { should delegate(:attributes).to(:definition) }
7
+ it { should delegate(:constructor).to(:definition) }
8
+
9
+ its(:compile) { should be_nil }
10
+ its(:class_name) { should be_nil }
11
+ its(:attributes) { should be_an_instance_of(FactoryGirl::AttributeList) }
12
+ its(:evaluator_class) { should == FactoryGirl::Evaluator }
13
+ end
@@ -0,0 +1,8 @@
1
+ require "spec_helper"
2
+
3
+ describe FactoryGirl::NullObject do
4
+ its(:id) { should be_nil }
5
+ its(:age) { should be_nil }
6
+ its(:name) { should be_nil }
7
+ its(:admin?) { should be_nil }
8
+ end
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ describe FactoryGirl::Registry do
4
+ let(:aliases) { [:thing, :widget] }
5
+ let(:sequence) { FactoryGirl::Sequence.new(:email) { |n| "somebody#{n}@example.com" } }
6
+ let(:factory) { FactoryGirl::Factory.new(:object) }
7
+ let(:other_factory) { FactoryGirl::Factory.new(:string) }
8
+ let(:factory_with_aliases) { FactoryGirl::Factory.new(:string, aliases: aliases) }
9
+ let(:registry_name) { "Factory" }
10
+
11
+ subject { FactoryGirl::Registry.new(registry_name) }
12
+
13
+ it { should be_kind_of(Enumerable) }
14
+
15
+ it "finds a registered a factory" do
16
+ subject.add(factory)
17
+ subject.find(factory.name).should == factory
18
+ end
19
+
20
+ it "raises when finding an unregistered factory" do
21
+ expect { subject.find(:bogus) }.to raise_error(ArgumentError, "Factory not registered: bogus")
22
+ end
23
+
24
+ it "adds and returns a factory" do
25
+ subject.add(factory).should == factory
26
+ end
27
+
28
+ it "knows that a factory is registered by symbol" do
29
+ subject.add(factory)
30
+ subject.should be_registered(factory.name.to_sym)
31
+ end
32
+
33
+ it "knows that a factory is registered by string" do
34
+ subject.add(factory)
35
+ subject.should be_registered(factory.name.to_s)
36
+ end
37
+
38
+ it "knows that a factory isn't registered" do
39
+ subject.should_not be_registered("bogus")
40
+ end
41
+
42
+ it "can be accessed like a hash" do
43
+ subject.add(factory)
44
+ subject[factory.name].should == factory
45
+ end
46
+
47
+ it "iterates registered factories" do
48
+ subject.add(factory)
49
+ subject.add(other_factory)
50
+ subject.to_a.should =~ [factory, other_factory]
51
+ end
52
+
53
+ it "iterates registered factories uniquely with aliases" do
54
+ subject.add(factory)
55
+ subject.add(factory_with_aliases)
56
+ subject.to_a.should =~ [factory, factory_with_aliases]
57
+ end
58
+
59
+ it "registers an sequence" do
60
+ subject.add(sequence)
61
+ subject.find(:email).should == sequence
62
+ end
63
+
64
+ it "doesn't allow a duplicate name" do
65
+ expect { 2.times { subject.add(factory) } }.
66
+ to raise_error(FactoryGirl::DuplicateDefinitionError, "Factory already registered: object")
67
+ end
68
+
69
+ it "registers aliases" do
70
+ subject.add(factory_with_aliases)
71
+ aliases.each do |name|
72
+ subject.find(name).should == factory_with_aliases
73
+ end
74
+ end
75
+
76
+ it "clears registered factories" do
77
+ subject.add(factory)
78
+ subject.clear
79
+ subject.count.should be_zero
80
+ end
81
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe FactoryGirl::Sequence do
4
+ describe "a basic sequence" do
5
+ let(:name) { :test }
6
+ subject { FactoryGirl::Sequence.new(name) {|n| "=#{n}" } }
7
+
8
+ its(:name) { should == name }
9
+ its(:names) { should == [name] }
10
+ its(:next) { should == "=1" }
11
+
12
+ describe "when incrementing" do
13
+ before { subject.next }
14
+ its(:next) { should == "=2" }
15
+ end
16
+ end
17
+
18
+ describe "a custom sequence" do
19
+ subject { FactoryGirl::Sequence.new(:name, "A") {|n| "=#{n}" } }
20
+ its(:next) { should == "=A" }
21
+
22
+ describe "when incrementing" do
23
+ before { subject.next }
24
+ its(:next) { should == "=B" }
25
+ end
26
+ end
27
+
28
+ describe "a basic sequence without a block" do
29
+ subject { FactoryGirl::Sequence.new(:name) }
30
+ its(:next) { should == 1 }
31
+
32
+ describe "when incrementing" do
33
+ before { subject.next }
34
+ its(:next) { should == 2 }
35
+ end
36
+ end
37
+
38
+ describe "a custom sequence without a block" do
39
+ subject { FactoryGirl::Sequence.new(:name, "A") }
40
+ its(:next) { should == "A" }
41
+
42
+ describe "when incrementing" do
43
+ before { subject.next }
44
+ its(:next) { should == "B" }
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe FactoryGirl::Strategy::AttributesFor do
4
+ let(:result) { { name: "John Doe", gender: "Male", admin: false } }
5
+ let(:attribute_assigner) { stub("attribute assigner", hash: result) }
6
+
7
+ it_should_behave_like "strategy without association support"
8
+
9
+ it "returns the hash from the attribute assigner" do
10
+ subject.result(attribute_assigner, lambda {|item| item }).should == result
11
+ end
12
+
13
+ it "does not run the to_create block" do
14
+ expect do
15
+ subject.result(attribute_assigner, lambda {|item| raise "failed" })
16
+ end.to_not raise_error
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ require "spec_helper"
2
+
3
+ describe FactoryGirl::Strategy::Build do
4
+ it_should_behave_like "strategy with association support", FactoryGirl::Strategy::Create
5
+ it_should_behave_like "strategy with callbacks", :after_build
6
+ it_should_behave_like "strategy with strategy: :build", FactoryGirl::Strategy::Build
7
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe FactoryGirl::Strategy::Create do
4
+ it_should_behave_like "strategy with association support", FactoryGirl::Strategy::Create
5
+ it_should_behave_like "strategy with callbacks", :after_build, :after_create
6
+
7
+ it "runs a custom create block" do
8
+ block_run = false
9
+ block = lambda {|instance| block_run = true }
10
+ subject.result(stub("assigner", object: stub("result instance")), block)
11
+ block_run.should be_true
12
+ end
13
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe FactoryGirl::Strategy::Stub do
4
+ it_should_behave_like "strategy with association support", FactoryGirl::Strategy::Stub
5
+ it_should_behave_like "strategy with callbacks", :after_stub
6
+ it_should_behave_like "strategy with strategy: :build", FactoryGirl::Strategy::Stub
7
+
8
+ context "asking for a result" do
9
+ before { Timecop.freeze(Time.now) }
10
+ after { Timecop.return }
11
+ let(:result_instance) do
12
+ define_class("ResultInstance") do
13
+ attr_accessor :id
14
+ end.new
15
+ end
16
+
17
+ let(:assigner) { stub("attribute assigner", object: result_instance) }
18
+ let(:to_create) { lambda {|instance| instance } }
19
+
20
+ it { subject.result(assigner, to_create).should_not be_new_record }
21
+ it { subject.result(assigner, to_create).should be_persisted }
22
+
23
+ it "assigns created_at" do
24
+ created_at = subject.result(assigner, to_create).created_at
25
+ created_at.should == Time.now
26
+
27
+ Timecop.travel(150000)
28
+
29
+ subject.result(assigner, to_create).created_at.should == created_at
30
+ end
31
+
32
+ [:save, :destroy, :connection, :reload, :update_attribute].each do |database_method|
33
+ it "raises when attempting to connect to the database by calling #{database_method}" do
34
+ expect do
35
+ subject.result(assigner, to_create).send(database_method)
36
+ end.to raise_error(RuntimeError, "stubbed models are not allowed to access the database")
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe FactoryGirl::StrategyCalculator, "with a FactoryGirl::Strategy object" do
4
+ let(:strategy) { FactoryGirl::Strategy::Build }
5
+
6
+ it "returns the strategy object" do
7
+ FactoryGirl::StrategyCalculator.new(strategy).strategy.should == strategy
8
+ end
9
+ end
10
+
11
+ describe FactoryGirl::StrategyCalculator, "with a non-FactoryGirl::Strategy object" do
12
+ before { define_class "MyAwesomeStrategy" }
13
+
14
+ let(:strategy) { MyAwesomeStrategy }
15
+
16
+ it "returns the strategy object" do
17
+ expect { FactoryGirl::StrategyCalculator.new(strategy).strategy }.to raise_error "unrecognized method MyAwesomeStrategy"
18
+ end
19
+ end
20
+
21
+ describe FactoryGirl::StrategyCalculator do
22
+ it "returns the correct strategy object for :build" do
23
+ FactoryGirl::StrategyCalculator.new(:build).strategy.should == FactoryGirl::Strategy::Build
24
+ end
25
+
26
+ it "returns the correct strategy object for :create" do
27
+ FactoryGirl::StrategyCalculator.new(:create).strategy.should == FactoryGirl::Strategy::Create
28
+ end
29
+
30
+ it "raises when passing a bogus strategy" do
31
+ expect { FactoryGirl::StrategyCalculator.new(:bogus_strategy).strategy }.to raise_error "unrecognized method bogus_strategy"
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe FactoryGirl::Strategy do
4
+ it "raises an error when asking for the result" do
5
+ expect { subject.result(stub("assigner"), lambda {|instance| instance }) }.to raise_error(NotImplementedError, "Strategies must return a result")
6
+ end
7
+
8
+ it "raises an error when asking for the association" do
9
+ expect { subject.association(stub("runner")) }.to raise_error(NotImplementedError, "Strategies must return an association")
10
+ end
11
+ end
12
+
13
+ describe FactoryGirl::Strategy, ".ensure_strategy_exists!" do
14
+ it "raises when passed a nonexistent strategy" do
15
+ expect { FactoryGirl::Strategy.ensure_strategy_exists!(:nonexistent) }.to raise_error(ArgumentError, "Unknown strategy: nonexistent")
16
+ end
17
+
18
+ it "doesn't raise when passed a valid strategy" do
19
+ expect { FactoryGirl::Strategy.ensure_strategy_exists!(:create) }.to_not raise_error
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ require "spec_helper"
2
+
3
+ describe FactoryGirl do
4
+ let(:factory) { FactoryGirl::Factory.new(:object) }
5
+ let(:sequence) { FactoryGirl::Sequence.new(:email) }
6
+ let(:trait) { FactoryGirl::Trait.new(:admin) }
7
+
8
+ it "finds a registered factory" do
9
+ FactoryGirl.register_factory(factory)
10
+ FactoryGirl.factory_by_name(factory.name).should == factory
11
+ end
12
+
13
+ it "finds a registered sequence" do
14
+ FactoryGirl.register_sequence(sequence)
15
+ FactoryGirl.sequence_by_name(sequence.name).should == sequence
16
+ end
17
+
18
+ it "finds a registered trait" do
19
+ FactoryGirl.register_trait(trait)
20
+ FactoryGirl.trait_by_name(trait.name).should == trait
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
2
+ $LOAD_PATH << File.join(File.dirname(__FILE__))
3
+
4
+ require 'rubygems'
5
+ require 'rspec'
6
+ require 'rspec/autorun'
7
+
8
+ require "simplecov"
9
+ SimpleCov.start
10
+
11
+ require 'factory_girl'
12
+ require "mocha"
13
+ require "bourne"
14
+ require "timecop"
15
+
16
+ Dir["spec/support/**/*.rb"].each { |f| require File.expand_path(f) }
17
+
18
+ RSpec.configure do |config|
19
+ config.mock_framework = :mocha
20
+
21
+ config.include DeclarationMatchers
22
+
23
+ config.after do
24
+ FactoryGirl.reload
25
+ end
26
+ end