Skip to content

Commit 35a40ed

Browse files
authored
Merge pull request #1618 from rubyforgood/replace_delete_button_with_deactivate_button
Replace delete button with deactivate button
2 parents c82d2c9 + b63a8fc commit 35a40ed

File tree

9 files changed

+154
-2
lines changed

9 files changed

+154
-2
lines changed

app/controllers/partners_controller.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,32 @@ def recertify_partner
9898
end
9999
end
100100

101+
def deactivate
102+
@partner = current_organization.partners.find(params[:id])
103+
response = DiaperPartnerClient.put(partner_id: @partner.id, status: "deactivated")
104+
105+
if response.is_a?(Net::HTTPSuccess) && @partner.update(status: "deactivated")
106+
redirect_to partners_path, notice: "#{@partner.name} successfully deactivated!"
107+
else
108+
redirect_to partners_path, error: "#{@partner.name} failed to deactivate!"
109+
end
110+
end
111+
112+
def reactivate
113+
@partner = current_organization.partners.find(params[:id])
114+
115+
if @partner.status != "deactivated"
116+
redirect_to(partners_path, error: "#{@partner.name} is not deactivated!") && return
117+
end
118+
119+
response = DiaperPartnerClient.put(partner_id: @partner.id, status: "verified")
120+
if response.is_a?(Net::HTTPSuccess) && @partner.update(status: "approved")
121+
redirect_to partners_path, notice: "#{@partner.name} successfully reactivated!"
122+
else
123+
redirect_to partners_path, error: "#{@partner.name} failed to reactivate!"
124+
end
125+
end
126+
101127
private
102128

103129
def autovivifying_hash

app/helpers/application_helper.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ def confirm_delete_msg(resource)
6262
"Are you sure you want to delete #{resource}?"
6363
end
6464

65+
def confirm_deactivate_msg(resource)
66+
"Are you sure you want to deactivate #{resource}?"
67+
end
68+
69+
def confirm_reactivate_msg(resource)
70+
"Are you sure you want to reactivate #{resource}?"
71+
end
72+
6573
def confirm_restore_msg(resource)
6674
"Are you sure you want to restore #{resource}?"
6775
end

app/helpers/ui_helper.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ def delete_button_to(link, options = {})
3434
_link_to link, { icon: "trash", type: "danger", text: "Delete", size: "xs" }.merge(options), properties
3535
end
3636

37+
def deactivate_button_to(link, options = {})
38+
data = options[:no_confirm] ? {} : { data: { confirm: options[:confirm] || "Are you sure?" } }
39+
properties = { method: :put, rel: "nofollow" }.merge(data)
40+
_link_to link, { icon: "ban", type: "danger", text: "Deactivate", size: "xs" }.merge(options), properties
41+
end
42+
43+
def reactivate_button_to(link, options = {})
44+
data = options[:no_confirm] ? {} : { data: { confirm: options[:confirm] || "Are you sure?" } }
45+
properties = { method: :put, rel: "nofollow" }.merge(data)
46+
_link_to link, { icon: "repeat", type: "success", text: "Reactivate", size: "xs" }.merge(options), properties
47+
end
48+
3749
def restore_button_to(link, options = {})
3850
data = options[:no_confirm] ? {} : { data: { confirm: options[:confirm] || "Are you sure?" } }
3951
properties = { rel: "nofollow", method: :patch }.merge(data)

app/models/partner.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ class Partner < ApplicationRecord
4040
where(status: status.to_sym)
4141
}
4242

43+
def deactivated?
44+
status == 'deactivated'
45+
end
46+
4347
# better to extract this outside of the model
4448
def self.import_csv(csv, organization_id)
4549
csv.each do |row|

app/views/partners/_partner_row.html.erb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
</td>
2323
<td>
2424
<% case status %>
25-
<% when "uninvited" %>
25+
<% when "uninvited" %>
2626
<%= invite_button_to(invite_partner_path(partner_row), confirm: "Send an invitation to #{partner_row.name} to begin using the partner application?") %>
2727
<% when "invited" %>
2828
<%= view_button_to approve_partner_partner_path(partner_row), { text: "Review Application", icon: "check", type: "warning" } %>
@@ -32,6 +32,8 @@
3232
<%= button_to recertify_partner_partner_path(partner_row), data: { confirm: "Recertify partner #{partner_row.name}?"}, class: "btn btn-xs bg-red" do %>
3333
<i class="fa fa-refresh"></i> Request Recertification
3434
<% end %>
35+
<% when "deactivated" %>
36+
<%= reactivate_button_to reactivate_partner_path(partner_row), {confirm: confirm_reactivate_msg(partner_row.name)} %>
3537
<% else %>
3638
&nbsp;
3739
<% end %>

