branston 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/lib/branston/app/controllers/stories_controller.rb +104 -103
  2. data/lib/branston/coverage/app-controllers-application_controller_rb.html +1 -1
  3. data/lib/branston/coverage/app-controllers-iterations_controller_rb.html +107 -101
  4. data/lib/branston/coverage/app-controllers-outcomes_controller_rb.html +114 -102
  5. data/lib/branston/coverage/app-controllers-preconditions_controller_rb.html +54 -90
  6. data/lib/branston/coverage/app-controllers-releases_controller_rb.html +101 -89
  7. data/lib/branston/coverage/app-controllers-scenarios_controller_rb.html +94 -76
  8. data/lib/branston/coverage/app-controllers-sessions_controller_rb.html +60 -42
  9. data/lib/branston/coverage/app-controllers-stories_controller_rb.html +188 -110
  10. data/lib/branston/coverage/app-controllers-user_roles_controller_rb.html +123 -87
  11. data/lib/branston/coverage/app-controllers-users_controller_rb.html +39 -27
  12. data/lib/branston/coverage/app-helpers-application_helper_rb.html +26 -8
  13. data/lib/branston/coverage/app-helpers-iterations_helper_rb.html +1 -1
  14. data/lib/branston/coverage/app-helpers-outcomes_helper_rb.html +1 -1
  15. data/lib/branston/coverage/app-helpers-preconditions_helper_rb.html +1 -1
  16. data/lib/branston/coverage/app-helpers-releases_helper_rb.html +1 -1
  17. data/lib/branston/coverage/app-helpers-sessions_helper_rb.html +1 -1
  18. data/lib/branston/coverage/app-helpers-stories_helper_rb.html +1 -1
  19. data/lib/branston/coverage/app-helpers-user_roles_helper_rb.html +1 -1
  20. data/lib/branston/coverage/app-models-iteration_rb.html +1 -1
  21. data/lib/branston/coverage/app-models-outcome_rb.html +1 -1
  22. data/lib/branston/coverage/app-models-participation_rb.html +1 -1
  23. data/lib/branston/coverage/app-models-precondition_rb.html +9 -3
  24. data/lib/branston/coverage/app-models-release_rb.html +1 -1
  25. data/lib/branston/coverage/app-models-scenario_rb.html +3 -3
  26. data/lib/branston/coverage/app-models-story_rb.html +79 -7
  27. data/lib/branston/coverage/app-models-user_rb.html +1 -1
  28. data/lib/branston/coverage/app-models-user_role_rb.html +1 -1
  29. data/lib/branston/coverage/index.html +106 -90
  30. data/lib/branston/coverage/lib-client_rb.html +537 -0
  31. data/lib/branston/coverage/lib-faker_extras_rb.html +1 -1
  32. data/lib/branston/coverage/lib-story_generator_rb.html +43 -49
  33. data/lib/branston/db/test.sqlite3 +0 -0
  34. data/lib/branston/lib/branston.rb +5 -1
  35. data/lib/branston/lib/client.rb +48 -30
  36. data/lib/branston/test/functional/stories_controller_test.rb +119 -105
  37. data/lib/branston/test/unit/client_test.rb +34 -9
  38. data/lib/branston/tmp/performance/BrowsingTest#test_homepage_process_time_flat.txt +10 -0
  39. data/lib/branston/tmp/performance/BrowsingTest#test_homepage_process_time_graph.html +6603 -0
  40. data/lib/branston/tmp/performance/BrowsingTest#test_homepage_process_time_tree.txt +9714 -0
  41. metadata +6 -5
  42. data/lib/branston/db/production.sqlite3 +0 -0
  43. data/lib/branston/log/development.log +0 -10836
  44. data/lib/branston/log/test.log +0 -52955
@@ -201,7 +201,7 @@
201
201
  </tbody>
202
202
  </table>
203
203
 
204
- <p>Generated on Thu Dec 03 16:49:25 +0000 2009 with <a href="http://github.com/relevance/rcov">rcov 0.9.6</a></p>
204
+ <p>Generated on Wed Dec 09 15:45:09 +0000 2009 with <a href="http://github.com/relevance/rcov">rcov 0.9.2.1</a></p>
205
205
 
