-
Notifications
You must be signed in to change notification settings - Fork 21
/
web_spec.rb
117 lines (93 loc) · 3.58 KB
/
web_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
require 'spec_helper'
ENV['APP_ENV'] = 'test'
RSpec.describe 'Web UI' do
include Rack::Test::Methods
def app
Rollout::UI::Web
end
it "renders index html" do
get '/'
expect(last_response).to be_ok
expect(last_response.body).to include('Rollout UI')
end
it "renders index json" do
ROLLOUT.activate(:fake_test_feature_for_rollout_ui_webspec)
header 'Accept', 'application/json'
get '/'
expect(last_response).to be_ok
expect(last_response.headers).to include('Content-Type' => 'application/json')
response = JSON.parse(last_response.body)
expected_response = {
"data"=>{},
"groups"=>[],
"name"=>"fake_test_feature_for_rollout_ui_webspec",
"percentage"=>100.0
}
expect(response).to include(expected_response)
ROLLOUT.delete(:fake_test_feature_for_rollout_ui_webspec)
end
it "renders index json filtered by user and group" do
ROLLOUT.deactivate(:fake_test_feature_for_rollout_ui_webspec)
ROLLOUT.activate_user(:fake_test_feature_for_rollout_ui_webspec, 'fake_user')
ROLLOUT.activate_group(:fake_test_feature_for_rollout_ui_webspec, :fake_group)
header 'Accept', 'application/json'
get '/?user=different_user'
expect(last_response).to be_ok
expect(last_response.headers).to include('Content-Type' => 'application/json')
response = JSON.parse(last_response.body)
expect(response).to be_empty
expected_feature = {
"data" => {},
"groups" => ["fake_group"],
"name" => "fake_test_feature_for_rollout_ui_webspec",
"percentage" => 0.0
}
header 'Accept', 'application/json'
get '/?user=fake_user'
expect(last_response).to be_ok
expect(last_response.headers).to include('Content-Type' => 'application/json')
response = JSON.parse(last_response.body)
expect(response).to include(expected_feature)
header 'Accept', 'application/json'
get '/?group=fake_group'
expect(last_response).to be_ok
expect(last_response.headers).to include('Content-Type' => 'application/json')
response = JSON.parse(last_response.body)
expect(response).to include(expected_feature)
ROLLOUT.deactivate_user(:fake_test_feature_for_rollout_ui_webspec, 'fake_user')
ROLLOUT.deactivate_group(:fake_test_feature_for_rollout_ui_webspec, :fake_group)
ROLLOUT.delete(:fake_test_feature_for_rollout_ui_webspec)
end
it "rescapes javascript in the action index" do
ROLLOUT.activate(:'+alert(1)+')
get '/'
expect(last_response).to be_ok
expect(last_response.body).to include('Rollout UI') & include("'+alert(1)+'")
end
it "renders show html" do
get '/features/test'
expect(last_response).to be_ok
expect(last_response.body).to include('Rollout UI') & include('test')
end
it "escapes javascript in the action show" do
get "/features/'+alert(1)+'"
expect(last_response).to be_ok
expect(last_response.body).to include('Rollout UI') & include("'+alert(1)+'")
end
it "renders show json" do
ROLLOUT.activate(:fake_test_feature_for_rollout_ui_webspec)
header 'Accept', 'application/json'
get '/features/fake_test_feature_for_rollout_ui_webspec'
expect(last_response).to be_ok
expect(last_response.headers).to include('Content-Type' => 'application/json')
response = JSON.parse(last_response.body)
expected_response = {
"data"=>{},
"groups"=>[],
"name"=>"fake_test_feature_for_rollout_ui_webspec",
"percentage"=>100.0
}
expect(expected_response).to eq response
ROLLOUT.delete(:fake_test_feature_for_rollout_ui_webspec)
end
end