Skip to content

Commit f62163e

Browse files
committed
WIP: Add options case for route_update_spec
1 parent 3d0f071 commit f62163e

File tree

1 file changed

+100
-1
lines changed

1 file changed

+100
-1
lines changed

spec/unit/actions/route_update_spec.rb

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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
134233
end

0 commit comments

Comments
 (0)