diff --git a/app/views/public/material_releases/new.html.erb b/app/views/public/material_releases/new.html.erb
index bfd565f..565ac57 100644
--- a/app/views/public/material_releases/new.html.erb
+++ b/app/views/public/material_releases/new.html.erb
@@ -18,20 +18,20 @@
<%= form.text_field :name, required: true, wrapper_class: "col-12" %>
- <%= form.text_area :description, placeholder: true, wrapper_class: "col-sm-12", rows: 6 %>
+ <%= form.text_area :description, required: true, placeholder: true, wrapper_class: "col-sm-12", rows: 6 %>
<% end %>
<%= card_field_set_tag t(".contact_info.heading") do %>
- <%= form.text_field :person_first_name, wrapper_class: "col-sm-6" %>
- <%= form.text_field :person_last_name, wrapper_class: "col-sm-6" %>
- <%= form.phone_field :person_phone, wrapper_class: "col-sm-6" %>
- <%= form.email_field :person_email, wrapper_class: "col-sm-6" %>
- <%= form.text_field :person_company, wrapper_class: "col-sm-6" %>
- <%= form.text_field :person_title, wrapper_class: "col-sm-6" %>
+ <%= form.text_field :person_first_name, required: true, wrapper_class: "col-sm-6" %>
+ <%= form.text_field :person_last_name, required: true, wrapper_class: "col-sm-6" %>
+ <%= form.phone_field :person_phone, required: true, wrapper_class: "col-sm-6" %>
+ <%= form.email_field :person_email, required: true, wrapper_class: "col-sm-6" %>
+ <%= form.text_field :person_company, required: true, wrapper_class: "col-sm-6" %>
+ <%= form.text_field :person_title, required: true, wrapper_class: "col-sm-6" %>
- <%= render "shared/address_fields", form: form, subject: "person" %>
+ <%= render "shared/address_fields", form: form, subject: "person", required: true %>
<% end %>
<%= card_field_set_tag t(".photo.heading") do %>
diff --git a/spec/features/user_managing_material_releases_spec.rb b/spec/features/user_managing_material_releases_spec.rb
index a58a9eb..1f966b2 100644
--- a/spec/features/user_managing_material_releases_spec.rb
+++ b/spec/features/user_managing_material_releases_spec.rb
@@ -17,16 +17,12 @@ feature "User managing material releases" do
visit new_account_project_contract_template_material_release_path(project.account, project, contract_template)
- by "filling out the form" do
- fill_in material_name_field, with: "Pepsi Logo"
- fill_in person_first_name_field, with: "Jane"
- fill_in person_last_name_field, with: "Doe"
- draw_signature file_fixture("signature.png"), "material_release_signature_base64"
- end
+ fill_all_fields
+ draw_signature file_fixture("signature.png"), "material_release_signature_base64"
click_button submit_release_button
- expect(page).to have_content("Your release was successfully submitted. Thank you.")
+ expect(page).to have_content success_submit_message
end
scenario "creating a release with photos", js: true do
@@ -34,17 +30,60 @@ feature "User managing material releases" do
visit new_account_project_contract_template_material_release_path(project.account, project, contract_template)
- fill_in material_name_field, with: "Pepsi Logo"
- fill_in person_first_name_field, with: "Jane"
- fill_in person_last_name_field, with: "Doe"
+ fill_all_fields
draw_signature file_fixture("signature.png"), "material_release_signature_base64"
-
drop_file Rails.root.join(file_fixture("material_photo.png")), type: :dropzone
+
click_button submit_release_button
- expect(page).to have_content("Your release was successfully submitted. Thank you.")
+ expect(page).to have_content success_submit_message
expect(MaterialRelease.last.photos.attached?).to eq true
end
+
+ scenario "creating release is possible only after filling all fields", js: true do
+ contract_template = create(:contract_template, project: project)
+
+ visit new_account_project_contract_template_material_release_path(project.account, project, contract_template)
+
+ fill_in material_name_field, with: "Pepsi Logo"
+ expect_failed_client_side_validation
+
+ fill_in material_description_field, with: "Description text"
+ expect_failed_client_side_validation
+
+ fill_in person_first_name_field, with: "Jane"
+ expect_failed_client_side_validation
+
+ fill_in person_last_name_field, with: "Doe"
+ expect_failed_client_side_validation
+
+ fill_in person_phone_field, with: "2229929229"
+ expect_failed_client_side_validation
+
+ fill_in person_email_field, with: "mail@mail.com"
+ expect_failed_client_side_validation
+
+ fill_in person_company_field, with: "Company"
+ expect_failed_client_side_validation
+
+ fill_in person_title_field, with: "Mr."
+ expect_failed_client_side_validation
+
+ fill_in person_address_street1_field, with: "Street 1 address"
+ expect_failed_client_side_validation
+
+ fill_in person_city_field, with: "City"
+ expect_failed_client_side_validation
+
+ fill_in person_state_field, with: "State"
+ expect_failed_client_side_validation
+
+ fill_in person_zip_field, with: "ZIP"
+ draw_signature file_fixture("signature.png"), "material_release_signature_base64"
+
+ click_button submit_release_button
+ expect(page).to have_content success_submit_message
+ end
end
context "when signed in" do
@@ -216,6 +255,10 @@ feature "User managing material releases" do
"material_release[name]"
end
+ def material_description_field
+ "material_release[description]"
+ end
+
def person_first_name_field
"material_release[person_first_name]"
end
@@ -224,6 +267,38 @@ feature "User managing material releases" do
"material_release[person_last_name]"
end
+ def person_phone_field
+ "material_release[person_phone]"
+ end
+
+ def person_email_field
+ "material_release[person_email]"
+ end
+
+ def person_company_field
+ "material_release[person_company]"
+ end
+
+ def person_title_field
+ "material_release[person_title]"
+ end
+
+ def person_address_street1_field
+ "material_release[person_address_street1]"
+ end
+
+ def person_city_field
+ "material_release[person_address_city]"
+ end
+
+ def person_state_field
+ "material_release[person_address_state]"
+ end
+
+ def person_zip_field
+ "material_release[person_address_zip]"
+ end
+
def have_photo(filename)
have_selector("img[src*='#{filename}']")
end
@@ -282,4 +357,29 @@ feature "User managing material releases" do
select "Other", from: "Restriction"
fill_in "Describe other restrictions", with: "Test"
end
+
+ def fill_all_fields
+ fill_in material_name_field, with: "Pepsi Logo"
+ fill_in material_description_field, with: "Description text"
+ fill_in person_first_name_field, with: "Jane"
+ fill_in person_last_name_field, with: "Doe"
+ fill_in person_phone_field, with: "2229929229"
+ fill_in person_email_field, with: "mail@mail.com"
+ fill_in person_company_field, with: "Company"
+ fill_in person_title_field, with: "Mr."
+ fill_in person_address_street1_field, with: "Street 1 address"
+ fill_in person_city_field, with: "City"
+ fill_in person_state_field, with: "State"
+ fill_in person_zip_field, with: "ZIP"
+ end
+
+ def success_submit_message
+ 'Your release was successfully submitted. Thank you.'
+ end
+
+ def expect_failed_client_side_validation
+ draw_signature file_fixture("signature.png"), "material_release_signature_base64"
+ click_button submit_release_button
+ expect(page).not_to have_content success_submit_message
+ end
end