app/views/partners/show.html.erb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,11 @@
6262
<div class="card-footer">
6363
<%= view_button_to approve_partner_partner_path(@partner) %>
6464
<%= edit_button_to edit_partner_path(@partner) %>
65-
<%= delete_button_to partner_path(@partner), {confirm: confirm_delete_msg(@partner.name)} %>
65+
<% if @partner.deactivated? %>
66+
<%= reactivate_button_to reactivate_partner_path(@partner), {confirm: confirm_reactivate_msg(@partner.name)} %>
67+
<% else %>
68+
<%= deactivate_button_to deactivate_partner_path(@partner), {confirm: confirm_deactivate_msg(@partner.name)} %>
69+
<% end %>
6670
<%= modal_button_to("#addUserModal", {text: "Add/Remind Partner", size: "xs"}) if can_administrate? %>
6771
<%= print_button_to approve_application_partner_path(@partner), {text: "Activate Partner Now", icon: "thumbs-o-up", type: "success", size: "xs"} if can_administrate? %>
6872
</div>

config/routes.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ def set_up_flipper
127127
post :invite
128128
post :re_invite
129129
post :recertify_partner
130+
put :deactivate
131+
put :reactivate
130132
end
131133
end
132134

spec/models/partner_spec.rb

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,35 @@
7777
# expect(WebMock).to have_requested(:post, callback_url)
7878
# .with(headers: headers, body: body).once
7979
# end
80+
#
8081
# end
8182
# end
8283

84+
describe '#deactivated?' do
85+
subject { partner.deactivated? }
86+
let(:partner) { build(:partner) }
87+
88+
context "when the status is 'deactivated'" do
89+
before do
90+
partner.status = 'deactivated'
91+
end
92+
93+
it 'should return true' do
94+
expect(subject).to eq(true)
95+
end
96+
end
97+
98+
context "when the status is not 'deactivated'" do
99+
before do
100+
partner.status = 'invited'
101+
end
102+
103+
it 'should return false' do
104+
expect(subject).to eq(false)
105+
end
106+
end
107+
end
108+
83109
describe "import_csv" do
84110
let(:organization) { create(:organization) }
85111

spec/requests/partners_requests_spec.rb

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,42 @@
165165
end
166166
end
167167

168+
describe "PUT #deactivate" do
169+
let(:partner) { create(:partner, organization: @organization, status: "approved") }
170+
171+
context "when the partner successfully deactivates" do
172+
before do
173+
response = double
174+
175+
allow(response).to receive(:is_a?).with(Net::HTTPSuccess).and_return(true)
176+
allow(DiaperPartnerClient).to receive(:put).and_return(response)
177+
end
178+
it "changes the partner status to deactivated and redirects with flash" do
179+
put deactivate_partner_path(default_params.merge(id: partner.id))
180+
181+
expect(partner.reload.status).to eq("deactivated")
182+
expect(response).to redirect_to(partners_path)
183+
expect(flash[:notice]).to eq("#{partner.name} successfully deactivated!")
184+
end
185+
end
186+
187+
context "when the partner is not successfully deactivated" do
188+
before do
189+
response = double
190+
191+
allow(response).to receive(:is_a?).with(Net::HTTPSuccess).and_return(false)
192+
allow(DiaperPartnerClient).to receive(:put).and_return(response)
193+
end
194+
it "fails to change the partner status to deactivated and redirects with flash error message" do
195+
put deactivate_partner_path(default_params.merge(id: partner.id))
196+
197+
expect(partner.reload.status).to eq("approved")
198+
expect(response).to redirect_to(partners_path)
199+
expect(flash[:error]).to eq("#{partner.name} failed to deactivate!")
200+
end
201+
end
202+
end
203+
168204
describe "GET #approve_application" do
169205
let(:partner) { create(:partner, organization: @organization) }
170206

@@ -205,6 +241,38 @@
205241
end
206242
end
207243

244+
describe "PUT #reactivate" do
245+
context "when the partner successfully reactivates" do
246+
let(:partner) { create(:partner, organization: @organization, status: "deactivated") }
247+
248+
before do
249+
response = double
250+
allow(response).to receive(:is_a?).with(Net::HTTPSuccess).and_return(true)
251+
allow(DiaperPartnerClient).to receive(:put).and_return(response)
252+
end
253+
254+
it "changes the partner status to approved, partner status on partner app to verified, and redirects with flash" do
255+
put reactivate_partner_path(default_params.merge(id: partner.id))
256+
257+
expect(partner.reload.status).to eq("approved")
258+
expect(response).to redirect_to(partners_path)
259+
expect(flash[:notice]).to eq("#{partner.name} successfully reactivated!")
260+
end
261+
end
262+
263+
context "when trying to reactivate a partner who is not deactivated " do
264+
let(:partner) { create(:partner, organization: @organization, status: "approved") }
265+
before do
266+
allow(DiaperPartnerClient).to receive(:put)
267+
end
268+
it "fails to change the partner status to reactivated and redirects with flash error message" do
269+
put reactivate_partner_path(default_params.merge(id: partner.id))
270+
271+
expect(DiaperPartnerClient).not_to have_received(:put)
272+
end
273+
end
274+
end
275+
208276
describe "POST #recertify_partner" do
209277
let(:partner) { create(:partner, organization: @organization) }
210278

0 commit comments

Comments
 (0)