206
206
  </body>
207
207
  </html>
@@ -28,8 +28,8 @@
28
28
  <tbody>
29
29
  <tr>
30
30
  <td class="left_align"><a href="lib-story_generator_rb.html">lib/story_generator.rb</a></td>
31
- <td class='right_align'><tt>136</tt></td>
32
- <td class='right_align'><tt>113</tt></td>
31
+ <td class='right_align'><tt>135</tt></td>
32
+ <td class='right_align'><tt>112</tt></td>
33
33
  <td class="left_align"><div class="percent_graph_legend"><tt class=''>100.00%</tt></div>
34
34
  <div class="percent_graph">
35
35
  <div class="covered" style="width:100px"></div>
@@ -627,253 +627,247 @@
627
627
 
628
628
 
629
629
  <tr class="marked">
630
- <td><pre><a name="line96">96</a> gherkin += &quot;\t@wip\n&quot;</pre></td>
630
+ <td><pre><a name="line96">96</a> gherkin += &quot;\tScenario: &quot;</pre></td>
631
631
  </tr>
632
632
 
633
633
 
634
634
 
635
635
  <tr class="marked">
636
- <td><pre><a name="line97">97</a> gherkin += &quot;\tScenario: &quot;</pre></td>
636
+ <td><pre><a name="line97">97</a> gherkin += scenario.title</pre></td>
637
637
  </tr>
638
638
 
639
639
 
640
640
 
641
641
  <tr class="marked">
642
- <td><pre><a name="line98">98</a> gherkin += scenario.title</pre></td>
643
- </tr>
644
-
645
-
646
-
647
- <tr class="marked">
648
- <td><pre><a name="line99">99</a> gherkin += &quot;\n&quot;</pre></td>
642
+ <td><pre><a name="line98">98</a> gherkin += &quot;\n&quot;</pre></td>
649
643
  </tr>
650
644
 
651
645
 
652
646
 
653
647
  <tr class="inferred">
654
- <td><pre><a name="line100">100</a> </pre></td>
648
+ <td><pre><a name="line99">99</a> </pre></td>
655
649
  </tr>
656
650
 
657
651
 
658
652
 
659
653
  <tr class="marked">
660
- <td><pre><a name="line101">101</a> unless scenario.preconditions.empty?</pre></td>
654
+ <td><pre><a name="line100">100</a> unless scenario.preconditions.empty?</pre></td>
661
655
  </tr>
662
656
 
663
657
 
664
658
 
665
659
  <tr class="marked">
666
- <td><pre><a name="line102">102</a> scenario.preconditions.each_with_index do |p, i|</pre></td>
660
+ <td><pre><a name="line101">101</a> scenario.preconditions.each_with_index do |p, i|</pre></td>
667
661
  </tr>
668
662
 
669
663
 
670
664
 
671
665
  <tr class="marked">
672
- <td><pre><a name="line103">103</a> gherkin += &quot;\t\tGiven #{p.description}\n&quot; if i == 0</pre></td>
666
+ <td><pre><a name="line102">102</a> gherkin += &quot;\t\tGiven #{p.description}\n&quot; if i == 0</pre></td>
673
667
  </tr>
674
668
 
675
669
 
676
670
 
677
671
  <tr class="marked">
678
- <td><pre><a name="line104">104</a> gherkin += &quot;\t\t\tAnd #{p.description}\n&quot; unless i == 0</pre></td>
672
+ <td><pre><a name="line103">103</a> gherkin += &quot;\t\t\tAnd #{p.description}\n&quot; unless i == 0</pre></td>
679
673
  </tr>
680
674
 
681
675
 
682
676
 
683
677
  <tr class="inferred">
684
- <td><pre><a name="line105">105</a> end</pre></td>
678
+ <td><pre><a name="line104">104</a> end</pre></td>
685
679
  </tr>
686
680
 
687
681
 
688
682
 
689
683
  <tr class="inferred">
