11require "rails_helper"
22
33describe "routes/show.html.erb" do
4- let ( :form ) { build_stubbed :form , pages : }
4+ let ( :form ) { build_stubbed :form , :with_pages , pages : }
55 let ( :pages ) { [ ] }
6- let ( :routes ) { [ ] }
7- let ( :routes_input ) { build :routes_input , form :, routes : }
6+ let ( :routes_input ) { build ( :routes_input , form :) . assign_form_values }
87
98 def render_page
109 assign ( :current_form , form )
@@ -29,15 +28,32 @@ def render_page
2928 end
3029
3130 context "when the form has pages and routes" do
32- let ( :pages ) { build_stubbed_list ( :page , 3 ) }
33- let ( :routes ) do
31+ let ( :pages ) do
3432 [
35- build ( :route_input , page : pages . first , goto : pages . third . id , goto_options : [ ] ) ,
36- build ( :route_input , :default , page : pages . second , goto_options : [ ] ) ,
37- build ( :route_input , :default , page : pages . third , goto_options : [ ] ) ,
33+ build_stubbed (
34+ :page ,
35+ id : 101 ,
36+ routing_conditions : [
37+ build_stubbed (
38+ :condition ,
39+ routing_page_id : 101 ,
40+ goto_page_id : 103 ,
41+ answer_value : nil ,
42+ ) ,
43+ ] ,
44+ ) ,
45+ build_stubbed ( :page , id : 102 ) ,
46+ build_stubbed ( :page , id : 103 ) ,
3847 ]
3948 end
4049
50+ it "has a summary list with a row for each page" do
51+ render_page
52+ expect ( rendered ) . to have_selector ( ".govuk-summary-list" ) do |summary_list |
53+ expect ( summary_list ) . to have_selector ( ".govuk-summary-list__row" , count : pages . length )
54+ end
55+ end
56+
4157 it "displays the page's position and question text" do
4258 render_page
4359 expect ( rendered ) . to have_selector ( ".govuk-summary-list__key" , text : pages . first . position . to_s )
@@ -48,5 +64,82 @@ def render_page
4864 render_page
4965 expect ( rendered ) . to have_selector ( "#page-#{ pages . first . position } " )
5066 end
67+
68+ it "has a select field for each page except the last one" do
69+ render_page
70+ expect ( rendered ) . to have_selector ( '.govuk-select[name="forms_routes_input[routes_attributes][0][goto]"]' )
71+ expect ( rendered ) . to have_selector ( '.govuk-select[name="forms_routes_input[routes_attributes][1][goto]"]' )
72+ expect ( rendered ) . not_to have_selector ( '.govuk-select[name="forms_routes_input[routes_attributes][2][goto]"]' )
73+ end
74+
75+ it "has options for where the route should go to for each select field" do
76+ render_page
77+
78+ def select_options ( select_field )
79+ select_field . find_all ( "option" ) . map { [ it [ "value" ] , it . text ] }
80+ end
81+
82+ expect ( rendered ) . to have_selector ( '.govuk-select[name="forms_routes_input[routes_attributes][0][goto]"]' ) do |field |
83+ expect ( select_options ( field ) ) . to eq [
84+ [ "default" , "Go to question 2" ] ,
85+ [ "103" , "3. #{ pages . third . question_text } " ] ,
86+ [ "end_of_form" , "End of the form" ] ,
87+ ]
88+ end
89+
90+ expect ( rendered ) . to have_selector ( '.govuk-select[name="forms_routes_input[routes_attributes][1][goto]"]' ) do |field |
91+ expect ( select_options ( field ) ) . to eq [
92+ [ "default" , "Go to question 3" ] ,
93+ [ "end_of_form" , "End of the form" ] ,
94+ ]
95+ end
96+ end
97+
98+ it "shows the selected goto page for the route" do
99+ render_page
100+
101+ expect ( rendered ) . to have_selector ( '.govuk-select[name="forms_routes_input[routes_attributes][0][goto]"]' ) do |field |
102+ expect ( field ) . to have_selector ( "option[selected]" ) do |option |
103+ expect ( option [ "value" ] ) . to eq "103"
104+ end
105+ end
106+
107+ expect ( rendered ) . to have_selector ( '.govuk-select[name="forms_routes_input[routes_attributes][1][goto]"]' ) do |field |
108+ expect ( field ) . to have_selector ( "option[selected]" ) do |option |
109+ expect ( option [ "value" ] ) . to eq "default"
110+ end
111+ end
112+ end
113+
114+ context "when the route goes to a page before the routing page" do
115+ let ( :pages ) do
116+ [
117+ build_stubbed ( :page , id : 101 ) ,
118+ build_stubbed (
119+ :page ,
120+ id : 102 ,
121+ routing_conditions : [
122+ build_stubbed (
123+ :condition ,
124+ routing_page_id : 102 ,
125+ goto_page_id : 101 ,
126+ answer_value : nil ,
127+ ) ,
128+ ] ,
129+ ) ,
130+ build_stubbed ( :page , id : 103 ) ,
131+ ]
132+ end
133+
134+ it "shows the selected goto page for the route" do
135+ render_page
136+
137+ expect ( rendered ) . to have_selector ( '.govuk-select[name="forms_routes_input[routes_attributes][1][goto]"]' ) do |field |
138+ expect ( field ) . to have_selector ( "option[selected]" ) do |option |
139+ expect ( option [ "value" ] ) . to eq "101"
140+ end
141+ end
142+ end
143+ end
51144 end
52145end
0 commit comments