flipper-ui 0.10.1 → 0.10.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bb1bfdee4a96ba233417ff628d798b3c143df5a6
4
- data.tar.gz: c26c0f69ae33c2667826ff9eea83303e54f64d11
3
+ metadata.gz: aecff7000b2350bc4238cd50dcfc9cad07c8bb27
4
+ data.tar.gz: 86be7431a5eca0a785984083c645dbf6fa7e510e
5
5
  SHA512:
6
- metadata.gz: db86038c00be28d278b1b878f32f9bf075e620f5f152eeea6ee13be502aa94c593b79ad24cca45c99ece880849bd22f87385df770197f605f874b4ca69a2a3ff
7
- data.tar.gz: 6c461a47ea74dacf2e3901f5fee62609ef0de89ff554065c8efd0c24abda3e743fa9ee2d94966499ea2aac3d2c5b37eefc26782d5d1e78d165158dbffeab9d8c
6
+ metadata.gz: 7945d54ccb03a0d2b3b309175a601d797b68f1c96fa80d66354d1028aafe12abc7fc2b1eb83b40577180a8dec3450044ad86b8ae58bf4d7653c0d3d3890e6185
7
+ data.tar.gz: d5d68823b6d56dfe8069792b5e18c52530400967ca8ff078cf0590dc9768d0c61c2a8ea44780a0cf2b290ac9181673e795c84ec7690af53c300e12db4e788e98
@@ -24,7 +24,7 @@ module Flipper
24
24
  def post
25
25
  feature_name = Rack::Utils.unescape(request.path.split('/')[-2])
26
26
  feature = flipper[feature_name.to_sym]
27
- value = params["value"]
27
+ value = params["value"].to_s.strip
28
28
 
29
29
  if Util.blank?(value)
30
30
  error = Rack::Utils.escape("#{value.inspect} is not a valid actor value.")
@@ -34,7 +34,7 @@ module Flipper
34
34
  halt view_response(:feature_creation_disabled)
35
35
  end
36
36
 
37
- value = params["value"]
37
+ value = params["value"].to_s.strip
38
38
 
39
39
  if Util.blank?(value)
40
40
  error = Rack::Utils.escape("#{value.inspect} is not a valid feature name.")
@@ -23,7 +23,7 @@ module Flipper
23
23
  def post
24
24
  feature_name = Rack::Utils.unescape(request.path.split('/')[-2])
25
25
  feature = flipper[feature_name.to_sym]
26
- value = params["value"]
26
+ value = params["value"].to_s.strip
27
27
 
28
28
  case params["operation"]
29
29
  when "enable"
@@ -1,3 +1,3 @@
1
1
  module Flipper
2
- VERSION = "0.10.1".freeze
2
+ VERSION = "0.10.2".freeze
3
3
  end
@@ -32,9 +32,11 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
32
32
 
33
33
  describe "POST /features/:feature/actors" do
34
34
  context "enabling an actor" do
35
+ let(:value) { "User:6" }
36
+
35
37
  before do
36
38
  post "features/search/actors",
37
- {"value" => "User:6", "operation" => "enable", "authenticity_token" => token},
39
+ {"value" => value, "operation" => "enable", "authenticity_token" => token},
38
40
  "rack.session" => session
39
41
  end
40
42
 
@@ -46,13 +48,43 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
46
48
  expect(last_response.status).to be(302)
47
49
  expect(last_response.headers["Location"]).to eq("/features/search")
48
50
  end
51
+
52
+ context 'value contains whitespace' do
53
+ let(:value) { " User:6 " }
54
+
55
+ it "adds item without whitespace" do
56
+ expect(flipper[:search].actors_value).to include("User:6")
57
+ end
58
+ end
59
+
60
+ context "for an invalid actor value" do
61
+ context "empty value" do
62
+ let(:value) { "" }
63
+
64
+ it "redirects back to feature" do
65
+ expect(last_response.status).to be(302)
66
+ expect(last_response.headers["Location"]).to eq("/features/search/actors?error=%22%22+is+not+a+valid+actor+value.")
67
+ end
68
+ end
69
+
70
+ context "nil value" do
71
+ let(:value) { nil }
72
+
73
+ it "redirects back to feature" do
74
+ expect(last_response.status).to be(302)
75
+ expect(last_response.headers["Location"]).to eq("/features/search/actors?error=%22%22+is+not+a+valid+actor+value.")
76
+ end
77
+ end
78
+ end
49
79
  end
50
80
 
51
81
  context "disabling an actor" do
82
+ let(:value) { "User:6" }
83
+
52
84
  before do
53
85
  flipper[:search].enable_actor Flipper::UI::Actor.new("User:6")
54
86
  post "features/search/actors",
55
- {"value" => "User:6", "operation" => "disable", "authenticity_token" => token},
87
+ {"value" => value, "operation" => "disable", "authenticity_token" => token},
56
88
  "rack.session" => session