690
- <td><pre><a name="line106">106</a> end</pre></td>
684
+ <td><pre><a name="line105">105</a> end</pre></td>
691
685
  </tr>
692
686
 
693
687
 
694
688
 
695
689
  <tr class="inferred">
696
- <td><pre><a name="line107">107</a> </pre></td>
690
+ <td><pre><a name="line106">106</a> </pre></td>
697
691
  </tr>
698
692
 
699
693
 
700
694
 
701
695
  <tr class="marked">
702
- <td><pre><a name="line108">108</a> unless scenario.outcomes.empty?</pre></td>
696
+ <td><pre><a name="line107">107</a> unless scenario.outcomes.empty?</pre></td>
703
697
  </tr>
704
698
 
705
699
 
706
700
 
707
701
  <tr class="marked">
708
- <td><pre><a name="line109">109</a> scenario.outcomes.each_with_index do |o, i|</pre></td>
702
+ <td><pre><a name="line108">108</a> scenario.outcomes.each_with_index do |o, i|</pre></td>
709
703
  </tr>
710
704
 
711
705
 
712
706
 
713
707
  <tr class="marked">
714
- <td><pre><a name="line110">110</a> gherkin += &quot;\t\tThen #{o.description}\n&quot; if i==0</pre></td>
708
+ <td><pre><a name="line109">109</a> gherkin += &quot;\t\tThen #{o.description}\n&quot; if i==0</pre></td>
715
709
  </tr>
716
710
 
717
711
 
718
712
 
719
713
  <tr class="marked">
720
- <td><pre><a name="line111">111</a> gherkin += &quot;\t\t\tAnd #{o.description}\n&quot; unless i==0</pre></td>
714
+ <td><pre><a name="line110">110</a> gherkin += &quot;\t\t\tAnd #{o.description}\n&quot; unless i==0</pre></td>
721
715
  </tr>
722
716
 
723
717
 
724
718
 
725
719
  <tr class="inferred">
726
- <td><pre><a name="line112">112</a> end</pre></td>
720
+ <td><pre><a name="line111">111</a> end</pre></td>
727
721
  </tr>
728
722
 
729
723
 
730
724
 
731
725
  <tr class="inferred">
732
- <td><pre><a name="line113">113</a> end</pre></td>
726
+ <td><pre><a name="line112">112</a> end</pre></td>
733
727
  </tr>
734
728
 
735
729
 
736
730
 
737
731
  <tr class="inferred">
738
- <td><pre><a name="line114">114</a> </pre></td>
732
+ <td><pre><a name="line113">113</a> </pre></td>
739
733
  </tr>
740
734
 
741
735
 
742
736
 
743
737
  <tr class="marked">
744
- <td><pre><a name="line115">115</a> gherkin += &quot;\n&quot;</pre></td>
738
+ <td><pre><a name="line114">114</a> gherkin += &quot;\n&quot;</pre></td>
745
739
  </tr>
746
740
 
747
741
 
748
742
 
749
743
  <tr class="inferred">
750
- <td><pre><a name="line116">116</a> end</pre></td>
744
+ <td><pre><a name="line115">115</a> end</pre></td>
751
745
  </tr>
752
746
 
753
747
 
754
748
 
755
749
  <tr class="inferred">
756
- <td><pre><a name="line117">117</a> end</pre></td>
750
+ <td><pre><a name="line116">116</a> end</pre></td>
757
751
  </tr>
758
752
 
759
753
 
760
754
 
761
755
  <tr class="inferred">
762
- <td><pre><a name="line118">118</a> </pre></td>
756
+ <td><pre><a name="line117">117</a> </pre></td>
763
757
  </tr>
764
758
 
765
759
 
766
760
 
767
761
  <tr class="marked">
768
- <td><pre><a name="line119">119</a> File.open(FEATURE_PATH + feature_filename, 'w') {|f| f.write(gherkin) }</pre></td>
762
+ <td><pre><a name="line118">118</a> File.open(FEATURE_PATH + feature_filename, 'w') {|f| f.write(gherkin) }</pre></td>
769
763
  </tr>
770
764
 
