@@ -16,6 +16,9 @@ module VCAP::CloudController
1616 beet : 'formanova'
1717 }
1818 end
19+ let ( :old_options ) do
20+ '{"lb_algo": "round-robin"}'
21+ end
1922 let ( :new_labels ) do
2023 {
2124 cuisine : 'thai' ,
@@ -33,6 +36,9 @@ module VCAP::CloudController
3336 metadata : {
3437 labels : new_labels ,
3538 annotations : new_annotations
39+ } ,
40+ options : {
41+ lb_algo : 'round-robin'
3642 }
3743 }
3844 end
@@ -41,7 +47,96 @@ module VCAP::CloudController
4147 let ( :route ) { Route . make }
4248
4349 subject { RouteUpdate . new }
44- describe '#update' do
50+ describe '#update metadata' do
51+ context 'when the route has no existing metadata' do
52+ context 'when no metadata is specified' do
53+ let ( :body ) do
54+ { }
55+ end
56+
57+ it 'adds no metadata' do
58+ expect ( message ) . to be_valid
59+ subject . update ( route :, message :)
60+ route . reload
61+ expect ( route . labels . size ) . to eq ( 0 )
62+ expect ( route . annotations . size ) . to eq ( 0 )
63+ end
64+ end
65+
66+ context 'when metadata is specified' do
67+ it 'updates the route metadata' do
68+ expect ( message ) . to be_valid
69+ subject . update ( route :, message :)
70+
71+ route . reload
72+ expect ( route ) . to have_labels (
73+ { prefix : 'doordash.com' , key_name : 'potato' , value : 'mashed' } ,
74+ { prefix : nil , key_name : 'fruit' , value : 'strawberries' } ,
75+ { prefix : nil , key_name : 'cuisine' , value : 'thai' }
76+ )
77+ expect ( route ) . to have_annotations (
78+ { key_name : 'potato' , value : 'idaho' }
79+ )
80+ end
81+ end
82+ end
83+
84+ context 'when the route has existing metadata' do
85+ before do
86+ VCAP ::CloudController ::LabelsUpdate . update ( route , old_labels , VCAP ::CloudController ::RouteLabelModel )
87+ VCAP ::CloudController ::AnnotationsUpdate . update ( route , old_annotations , VCAP ::CloudController ::RouteAnnotationModel )
88+ end
89+
90+ context 'when no metadata is specified' do
91+ let ( :body ) do
92+ { }
93+ end
94+
95+ it 'adds no metadata' do
96+ expect ( message ) . to be_valid
97+ subject . update ( route :, message :)
98+ route . reload
99+ expect ( route ) . to have_labels (
100+ { prefix : nil , key_name : 'fruit' , value : 'peach' } ,
101+ { prefix : nil , key_name : 'clothing' , value : 'blouse' }
102+ )
103+ expect ( route ) . to have_annotations (
104+ { key_name : 'potato' , value : 'celandine' } ,
105+ { key_name : 'beet' , value : 'formanova' }
106+ )
107+ end
108+ end
109+
110+ context 'when metadata is specified' do
111+ let ( :body ) do
112+ {
113+ metadata : {
114+ labels : new_labels . merge ( fruit : nil , newstuff : 'here' ) ,
115+ annotations : new_annotations . merge ( beet : nil , asparagus : 'crunchy' )
116+ }
117+ }
118+ end
119+
120+ it 'updates some, deletes nils, leaves unspecified fields alone' do
121+ expect ( message ) . to be_valid
122+ subject . update ( route :, message :)
123+ route . reload
124+
125+ expect ( route ) . to have_labels (
126+ { prefix : 'doordash.com' , key_name : 'potato' , value : 'mashed' } ,
127+ { prefix : nil , key_name : 'clothing' , value : 'blouse' } ,
128+ { prefix : nil , key_name : 'newstuff' , value : 'here' } ,
129+ { prefix : nil , key_name : 'cuisine' , value : 'thai' }
130+ )
131+ expect ( route ) . to have_annotations (
132+ { key_name : 'potato' , value : 'idaho' } ,
133+ { key_name : 'asparagus' , value : 'crunchy' }
134+ )
135+ end
136+ end
137+ end
138+ end
139+ describe '#update options' do
45140 context 'when the route has no existing metadata' do
46141 context 'when no metadata is specified' do
47142 let ( :body ) do
@@ -71,6 +166,7 @@ module VCAP::CloudController
71166 expect ( route ) . to have_annotations (
72167 { key_name : 'potato' , value : 'idaho' }
73168 )
169+ expect ( route [ :options ] ) . to eq ( '{"lb_algo":"round-robin"}' )
74170 end
75171 end
76172 end
@@ -79,6 +175,7 @@ module VCAP::CloudController
79175 before do
80176 VCAP ::CloudController ::LabelsUpdate . update ( route , old_labels , VCAP ::CloudController ::RouteLabelModel )
81177 VCAP ::CloudController ::AnnotationsUpdate . update ( route , old_annotations , VCAP ::CloudController ::RouteAnnotationModel )
178+ route [ :options ] = '{"lb_algo": "round-robin"}'
82179 end
83180
84181 context 'when no metadata is specified' do
@@ -98,6 +195,7 @@ module VCAP::CloudController
98195 { key_name : 'potato' , value : 'celandine' } ,
99196 { key_name : 'beet' , value : 'formanova' }
100197 )
198+ expect ( route . options ) . to include ( { 'lb_algo' => 'round-robin' } )
101199 end
102200 end
103201
@@ -130,5 +228,6 @@ module VCAP::CloudController
130228 end
131229 end
132230 end
231+
133232 end
134233end
0 commit comments