57
89
  end
58
90
 
@@ -64,18 +96,13 @@ RSpec.describe Flipper::UI::Actions::ActorsGate do
64
96
  expect(last_response.status).to be(302)
65
97
  expect(last_response.headers["Location"]).to eq("/features/search")
66
98
  end
67
- end
68
99
 
69
- context "for an invalid actor value" do
70
- before do
71
- post "features/search/actors",
72
- {"value" => "", "operation" => "enable", "authenticity_token" => token},
73
- "rack.session" => session
74
- end
100
+ context 'value contains whitespace' do
101
+ let(:value) { " User:6 " }
75
102
 
76
- it "redirects back to feature" do
77
- expect(last_response.status).to be(302)
78
- expect(last_response.headers["Location"]).to eq("/features/search/actors?error=%22%22+is+not+a+valid+actor+value.")
103
+ it "removes item whitout whitespace" do
104
+ expect(flipper[:search].actors_value).not_to include("User:6")
105
+ end
79
106
  end
80
107
  end
81
108
  end
@@ -33,12 +33,14 @@ RSpec.describe Flipper::UI::Actions::Features do
33
33
  end
34
34
  end
35
35
 
36
- describe "POST /features with feature_creation_enabled set to true" do
36
+ describe "POST /features" do
37
+ let(:feature_name) { "notifications_next" }
38
+
37
39
  before do
38
40
  @original_feature_creation_enabled = Flipper::UI.feature_creation_enabled
39
- Flipper::UI.feature_creation_enabled = true
41
+ Flipper::UI.feature_creation_enabled = feature_creation_enabled
40
42
  post "/features",
41
- {"value" => "notifications_next", "authenticity_token" => token},
43
+ {"value" => feature_name, "authenticity_token" => token},
42
44
  "rack.session" => session
43
45
  end
44
46
 
@@ -46,39 +48,69 @@ RSpec.describe Flipper::UI::Actions::Features do
46
48
  Flipper::UI.feature_creation_enabled = @original_feature_creation_enabled
47
49
  end
48
50
 
49
- it "adds feature" do
50
- expect(flipper.features.map(&:key)).to include("notifications_next")
51
- end
51
+ context 'feature_creation_enabled set to true' do
52
+ let(:feature_creation_enabled) { true }
52
53
 
53
- it "redirects to feature" do
54
- expect(last_response.status).to be(302)
55
- expect(last_response.headers["Location"]).to eq("/features/notifications_next")
56
- end
57
- end
54
+ it "adds feature" do
55
+ expect(flipper.features.map(&:key)).to include("notifications_next")
56
+ end
58
57
 
59
- describe "POST /features with feature_creation_enabled set to false" do
60
- before do
61
- @original_feature_creation_enabled = Flipper::UI.feature_creation_enabled
62
- Flipper::UI.feature_creation_enabled = false
63
- post "/features",
64
- {"value" => "notifications_next", "authenticity_token" => token},
65
- "rack.session" => session
66
- end
58
+ it "redirects to feature" do
59
+ expect(last_response.status).to be(302)
60
+ expect(last_response.headers["Location"]).to eq("/features/notifications_next")
61
+ end
67
62
 
68
- after do
69
- Flipper::UI.feature_creation_enabled = @original_feature_creation_enabled
70
- end
63
+ context 'feature name contains whitespace' do
64
+ let(:feature_name) { " notifications_next " }
71
65
 
72
- it "does not add feature" do
73
- expect(flipper.features.map(&:key)).to_not include("notifications_next")
74
- end
66
+ it "adds feature without whitespace" do
67
+ expect(flipper.features.map(&:key)).to include("notifications_next")
68
+ end
69
+ end
70
+
71
+ context "for an invalid feature name" do
72
+ context "empty feature name" do
73
+ let(:feature_name) { "" }
74
+
75
+ it "does not add feature" do
76
+ expect(flipper.features.map(&:key)).to eq([])
77
+ end
78
+
79
+ it "redirects back to feature" do
80
+ expect(last_response.status).to be(302)
81
+ expect(last_response.headers["Location"]).to eq("/features/new?error=%22%22+is+not+a+valid+feature+name.")
82
+ end
83
+ end
75
84
 
76
- it "returns 403" do
77
- expect(last_response.status).to be(403)
85
+ context "nil feature name" do
86
+ let(:feature_name) { nil }
87
+
88
+ it "does not add feature" do
89
+ expect(flipper.features.map(&:key)).to eq([])
90
+ end
91
+
92
+ it "redirects back to feature" do
93
+ expect(last_response.status).to be(302)
94
+ expect(last_response.headers["Location"]).to eq("/features/new?error=%22%22+is+not+a+valid+feature+name.")
95
+ end
96
+ end
97
+ end
78
98
  end