771
765
 
772
766
 
773
767
  <tr class="inferred">
774
- <td><pre><a name="line120">120</a> end</pre></td>
768
+ <td><pre><a name="line119">119</a> end</pre></td>
775
769
  </tr>
776
770
 
777
771
 
778
772
 
779
773
  <tr class="inferred">
780
- <td><pre><a name="line121">121</a> </pre></td>
774
+ <td><pre><a name="line120">120</a> </pre></td>
781
775
  </tr>
782
776
 
783
777
 
784
778
 
785
779
  <tr class="marked">
786
- <td><pre><a name="line122">122</a> def regexp(string)</pre></td>
780
+ <td><pre><a name="line121">121</a> def regexp(string)</pre></td>
787
781
  </tr>
788
782
 
789
783
 
790
784
 
791
785
  <tr class="marked">
792
- <td><pre><a name="line123">123</a> pc = string.gsub(/&quot;([^\&quot;]*)&quot;/, '&quot;([^\&quot;]*)&quot;')</pre></td>
786
+ <td><pre><a name="line122">122</a> pc = string.gsub(/&quot;([^\&quot;]*)&quot;/, '&quot;([^\&quot;]*)&quot;')</pre></td>
793
787
  </tr>
794
788
 
795
789
 
796
790
 
797
791
  <tr class="marked">
798
- <td><pre><a name="line124">124</a> &quot;/^#{pc}$/&quot;</pre></td>
792
+ <td><pre><a name="line123">123</a> &quot;/^#{pc}$/&quot;</pre></td>
799
793
  </tr>
800
794
 
801
795
 
802
796
 
803
797
  <tr class="inferred">
804
- <td><pre><a name="line125">125</a> end</pre></td>
798
+ <td><pre><a name="line124">124</a> end</pre></td>
805
799
  </tr>
806
800
 
807
801
 
808
802
 
809
803
  <tr class="inferred">
810
- <td><pre><a name="line126">126</a> </pre></td>
804
+ <td><pre><a name="line125">125</a> </pre></td>
811
805
  </tr>
812
806
 
813
807
 
814
808
 
815
809
  <tr class="marked">
816
- <td><pre><a name="line127">127</a> def variables(string)</pre></td>
810
+ <td><pre><a name="line126">126</a> def variables(string)</pre></td>
817
811
  </tr>
818
812
 
819
813
 
820
814
 
821
815
  <tr class="marked">
822
- <td><pre><a name="line128">128</a> variables = string.split(/&quot;([^\&quot;]*)&quot;/)</pre></td>
816
+ <td><pre><a name="line127">127</a> variables = string.split(/&quot;([^\&quot;]*)&quot;/)</pre></td>
823
817
  </tr>
824
818
 
825
819
 
826
820
 
827
821
  <tr class="marked">
828
- <td><pre><a name="line129">129</a> variables.each_with_index do |v, i|</pre></td>
822
+ <td><pre><a name="line128">128</a> variables.each_with_index do |v, i|</pre></td>
829
823
  </tr>
830
824
 
831
825
 
832
826
 
833
827
  <tr class="marked">
834
- <td><pre><a name="line130">130</a> i % 2 == 0 ? variables[i] = nil : variables[i] = v</pre></td>
828
+ <td><pre><a name="line129">129</a> i % 2 == 0 ? variables[i] = nil : variables[i] = v</pre></td>
835
829
  </tr>
836
830
 
837
831
 
838
832
 
839
833
  <tr class="inferred">
840
- <td><pre><a name="line131">131</a> end</pre></td>
834
+ <td><pre><a name="line130">130</a> end</pre></td>
841
835
  </tr>
842
836
 
843
837
 
844
838
 
845
839
  <tr class="marked">
846
- <td><pre><a name="line132">132</a> variables.compact</pre></td>
840
+ <td><pre><a name="line131">131</a> variables.compact</pre></td>
847
841
  </tr>
848
842
 
849
843
 
850
844
 
851
845
  <tr class="inferred">
852
- <td><pre><a name="line133">133</a> end</pre></td>
846
+ <td><pre><a name="line132">132</a> end</pre></td>
853
847
  </tr>
