Skip to content

Commit cb3abee

Browse files
author
Olexii Kasianenko
committed
Implement PartnerUpdateService for mandatory fields validation and update error handling
1 parent 7893041 commit cb3abee

File tree

5 files changed

+66
-13
lines changed

5 files changed

+66
-13
lines changed

app/controllers/admin/partners_controller.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ def edit
1313

1414
def update
1515
@partner = Partner.find(params[:id])
16-
if @partner.update(partner_attributes)
16+
partner_update_service = PartnerUpdateService.new(@partner, partner_attributes)
17+
if partner_update_service.call
1718
redirect_to admin_partners_path, notice: "#{@partner.name} updated!"
1819
else
19-
flash.now[:error] = "Something didn't work quite right -- try again?"
20+
flash.now[:error] = partner_update_service.error
2021
render action: :edit
2122
end
2223
end
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# frozen_string_literal: true
2+
3+
class PartnerUpdateService
4+
attr_accessor :partner, :params, :error
5+
6+
def initialize(partner, params)
7+
@partner = partner
8+
@params = params
9+
end
10+
11+
def call
12+
return false unless validation
13+
14+
if partner.update(params)
15+
true
16+
else
17+
@error = partner.errors.full_messages.join(", ")
18+
false
19+
end
20+
end
21+
22+
private
23+
24+
def validation
25+
mandatory_fields = %i[name]
26+
missing_fields = mandatory_fields.select { |field| params[field].blank? }
27+
if missing_fields.any?
28+
@error = "Missing mandatory fields: #{missing_fields.join(', ')}"
29+
return false
30+
end
31+
true
32+
end
33+
end

spec/requests/partners/profiles_requests_spec.rb

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,34 @@
100100
end
101101

102102
context "with no social media" do
103+
before do
104+
partner.awaiting_review!
105+
end
106+
let(:params) do
107+
{
108+
partner: {
109+
name: "Partnerdude", profile: {
110+
no_social_media_presence: '0',
111+
website: "",
112+
twitter: "",
113+
facebook: "",
114+
instagram: "",
115+
agency_type: 'OTHER',
116+
address1: '123 Main St',
117+
city: 'Anytown',
118+
state: 'CA',
119+
zip_code: '12345',
120+
program_name: 'Test Program',
121+
program_description: 'Test Description'
122+
}
123+
}
124+
}
125+
end
126+
103127
it "shows an error" do
104-
put partners_profile_path(partner,
105-
partner: {name: "Partnerdude", profile: {no_social_media_presence: false}})
128+
put partners_profile_path(partner, params)
106129
expect(response).not_to redirect_to(anything)
107-
expect(response.body).to include("No social media presence must be checked if you have not provided any of Website, Twitter, Facebook, or Instagram.")
130+
expect(response.body).to include("At least one social media field must be filled out or 'No social media presence' must be checked")
108131
end
109132
end
110133

spec/system/partner_system_spec.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -522,12 +522,10 @@
522522

523523
# Expect an alert-danger message containing validation errors
524524
expect(page).to have_css(".alert-danger", text: /There is a problem/)
525-
expect(page).to have_content("No social media presence must be checked if you have not provided any of Website, Twitter, Facebook, or Instagram.")
526525
expect(page).to have_content("Enable child based requests At least one request type must be set")
527526
expect(page).to have_content("Pick up email can't have more than three email addresses")
528527

529528
# Expect media section, pick up person section, and partner settings section to be opened
530-
expect(page).to have_css("#media_information.accordion-collapse.collapse.show", visible: true)
531529
expect(page).to have_css("#pick_up_person.accordion-collapse.collapse.show", visible: true)
532530
expect(page).to have_css("#partner_settings.accordion-collapse.collapse.show", visible: true)
533531

@@ -536,12 +534,10 @@
536534

537535
# Expect an alert-danger message containing validation errors
538536
expect(page).to have_css(".alert-danger", text: /There is a problem/)
539-
expect(page).to have_content("No social media presence must be checked if you have not provided any of Website, Twitter, Facebook, or Instagram.")
540537
expect(page).to have_content("Enable child based requests At least one request type must be set")
541538
expect(page).to have_content("Pick up email can't have more than three email addresses")
542539

543540
# Expect media section, pick up person section, and partner settings section to be opened
544-
expect(page).to have_css("#media_information.accordion-collapse.collapse.show", visible: true)
545541
expect(page).to have_css("#pick_up_person.accordion-collapse.collapse.show", visible: true)
546542
expect(page).to have_css("#partner_settings.accordion-collapse.collapse.show", visible: true)
547543
end

spec/system/partners/profile_edit_system_spec.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@
346346
subject
347347
}.not_to change { partner1.reload.updated_at }
348348

349-
expect(page).to have_content("No social media presence must be checked if you have not provided any of Website, Twitter, Facebook, or Instagram.")
349+
expect(page).to have_content("At least one social media field must be filled out or 'No social media presence' must be checked.")
350350
end
351351
end
352352

@@ -360,7 +360,7 @@
360360
subject
361361
}.not_to change { partner1.reload.updated_at }
362362

363-
expect(page).to have_content("No social media presence must be checked if you have not provided any of Website, Twitter, Facebook, or Instagram.")
363+
expect(page).to have_content("At least one social media field must be filled out or 'No social media presence' must be checked.")
364364
end
365365

366366
context "partner's organization one_step_partner_invite is true" do
@@ -419,7 +419,7 @@
419419
expect {
420420
subject
421421
}.not_to change { partner1.reload.updated_at }
422-
expect(page).to have_content("Missing mandatory fields: agency_type, address1, city, state, zip_code, program_name, program_description, agency_name")
422+
expect(page).to have_content("Missing mandatory fields: agency_name, agency_type, address1, city, state, zip_code, program_name, program_description")
423423
end
424424
end
425425

@@ -432,7 +432,7 @@
432432
expect {
433433
subject
434434
}.not_to change { partner1.reload.updated_at }
435-
expect(page).to have_content("Missing mandatory fields: agency_type, address1, city, state, zip_code, program_name, program_description, agency_name")
435+
expect(page).to have_content("Missing mandatory fields: agency_name, agency_type, address1, city, state, zip_code, program_name, program_description")
436436
end
437437

438438
context "partner's organization one_step_partner_invite is true" do

0 commit comments

Comments
 (0)