flipper-ui 0.10.2 → 0.11.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/flipper-ui.gemspec +12 -12
- data/lib/flipper/ui.rb +6 -4
- data/lib/flipper/ui/action.rb +22 -21
- data/lib/flipper/ui/action_collection.rb +2 -2
- data/lib/flipper/ui/actions/actors_gate.rb +7 -7
- data/lib/flipper/ui/actions/add_feature.rb +6 -6
- data/lib/flipper/ui/actions/boolean_gate.rb +2 -2
- data/lib/flipper/ui/actions/feature.rb +5 -6
- data/lib/flipper/ui/actions/features.rb +9 -10
- data/lib/flipper/ui/actions/file.rb +0 -1
- data/lib/flipper/ui/actions/gate.rb +5 -2
- data/lib/flipper/ui/actions/groups_gate.rb +16 -14
- data/lib/flipper/ui/actions/home.rb +1 -2
- data/lib/flipper/ui/actions/percentage_of_actors_gate.rb +2 -2
- data/lib/flipper/ui/actions/percentage_of_time_gate.rb +2 -2
- data/lib/flipper/ui/decorators/feature.rb +9 -9
- data/lib/flipper/ui/decorators/gate.rb +7 -6
- data/lib/flipper/ui/middleware.rb +2 -27
- data/lib/flipper/ui/util.rb +2 -2
- data/lib/flipper/version.rb +1 -1
- data/spec/flipper/ui/action_spec.rb +22 -22
- data/spec/flipper/ui/actions/actors_gate_spec.rb +49 -45
- data/spec/flipper/ui/actions/add_feature_spec.rb +9 -9
- data/spec/flipper/ui/actions/boolean_gate_spec.rb +22 -22
- data/spec/flipper/ui/actions/feature_spec.rb +34 -34
- data/spec/flipper/ui/actions/features_spec.rb +44 -40
- data/spec/flipper/ui/actions/file_spec.rb +8 -8
- data/spec/flipper/ui/actions/gate_spec.rb +17 -15
- data/spec/flipper/ui/actions/groups_gate_spec.rb +57 -50
- data/spec/flipper/ui/actions/home_spec.rb +4 -4
- data/spec/flipper/ui/actions/percentage_of_actors_gate_spec.rb +24 -22
- data/spec/flipper/ui/actions/percentage_of_time_gate_spec.rb +24 -22
- data/spec/flipper/ui/decorators/feature_spec.rb +27 -27
- data/spec/flipper/ui/decorators/gate_spec.rb +10 -10
- data/spec/flipper/ui/util_spec.rb +4 -4
- data/spec/flipper/ui_spec.rb +58 -59
- metadata +7 -7
@@ -1,74 +1,74 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
RSpec.describe Flipper::UI::Actions::Feature do
|
4
|
-
let(:token)
|
4
|
+
let(:token) do
|
5
5
|
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
|
6
6
|
Rack::Protection::AuthenticityToken.random_token
|
7
7
|
else
|
8
|
-
|
8
|
+
'a'
|
9
9
|
end
|
10
|
-
|
11
|
-
let(:session)
|
10
|
+
end
|
11
|
+
let(:session) do
|
12
12
|
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
|
13
|
-
{:
|
13
|
+
{ csrf: token }
|
14
14
|
else
|
15
|
-
{
|
15
|
+
{ '_csrf_token' => token }
|
16
16
|
end
|
17
|
-
|
17
|
+
end
|
18
18
|
|
19
|
-
describe
|
19
|
+
describe 'DELETE /features/:feature' do
|
20
20
|
before do
|
21
21
|
flipper.enable :search
|
22
|
-
delete
|
23
|
-
|
24
|
-
|
22
|
+
delete '/features/search',
|
23
|
+
{ 'authenticity_token' => token },
|
24
|
+
'rack.session' => session
|
25
25
|
end
|
26
26
|
|
27
|
-
it
|
28
|
-
expect(flipper.features.map(&:key)).not_to include(
|
27
|
+
it 'removes feature' do
|
28
|
+
expect(flipper.features.map(&:key)).not_to include('search')
|
29
29
|
end
|
30
30
|
|
31
|
-
it
|
31
|
+
it 'redirects to features' do
|
32
32
|
expect(last_response.status).to be(302)
|
33
|
-
expect(last_response.headers[
|
33
|
+
expect(last_response.headers['Location']).to eq('/features')
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
describe
|
37
|
+
describe 'POST /features/:feature with _method=DELETE' do
|
38
38
|
before do
|
39
39
|
flipper.enable :search
|
40
|
-
post
|
41
|
-
|
42
|
-
|
40
|
+
post '/features/search',
|
41
|
+
{ '_method' => 'DELETE', 'authenticity_token' => token },
|
42
|
+
'rack.session' => session
|
43
43
|
end
|
44
44
|
|
45
|
-
it
|
46
|
-
expect(flipper.features.map(&:key)).not_to include(
|
45
|
+
it 'removes feature' do
|
46
|
+
expect(flipper.features.map(&:key)).not_to include('search')
|
47
47
|
end
|
48
48
|
|
49
|
-
it
|
49
|
+
it 'redirects to features' do
|
50
50
|
expect(last_response.status).to be(302)
|
51
|
-
expect(last_response.headers[
|
51
|
+
expect(last_response.headers['Location']).to eq('/features')
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
describe
|
55
|
+
describe 'GET /features/:feature' do
|
56
56
|
before do
|
57
|
-
get
|
57
|
+
get '/features/search'
|
58
58
|
end
|
59
59
|
|
60
|
-
it
|
60
|
+
it 'responds with success' do
|
61
61
|
expect(last_response.status).to be(200)
|
62
62
|
end
|
63
63
|
|
64
|
-
it
|
65
|
-
expect(last_response.body).to include(
|
66
|
-
expect(last_response.body).to include(
|
67
|
-
expect(last_response.body).to include(
|
68
|
-
expect(last_response.body).to include(
|
69
|
-
expect(last_response.body).to include(
|
70
|
-
expect(last_response.body).to include(
|
71
|
-
expect(last_response.body).to include(
|
64
|
+
it 'renders template' do
|
65
|
+
expect(last_response.body).to include('search')
|
66
|
+
expect(last_response.body).to include('Enable')
|
67
|
+
expect(last_response.body).to include('Disable')
|
68
|
+
expect(last_response.body).to include('Actors')
|
69
|
+
expect(last_response.body).to include('Groups')
|
70
|
+
expect(last_response.body).to include('Percentage of Time')
|
71
|
+
expect(last_response.body).to include('Percentage of Actors')
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
@@ -1,47 +1,47 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
RSpec.describe Flipper::UI::Actions::Features do
|
4
|
-
let(:token)
|
4
|
+
let(:token) do
|
5
5
|
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
|
6
6
|
Rack::Protection::AuthenticityToken.random_token
|
7
7
|
else
|
8
|
-
|
8
|
+
'a'
|
9
9
|
end
|
10
|
-
|
11
|
-
let(:session)
|
10
|
+
end
|
11
|
+
let(:session) do
|
12
12
|
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
|
13
|
-
{:
|
13
|
+
{ csrf: token }
|
14
14
|
else
|
15
|
-
{
|
15
|
+
{ '_csrf_token' => token }
|
16
16
|
end
|
17
|
-
|
17
|
+
end
|
18
18
|
|
19
|
-
describe
|
19
|
+
describe 'GET /features' do
|
20
20
|
before do
|
21
21
|
flipper[:stats].enable
|
22
22
|
flipper[:search].enable
|
23
|
-
get
|
23
|
+
get '/features'
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'responds with success' do
|
27
27
|
expect(last_response.status).to be(200)
|
28
28
|
end
|
29
29
|
|
30
|
-
it
|
31
|
-
expect(last_response.body).to include(
|
32
|
-
expect(last_response.body).to include(
|
30
|
+
it 'renders template' do
|
31
|
+
expect(last_response.body).to include('stats')
|
32
|
+
expect(last_response.body).to include('search')
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
describe
|
37
|
-
let(:feature_name) {
|
36
|
+
describe 'POST /features' do
|
37
|
+
let(:feature_name) { 'notifications_next' }
|
38
38
|
|
39
39
|
before do
|
40
40
|
@original_feature_creation_enabled = Flipper::UI.feature_creation_enabled
|
41
41
|
Flipper::UI.feature_creation_enabled = feature_creation_enabled
|
42
|
-
post
|
43
|
-
|
44
|
-
|
42
|
+
post '/features',
|
43
|
+
{ 'value' => feature_name, 'authenticity_token' => token },
|
44
|
+
'rack.session' => session
|
45
45
|
end
|
46
46
|
|
47
47
|
after do
|
@@ -51,48 +51,52 @@ RSpec.describe Flipper::UI::Actions::Features do
|
|
51
51
|
context 'feature_creation_enabled set to true' do
|
52
52
|
let(:feature_creation_enabled) { true }
|
53
53
|
|
54
|
-
it
|
55
|
-
expect(flipper.features.map(&:key)).to include(
|
54
|
+
it 'adds feature' do
|
55
|
+
expect(flipper.features.map(&:key)).to include('notifications_next')
|
56
56
|
end
|
57
57
|
|
58
|
-
it
|
58
|
+
it 'redirects to feature' do
|
59
59
|
expect(last_response.status).to be(302)
|
60
|
-
expect(last_response.headers[
|
60
|
+
expect(last_response.headers['Location']).to eq('/features/notifications_next')
|
61
61
|
end
|
62
62
|
|
63
63
|
context 'feature name contains whitespace' do
|
64
|
-
let(:feature_name) {
|
64
|
+
let(:feature_name) { ' notifications_next ' }
|
65
65
|
|
66
|
-
it
|
67
|
-
expect(flipper.features.map(&:key)).to include(
|
66
|
+
it 'adds feature without whitespace' do
|
67
|
+
expect(flipper.features.map(&:key)).to include('notifications_next')
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
context
|
72
|
-
context
|
73
|
-
let(:feature_name) {
|
71
|
+
context 'for an invalid feature name' do
|
72
|
+
context 'empty feature name' do
|
73
|
+
let(:feature_name) { '' }
|
74
74
|
|
75
|
-
it
|
75
|
+
it 'does not add feature' do
|
76
76
|
expect(flipper.features.map(&:key)).to eq([])
|
77
77
|
end
|
78
78
|
|
79
|
-
|
79
|
+
# rubocop:disable Metrics/LineLength
|
80
|
+
it 'redirects back to feature' do
|
80
81
|
expect(last_response.status).to be(302)
|
81
|
-
expect(last_response.headers[
|
82
|
+
expect(last_response.headers['Location']).to eq('/features/new?error=%22%22+is+not+a+valid+feature+name.')
|
82
83
|
end
|
84
|
+
# rubocop:enable Metrics/LineLength
|
83
85
|
end
|
84
86
|
|
85
|
-
context
|
87
|
+
context 'nil feature name' do
|
86
88
|
let(:feature_name) { nil }
|
87
89
|
|
88
|
-
it
|
90
|
+
it 'does not add feature' do
|
89
91
|
expect(flipper.features.map(&:key)).to eq([])
|
90
92
|
end
|
91
93
|
|
92
|
-
|
94
|
+
# rubocop:disable Metrics/LineLength
|
95
|
+
it 'redirects back to feature' do
|
93
96
|
expect(last_response.status).to be(302)
|
94
|
-
expect(last_response.headers[
|
97
|
+
expect(last_response.headers['Location']).to eq('/features/new?error=%22%22+is+not+a+valid+feature+name.')
|
95
98
|
end
|
99
|
+
# rubocop:enable Metrics/LineLength
|
96
100
|
end
|
97
101
|
end
|
98
102
|
end
|
@@ -100,16 +104,16 @@ RSpec.describe Flipper::UI::Actions::Features do
|
|
100
104
|
context 'feature_creation_enabled set to false' do
|
101
105
|
let(:feature_creation_enabled) { false }
|
102
106
|
|
103
|
-
it
|
104
|
-
expect(flipper.features.map(&:key)).
|
107
|
+
it 'does not add feature' do
|
108
|
+
expect(flipper.features.map(&:key)).not_to include('notifications_next')
|
105
109
|
end
|
106
110
|
|
107
|
-
it
|
111
|
+
it 'returns 403' do
|
108
112
|
expect(last_response.status).to be(403)
|
109
113
|
end
|
110
114
|
|
111
|
-
it
|
112
|
-
expect(last_response.body).to include(
|
115
|
+
it 'renders feature creation disabled template' do
|
116
|
+
expect(last_response.body).to include('Feature creation is disabled.')
|
113
117
|
end
|
114
118
|
end
|
115
119
|
end
|
@@ -1,42 +1,42 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
RSpec.describe Flipper::UI::Actions::File do
|
4
|
-
describe
|
4
|
+
describe 'GET /images/logo.png' do
|
5
5
|
before do
|
6
6
|
get '/images/logo.png'
|
7
7
|
end
|
8
8
|
|
9
|
-
it
|
9
|
+
it 'responds with 200' do
|
10
10
|
expect(last_response.status).to be(200)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
describe
|
14
|
+
describe 'GET /css/application.css' do
|
15
15
|
before do
|
16
16
|
get '/css/application.css'
|
17
17
|
end
|
18
18
|
|
19
|
-
it
|
19
|
+
it 'responds with 200' do
|
20
20
|
expect(last_response.status).to be(200)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
describe
|
24
|
+
describe 'GET /fonts/bootstrap/glyphicons-halflings-regular.eot' do
|
25
25
|
before do
|
26
26
|
get '/fonts/bootstrap/glyphicons-halflings-regular.eot'
|
27
27
|
end
|
28
28
|
|
29
|
-
it
|
29
|
+
it 'responds with 200' do
|
30
30
|
expect(last_response.status).to be(200)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
describe
|
34
|
+
describe 'GET /octicons/octicons.eot' do
|
35
35
|
before do
|
36
36
|
get '/octicons/octicons.eot'
|
37
37
|
end
|
38
38
|
|
39
|
-
it
|
39
|
+
it 'responds with 200' do
|
40
40
|
expect(last_response.status).to be(200)
|
41
41
|
end
|
42
42
|
end
|
@@ -1,37 +1,39 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
RSpec.describe Flipper::UI::Actions::Gate do
|
4
|
-
let(:token)
|
4
|
+
let(:token) do
|
5
5
|
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
|
6
6
|
Rack::Protection::AuthenticityToken.random_token
|
7
7
|
else
|
8
|
-
|
8
|
+
'a'
|
9
9
|
end
|
10
|
-
|
11
|
-
let(:session)
|
10
|
+
end
|
11
|
+
let(:session) do
|
12
12
|
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
|
13
|
-
{:
|
13
|
+
{ csrf: token }
|
14
14
|
else
|
15
|
-
{
|
15
|
+
{ '_csrf_token' => token }
|
16
16
|
end
|
17
|
-
|
17
|
+
end
|
18
18
|
|
19
|
-
describe
|
19
|
+
describe 'POST /features/:feature/non-existent-gate' do
|
20
20
|
before do
|
21
|
-
post
|
22
|
-
|
23
|
-
|
21
|
+
post '/features/search/non-existent-gate',
|
22
|
+
{ 'authenticity_token' => token },
|
23
|
+
'rack.session' => session
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'responds with redirect' do
|
27
27
|
expect(last_response.status).to be(302)
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
# rubocop:disable Metrics/LineLength
|
31
|
+
it 'escapes error message' do
|
32
|
+
expect(last_response.headers['Location']).to eq('/features/search?error=%22non-existent-gate%22+gate+does+not+exist+therefore+it+cannot+be+updated.')
|
32
33
|
end
|
34
|
+
# rubocop:enable Metrics/LineLength
|
33
35
|
|
34
|
-
it
|
36
|
+
it 'renders error in template' do
|
35
37
|
follow_redirect!
|
36
38
|
expect(last_response.body).to match(/non-existent-gate.*gate does not exist/)
|
37
39
|
end
|
@@ -1,129 +1,136 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
RSpec.describe Flipper::UI::Actions::GroupsGate do
|
4
|
-
let(:token)
|
4
|
+
let(:token) do
|
5
5
|
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
|
6
6
|
Rack::Protection::AuthenticityToken.random_token
|
7
7
|
else
|
8
|
-
|
8
|
+
'a'
|
9
9
|
end
|
10
|
-
|
11
|
-
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:session) do
|
12
13
|
if Rack::Protection::AuthenticityToken.respond_to?(:random_token)
|
13
|
-
{:
|
14
|
+
{ csrf: token }
|
14
15
|
else
|
15
|
-
{
|
16
|
+
{ '_csrf_token' => token }
|
16
17
|
end
|
17
|
-
|
18
|
+
end
|
18
19
|
|
19
|
-
describe
|
20
|
+
describe 'GET /features/:feature/groups' do
|
20
21
|
before do
|
21
|
-
Flipper.register(:admins
|
22
|
-
get
|
22
|
+
Flipper.register(:admins, &:admin?)
|
23
|
+
get 'features/search/groups'
|
23
24
|
end
|
24
25
|
|
25
26
|
after do
|
26
27
|
Flipper.unregister_groups
|
27
28
|
end
|
28
29
|
|
29
|
-
it
|
30
|
+
it 'responds with success' do
|
30
31
|
expect(last_response.status).to be(200)
|
31
32
|
end
|
32
33
|
|
33
|
-
it
|
34
|
+
it 'renders add new group form' do
|
34
35
|
expect(last_response.body).to include('<form action="/features/search/groups" method="post">')
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
38
|
-
describe
|
39
|
-
let(:group_name) {
|
39
|
+
describe 'POST /features/:feature/groups' do
|
40
|
+
let(:group_name) { 'admins' }
|
40
41
|
|
41
42
|
before do
|
42
|
-
Flipper.register(:admins
|
43
|
+
Flipper.register(:admins, &:admin?)
|
43
44
|
end
|
44
45
|
|
45
46
|
after do
|
46
47
|
Flipper.unregister_groups
|
47
48
|
end
|
48
49
|
|
49
|
-
context
|
50
|
+
context 'enabling a group' do
|
50
51
|
before do
|
51
|
-
post
|
52
|
-
|
53
|
-
|
52
|
+
post 'features/search/groups',
|
53
|
+
{ 'value' => group_name, 'operation' => 'enable', 'authenticity_token' => token },
|
54
|
+
'rack.session' => session
|
54
55
|
end
|
55
56
|
|
56
|
-
it
|
57
|
-
expect(flipper[:search].groups_value).to include(
|
57
|
+
it 'adds item to members' do
|
58
|
+
expect(flipper[:search].groups_value).to include('admins')
|
58
59
|
end
|
59
60
|
|
60
|
-
it
|
61
|
+
it 'redirects back to feature' do
|
61
62
|
expect(last_response.status).to be(302)
|
62
|
-
expect(last_response.headers[
|
63
|
+
expect(last_response.headers['Location']).to eq('/features/search')
|
63
64
|
end
|
64
65
|
|
65
66
|
context 'group name contains whitespace' do
|
66
|
-
let(:group_name) {
|
67
|
+
let(:group_name) { ' admins ' }
|
67
68
|
|
68
|
-
it
|
69
|
-
expect(flipper[:search].groups_value).to include(
|
69
|
+
it 'adds item without whitespace' do
|
70
|
+
expect(flipper[:search].groups_value).to include('admins')
|
70
71
|
end
|
71
72
|
end
|
72
73
|
|
73
|
-
context
|
74
|
-
context
|
75
|
-
let(:group_name) {
|
74
|
+
context 'for an unregistered group' do
|
75
|
+
context 'unknown group name' do
|
76
|
+
let(:group_name) { 'not_here' }
|
76
77
|
|
77
|
-
|
78
|
+
# rubocop:disable Metrics/LineLength
|
79
|
+
it 'redirects back to feature' do
|
78
80
|
expect(last_response.status).to be(302)
|
79
|
-
expect(last_response.headers[
|
81
|
+
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The+group+named+%22not_here%22+has+not+been+registered.')
|
80
82
|
end
|
83
|
+
# rubocop:enable Metrics/LineLength
|
81
84
|
end
|
82
85
|
|
83
|
-
context
|
84
|
-
let(:group_name) {
|
86
|
+
context 'empty group name' do
|
87
|
+
let(:group_name) { '' }
|
85
88
|
|
86
|
-
|
89
|
+
# rubocop:disable Metrics/LineLength
|
90
|
+
it 'redirects back to feature' do
|
87
91
|
expect(last_response.status).to be(302)
|
88
|
-
expect(last_response.headers[
|
92
|
+
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The+group+named+%22%22+has+not+been+registered.')
|
89
93
|
end
|
94
|
+
# rubocop:enable Metrics/LineLength
|
90
95
|
end
|
91
96
|
|
92
|
-
context
|
97
|
+
context 'nil group name' do
|
93
98
|
let(:group_name) { nil }
|
94
99
|
|
95
|
-
|
100
|
+
# rubocop:disable Metrics/LineLength
|
101
|
+
it 'redirects back to feature' do
|
96
102
|
expect(last_response.status).to be(302)
|
97
|
-
expect(last_response.headers[
|
103
|
+
expect(last_response.headers['Location']).to eq('/features/search/groups?error=The+group+named+%22%22+has+not+been+registered.')
|
98
104
|
end
|
105
|
+
# rubocop:enable Metrics/LineLength
|
99
106
|
end
|
100
107
|
end
|
101
108
|
end
|
102
109
|
|
103
|
-
context
|
104
|
-
let(:group_name) {
|
110
|
+
context 'disabling a group' do
|
111
|
+
let(:group_name) { 'admins' }
|
105
112
|
|
106
113
|
before do
|
107
114
|
flipper[:search].enable_group :admins
|
108
|
-
post
|
109
|
-
|
110
|
-
|
115
|
+
post 'features/search/groups',
|
116
|
+
{ 'value' => group_name, 'operation' => 'disable', 'authenticity_token' => token },
|
117
|
+
'rack.session' => session
|
111
118
|
end
|
112
119
|
|
113
|
-
it
|
114
|
-
expect(flipper[:search].groups_value).not_to include(
|
120
|
+
it 'removes item from members' do
|
121
|
+
expect(flipper[:search].groups_value).not_to include('admins')
|
115
122
|
end
|
116
123
|
|
117
|
-
it
|
124
|
+
it 'redirects back to feature' do
|
118
125
|
expect(last_response.status).to be(302)
|
119
|
-
expect(last_response.headers[
|
126
|
+
expect(last_response.headers['Location']).to eq('/features/search')
|
120
127
|
end
|
121
128
|
|
122
129
|
context 'group name contains whitespace' do
|
123
|
-
let(:group_name) {
|
130
|
+
let(:group_name) { ' admins ' }
|
124
131
|
|
125
|
-
it
|
126
|
-
expect(flipper[:search].groups_value).not_to include(
|
132
|
+
it 'removes item without whitespace' do
|
133
|
+
expect(flipper[:search].groups_value).not_to include('admins')
|
127
134
|
end
|
128
135
|
end
|
129
136
|
end
|