854
848
 
855
849
 
856
850
 
857
851
  <tr class="inferred">
858
- <td><pre><a name="line134">134</a> </pre></td>
852
+ <td><pre><a name="line133">133</a> </pre></td>
859
853
  </tr>
860
854
 
861
855
 
862
856
 
863
857
  <tr class="inferred">
864
- <td><pre><a name="line135">135</a> end</pre></td>
858
+ <td><pre><a name="line134">134</a> end</pre></td>
865
859
  </tr>
866
860
 
867
861
 
868
862
 
869
863
  <tr class="inferred">
870
- <td><pre><a name="line136">136</a> </pre></td>
864
+ <td><pre><a name="line135">135</a> </pre></td>
871
865
  </tr>
872
866
 
873
867
  </tbody>
874
868
  </table>
875
869
 
876
- <p>Generated on Thu Dec 03 16:49:24 +0000 2009 with <a href="http://github.com/relevance/rcov">rcov 0.9.6</a></p>
870
+ <p>Generated on Wed Dec 09 15:45:09 +0000 2009 with <a href="http://github.com/relevance/rcov">rcov 0.9.2.1</a></p>
877
871
 
878
872
  </body>
879
873
  </html>
Binary file
@@ -66,7 +66,11 @@ class Branston
66
66
  if actions.first == 'server'
67
67
  launch_branston_server(options)
68
68
  elsif actions.first == 'generator'
69
- Client.new(options).generate_story_files
69
+ client = Client.new(options)
70
+ client.generate_story_files
71
+ client.errors.each do |error|
72
+ puts error
73
+ end
70
74
  elsif actions.first == 'init'
71
75
  initialise_branston(options)
72
76
  end
@@ -6,47 +6,65 @@ include StoryGenerator
6
6
 
7
7
  class Client
8
8
 
9
- attr_accessor :options
9
+ attr_accessor :options, :errors
10
10
 
11
11
  def initialize(options)
12
12
  self.options = options
13
+ self.errors = []
13
14
  end
14
15
 
15
16
  def generate_story_files
17
+ begin
18
+ return process_xml get_xml
19
+ rescue StandardError => e
20
+ errors << "Could not connect to Branston server on " +
21
+ "#{options[:Host]}:#{options[:Port]}: #{e.message}\n" +
22
+ "Is Branston running?"
23
+ end
24
+ end
25
+
26
+ def process_xml(xml)
27
+ errors.clear
16
28
 
