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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
RSpec.describe Flipper::UI::Actions::GroupsGate do
let(:token) do
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
Rack::Protection::AuthenticityToken.random_token
else
'a'
end
end
let(:session) do
{ :csrf => token, 'csrf' => token, '_csrf_token' => token }
end
describe 'GET /features/:feature/groups' do
before do
Flipper.register(:admins, &:admin?)
get 'features/search/groups'
end
after do
Flipper.unregister_groups
end
it 'responds with success' do
expect(last_response.status).to be(200)
end
it 'renders add new group form' do
form = '<form action="/features/search/groups" method="post" class="form-inline">'
expect(last_response.body).to include(form)
end
end
describe 'POST /features/:feature/groups' do
let(:group_name) { 'admins' }
before do
Flipper.register(:admins, &:admin?)
end
after do
Flipper.unregister_groups
end
context 'enabling a group' do
before do
post 'features/search/groups',
{ 'value' => group_name, 'operation' => 'enable', 'authenticity_token' => token },
'rack.session' => session
end
it 'adds item to members' do
expect(flipper[:search].groups_value).to include('admins')
end
it 'redirects back to feature' do
expect(last_response.status).to be(302)
expect(last_response.headers['Location']).to eq('/features/search')
end
context 'feature name contains space' do
before do
post 'features/sp%20ace/groups',
{ 'value' => group_name, 'operation' => 'enable', 'authenticity_token' => token },
'rack.session' => session
end
it 'adds item to members' do
expect(flipper["sp ace"].groups_value).to include('admins')
end
it 'redirects back to feature' do
expect(last_response.status).to be(302)
expect(last_response.headers['Location']).to eq('/features/sp%20ace')
end
end
context 'group name contains whitespace' do
let(:group_name) { ' admins ' }
it 'adds item without whitespace' do
expect(flipper[:search].groups_value).to include('admins')
end
end
context 'for an unregistered group' do
context 'unknown group name' do
let(:group_name) { 'not_here' }
it 'redirects back to feature' do
expect(last_response.status).to be(302)
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The%20group%20named%20%22not_here%22%20has%20not%20been%20registered.')
end
end
context 'empty group name' do
let(:group_name) { '' }
it 'redirects back to feature' do
expect(last_response.status).to be(302)
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The%20group%20named%20%22%22%20has%20not%20been%20registered.')
end
end
context 'nil group name' do
let(:group_name) { nil }
it 'redirects back to feature' do
expect(last_response.status).to be(302)
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The%20group%20named%20%22%22%20has%20not%20been%20registered.')
end
end
end
end
context 'disabling a group' do
let(:group_name) { 'admins' }
before do
flipper[:search].enable_group :admins
post 'features/search/groups',
{ 'value' => group_name, 'operation' => 'disable', 'authenticity_token' => token },
'rack.session' => session
end
it 'removes item from members' do
expect(flipper[:search].groups_value).not_to include('admins')
end
it 'redirects back to feature' do
expect(last_response.status).to be(302)
expect(last_response.headers['Location']).to eq('/features/search')
end
context 'group name contains whitespace' do
let(:group_name) { ' admins ' }
it 'removes item without whitespace' do
expect(flipper[:search].groups_value).not_to include('admins')
end
end
end
end
end
|