79
99
 
80
- it "renders feature creation disabled template" do
81
- expect(last_response.body).to include("Feature creation is disabled.")
100
+ context 'feature_creation_enabled set to false' do
101
+ let(:feature_creation_enabled) { false }
102
+
103
+ it "does not add feature" do
104
+ expect(flipper.features.map(&:key)).to_not include("notifications_next")
105
+ end
106
+
107
+ it "returns 403" do
108
+ expect(last_response.status).to be(403)
109
+ end
110
+
111
+ it "renders feature creation disabled template" do
112
+ expect(last_response.body).to include("Feature creation is disabled.")
113
+ end
82
114
  end
83
115
  end
84
116
  end
@@ -36,6 +36,8 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
36
36
  end
37
37
 
38
38
  describe "POST /features/:feature/groups" do
39
+ let(:group_name) { "admins" }
40
+
39
41
  before do
40
42
  Flipper.register(:admins) { |user| user.admin? }
41
43
  end
@@ -47,7 +49,7 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
47
49
  context "enabling a group" do
48
50
  before do
49
51
  post "features/search/groups",
50
- {"value" => "admins", "operation" => "enable", "authenticity_token" => token},
52
+ {"value" => group_name, "operation" => "enable", "authenticity_token" => token},
51
53
  "rack.session" => session
52
54
  end
53
55
 
@@ -59,13 +61,52 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
59
61
  expect(last_response.status).to be(302)
60
62
  expect(last_response.headers["Location"]).to eq("/features/search")
61
63
  end
64
+
65
+ context 'group name contains whitespace' do
66
+ let(:group_name) { " admins " }
67
+
68
+ it "adds item without whitespace" do
69
+ expect(flipper[:search].groups_value).to include("admins")
70
+ end
71
+ end
72
+
73
+ context "for an unregistered group" do
74
+ context "unknown group name" do
75
+ let(:group_name) { "not_here" }
76
+
77
+ it "redirects back to feature" do
78
+ expect(last_response.status).to be(302)
79
+ expect(last_response.headers["Location"]).to eq("/features/search/groups?error=The+group+named+%22not_here%22+has+not+been+registered.")
80
+ end
81
+ end
82
+
83
+ context "empty group name" do
84
+ let(:group_name) { "" }
85
+
86
+ it "redirects back to feature" do
87
+ expect(last_response.status).to be(302)
88
+ expect(last_response.headers["Location"]).to eq("/features/search/groups?error=The+group+named+%22%22+has+not+been+registered.")
89
+ end
90
+ end
91
+
92
+ context "nil group name" do
93
+ let(:group_name) { nil }
94
+
95
+ it "redirects back to feature" do
96
+ expect(last_response.status).to be(302)
97
+ expect(last_response.headers["Location"]).to eq("/features/search/groups?error=The+group+named+%22%22+has+not+been+registered.")
98
+ end
99
+ end
100
+ end
62
101
  end
63
102
 
64
103
  context "disabling a group" do
104
+ let(:group_name) { "admins" }
105
+
65
106
  before do
66
107
  flipper[:search].enable_group :admins
67
108
  post "features/search/groups",
68
- {"value" => "admins", "operation" => "disable", "authenticity_token" => token},
109
+ {"value" => group_name, "operation" => "disable", "authenticity_token" => token},
69
110
  "rack.session" => session
70
111
  end
71
112
 
@@ -77,18 +118,13 @@ RSpec.describe Flipper::UI::Actions::GroupsGate do
77
118
  expect(last_response.status).to be(302)
78
119
  expect(last_response.headers["Location"]).to eq("/features/search")
79
120
  end
80
- end
81
121
 
82
- context "for an unregistered group" do
83
- before do
84
- post "features/search/groups",
85
- {"value" => "not_here", "operation" => "enable", "authenticity_token" => token},
86
- "rack.session" => session
87
- end
122
+ context 'group name contains whitespace' do
123
+ let(:group_name) { " admins " }
88
124
 
89
- it "redirects back to feature" do
90
- expect(last_response.status).to be(302)
91
- expect(last_response.headers["Location"]).to eq("/features/search/groups?error=The+group+named+%22not_here%22+has+not+been+registered.")
125
+ it "removes item without whitespace" do
126
+ expect(flipper[:search].groups_value).not_to include("admins")
127
+ end
92
128
  end
93
129
  end
94
130
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipper-ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-19 00:00:00.000000000 Z
11
+ date: 2016-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -56,14 +56,14 @@ dependencies:
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: 0.10.1
59
+ version: 0.10.2
60
60
  type: :runtime
61
61
  prerelease: false
62
62
  version_requirements: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: 0.10.1
66
+ version: 0.10.2
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: erubis
69
69
  requirement: !ruby/object:Gem::Requirement