branston 0.3.2 → 0.3.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 (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
-