17
- @xml = get_xml
18
- #puts @xml
19
- unless @xml.nil?
20
- root = @xml.root
21
- story = OpenStruct.new
22
- story.description = root.elements["/story/description"].text
23
- story.title = root.elements["/story/title"].text
24
- story.scenarios = []
25
- root.elements.each("/story/scenarios/scenario") { |scenario|
26
- s = OpenStruct.new
27
- s.preconditions = []
28
- s.outcomes = []
29
- s.title = scenario.elements["title"].text
30
-
31
- scenario.elements.each("preconditions/precondition") { |precondition|
32
- p = OpenStruct.new
33
- p.description = precondition.elements["description"].text
34
- s.preconditions << p
35
- }
36
-
37
- scenario.elements.each("outcomes/outcome") { |outcome|
38
- o = OpenStruct.new
39
- o.description = outcome.elements["description"].text
40
- s.outcomes << o
29
+ if xml.nil? or xml.root.nil? or xml.root.elements.nil?
30
+ errors << "Did not recieve XML data for story #{options[:feature]}.\n" +
31
+ "Is the Branston server running, and have you provided the correct story name?"
32
+ else
33
+
34
+ begin
35
+ root = xml.root
36
+ story = OpenStruct.new
37
+ story.description = root.elements["/story/description"].text
38
+ story.title = root.elements["/story/title"].text
39
+ story.scenarios = []
40
+ root.elements.each("/story/scenarios/scenario") { |scenario|
41
+ s = OpenStruct.new
42
+ s.preconditions = []
43
+ s.outcomes = []
44
+ s.title = scenario.elements["title"].text
45
+
46
+ scenario.elements.each("preconditions/precondition") { |precondition|
47
+ p = OpenStruct.new
48
+ p.description = precondition.elements["description"].text
49
+ s.preconditions << p
50
+ }
51
+
52
+ scenario.elements.each("outcomes/outcome") { |outcome|
53
+ o = OpenStruct.new
54
+ o.description = outcome.elements["description"].text
55
+ s.outcomes << o
56
+ }
57
+
58
+ story.scenarios << s
41
59
  }
42
60
 
43
- story.scenarios << s
44
- }
45
-
46
- generate(story)
61
+ generate(story)
62
+ rescue StandardError => error
63
+ errors << "Could not generate feature: " + error
64
+ end
47
65
  end
48
66
  end
49
-
67
+
50
68
  def get_xml
51
69
  Net::HTTP.start(options[:Host] , options[:Port]) { |http|
52
70
  req = Net::HTTP::Get.new("/stories/#{options[:feature]}.xml")
@@ -1,129 +1,143 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class StoriesControllerTest < ActionController::TestCase
4
-
4
+
5
5
  context "The StoriesController" do
6
- setup do
7
- login_as(User.make)
6
+ setup do
8
7
  @story = Factory.make_story
9
8
  end
10
-
11
- teardown do
12
- feature_file = FEATURE_PATH + @story.feature_filename
13
- FileUtils.rm feature_file if File.exists? feature_file
14
- step_file = FEATURE_PATH + @story.step_filename
15
- FileUtils.rm step_file if File.exists? step_file
16
- end
17
-
18
- should "show a list of all the stories" do
19
- get :index
20
- assert_response :success
21
- assert_not_nil assigns(:backlog_stories)
22
- end
23
-
24
- should "show a form to edit stories" do
25
- get :edit, :id => @story.to_param
26
- assert_response :success
27
- assert assigns(:iterations)
28
- end
29
-
30
- should "show a form to add stories" do
31
- get :new
32
- assert_response :success
33
- assert assigns(:iterations)
34
- end
35
-
36
- should "show details about a story" do
37
- get :show, :id => @story.to_param
38
- assert_response :success
39
- end
40
-
41
- should "delete a story" do
42
- assert_difference('Story.count', -1) do
43
- delete :destroy, :id => @story.to_param
9
+
10
+ context "with a logged-in user" do
11
+ setup do
12
+ login_as(User.make)
44
13
  end
45
-
46
- assert_redirected_to stories_path
47
- end
48
-
49
- should "generate the cucumber feature file for a story" do
50
- get :generate_feature, :id => @story.to_param, :path => 'test/features/'
51
- assert_response :success
52
- assert File.exists? FEATURE_PATH + @story.feature_filename
53
- assert File.exists? FEATURE_PATH + @story.step_filename
54
- end
55
-
56
- context "creating a story" do
57
-
58
- context "with valid params" do
59
- setup do
60
- assert_difference("Story.count") do
61
- post :create, :story => Story.plan
62
- end
63
- end
64
-
65
- should "redirect to show" do
66
- assert_redirected_to stories_path
67
- end
68
-
69
- should "not be associated with an iteration" do
70
- assert !assigns(:story).iteration
14
+
15
+ teardown do
16
+ feature_file = FEATURE_PATH + @story.feature_filename
17
+ FileUtils.rm feature_file if File.exists? feature_file
18
+ step_file = FEATURE_PATH + @story.step_filename
19
+ FileUtils.rm step_file if File.exists? step_file
20
+ end
21
+
22
+ should "show a list of all the stories" do
23
+ get :index
24
+ assert_response :success
25
+ assert_not_nil assigns(:backlog_stories)
26
+ end
27
+
28
+ should "show a form to edit stories" do
29
+ get :edit, :id => @story.to_param
30
+ assert_response :success
31
+ assert assigns(:iterations)
32
+ end
33
+
34
+ should "show a form to add stories" do
35
+ get :new
36
+ assert_response :success
37
+ assert assigns(:iterations)
38
+ end
39
+
40
+
41
+
42
+ should "delete a story" do
43
+ assert_difference('Story.count', -1) do
44
+ delete :destroy, :id => @story.to_param
71
45
  end
72
-
73
- context "including an iteration id" do
46
+
47
+ assert_redirected_to stories_path
48
+ end
49
+
50
+ should "generate the cucumber feature file for a story" do
51
+ get :generate_feature, :id => @story.to_param, :path => 'test/features/'
52
+ assert_response :success
53
+ assert File.exists? FEATURE_PATH + @story.feature_filename
54
+ assert File.exists? FEATURE_PATH + @story.step_filename
55
+ end
56
+
57
+ context "creating a story" do
58
+
59
+ context "with valid params" do
74
60
  setup do
75
61
  assert_difference("Story.count") do
76
- post :create, :story => Story.plan(:in_progress)
62
+ post :create, :story => Story.plan
77
63
  end
78
64
  end
79
-
80
- should "be associated with an iteration" do
81
- assert assigns(:story).iteration
65
+
66
+ should "redirect to show" do
67
+ assert_redirected_to stories_path
82
68
  end
83
- end
84
- end
85
-
86
- context "with invalid params" do
87
- setup do
88
- assert_no_difference("Story.count") do
89
- post :create, :story => {}
69
+
70
+ should "not be associated with an iteration" do
71
+ assert !assigns(:story).iteration
90
72
  end
91
- end
92
-
93
- should "redisplay" do
94
- assert_template 'new'
95
- assert assigns(:iterations)
96
- end
97
- end
98
- end
99
-
100
- context "updating a story" do
101
- context "with valid parameters" do
102
- setup do
103
- assert_no_difference("Story.count") do
104
- put :update,{ :id => @story.to_param, :story => {:description => "bar"}}
73
+
74
+ context "including an iteration id" do
75
+ setup do
76
+ assert_difference("Story.count") do
77
+ post :create, :story => Story.plan(:in_progress)
78
+ end
79
+ end
80
+
81
+ should "be associated with an iteration" do
82
+ assert assigns(:story).iteration
83
+ end
105
84
  end
106
85
  end
107
-
108
- should "redirect to show" do
109
- assert_redirected_to story_url(assigns(:story))
86
+
87
+ context "with invalid params" do
88
+ setup do
89
+ assert_no_difference("Story.count") do
90
+ post :create, :story => {}
91
+ end
92
+ end
93
+
94
+ should "redisplay" do
95
+ assert_template 'new'
96
+ assert assigns(:iterations)
97
+ end
110
98
  end
111
-
112
99
  end
113
-
114
- context "with invalid parameters" do
115
- setup do
116
- put :update, :id => @story.to_param, :story => {:description => ""}
100
+
101
+ context "updating a story" do
102
+ context "with valid parameters" do
103
+ setup do
104
+ assert_no_difference("Story.count") do
105
+ put :update,{ :id => @story.to_param, :story => {:description => "bar"}}
106
+ end
107
+ end
108
+
109
+ should "redirect to show" do
110
+ assert_redirected_to story_url(assigns(:story))
111
+ end
112
+
117
113
  end
118
-
119
- should "redisplay the edit template" do
120
- assert_template "edit"
121
- assert assigns(:iterations)
114
+
115
+ context "with invalid parameters" do
116
+ setup do
117
+ put :update, :id => @story.to_param, :story => {:description => ""}
118
+ end
119
+
120
+ should "redisplay the edit template" do
121
+ assert_template "edit"
122
+ assert assigns(:iterations)
123
+ end
122
124
  end
123
125
  end
126
+
124
127
  end
125
-
128
+
129
+ context "Without logging in, the StoriesController" do
130
+
131
+ should "show details about a story" do
132
+ get :show, :id => @story.to_param
133
+ assert_response :success
134
+ end
135
+
136
+ should "fail gracefully if the slug is not found" do
137
+ get :show, :id => 'none-such-story'
138
+ assert_response 404
139
+ end
140
+ end
141
+
126
142
  end
127
-
128
143
  end
129
-