# frozen_string_literal: true require 'system_helper' RSpec.describe "Registration" do include AuthenticationHelper include WebHelper describe "Registering a Profile" do let(:user) { create(:user, password: "password", password_confirmation: "password") } before do Spree::Config.enterprises_require_tos = false albania = Spree::Country.create!({ name: "Albania", iso3: "ALB", iso: "AL", iso_name: "ALBANIA", numcode: "8" }) Spree::State.create!({ name: "Berat", abbr: "BRA", country: albania }) Spree::Country.create!({ name: "Chad", iso3: "TCD", iso: "TD", iso_name: "CHAD", numcode: "148" }) allow_any_instance_of(AddressGeocoder).to receive(:geocode) end after do Spree::State.where(name: 'Berat').delete_all Spree::Country.where(name: 'Albania').delete_all Spree::Country.where(name: 'Chad').delete_all end it "Allows a logged in user to register a profile" do visit registration_path expect(Spree::Config.enterprises_require_tos).to eq false expect(URI.parse(current_url).path).to eq registration_auth_path page.has_selector? "dd", text: "Login" switch_to_login_tab # Enter Login details fill_in "Email", with: user.email fill_in "Password", with: user.password click_button "Login" expect(page).to have_content("Hi there!") expect(URI.parse(current_url).path).to eq registration_path # Done reading introduction expect(page).to have_text "What do I get?" click_button "Let's get started!" expect(page).to have_content 'Woot!' # Filling in details fill_in 'enterprise_name', with: "My Awesome Enterprise" # Filling in address fill_in 'enterprise_address', with: '123 Abc Street' fill_in 'enterprise_city', with: 'Northcote' fill_in 'enterprise_zipcode', with: '3070' expect(page).to have_select('enterprise_country', options: ["Albania", "Australia", "France"], selected: 'Australia') select 'Vic', from: 'enterprise_state' click_button "Continue" expect(page).to have_content 'Who is responsible for managing My Awesome Enterprise?' # Filling in Contact Details fill_in 'enterprise_contact', with: 'Saskia Munroe' expect(page).to have_field 'enterprise_email_address', with: user.email fill_in 'enterprise_phone', with: '12 3456 7890' click_button "Continue" expect(page).to have_content 'Last step to add My Awesome Enterprise!' # Choosing a type click_button "Create Profile" expect(page).to have_content("Please choose one. Are you are producer?") expect(page).to have_button "Create Profile", disabled: false click_link "producer-panel" expect(page).to have_selector '#producer-panel.selected' # Next (profile is created at this point) click_button "Create Profile" expect(page).to have_content 'Nice one!' # Enterprise should be created e = Enterprise.find_by(name: 'My Awesome Enterprise') expect(e.address.address1).to eq "123 Abc Street" expect(e.sells).to eq "unspecified" expect(e.is_primary_producer).to eq true expect(e.contact.id).to eq e.owner_id expect(e.contact_name).to eq "Saskia Munroe" # Filling in about fill_in 'enterprise_description', with: 'Short description' fill_in 'enterprise_long_desc', with: 'Long description' fill_in 'enterprise_abn', with: '12345' fill_in 'enterprise_acn', with: '54321' choose 'Yes' # enterprise_charges_sales_tax click_button "Continue" expect(page).to have_content 'Step 1. Select Logo Image' # Images # Upload logo image attach_file "image-select", Rails.root.join("spec/fixtures/files/logo.png"), visible: false expect(page).not_to have_css('#image-placeholder .loading') expect(page.find('#image-placeholder img')['src']).not_to be_empty # Move from logo page click_button "Continue" expect(page).to have_content 'Step 3. Select Promo Image' # Upload promo image attach_file "image-select", Rails.root.join("spec/fixtures/files/promo.png"), visible: false expect(page).not_to have_css('#image-placeholder .loading') expect(page.find('#image-placeholder img')['src']).not_to be_empty # Move from promo page click_button "Continue" expect(page).to have_content 'How can people find My Awesome Enterprise online?' # Filling in social with invalid value for instagram - a link to a post instead of user fill_in "enterprise_instagram", with: 'https://www.instagram.com/p/Cpg4McNPyJA/' accept_alert "Failed to update your enterprise." do click_button "Continue" end expect(page).to have_content "Must be user name only eg. the_prof" # Filling in social fill_in 'enterprise_website', with: 'www.shop.com' fill_in 'enterprise_facebook', with: 'FaCeBoOk' fill_in 'enterprise_linkedin', with: 'LiNkEdIn' fill_in 'enterprise_twitter', with: 'https://twitter.com/@OpenFoodNet' fill_in 'enterprise_instagram', with: 'https://www.instagram.com/OpenFoodNetwork/' click_button "Continue" expect(page).to have_content 'Finished!' # Done # Check values set in about tab e.reload expect(e.description).to eq "Short description" expect(e.long_description).to eq "Long description" expect(e.abn).to eq '12345' expect(e.acn).to eq '54321' expect(e.charges_sales_tax).to be true # Check values set in social tab expect(e.website).to eq "www.shop.com" expect(e.facebook).to eq "FaCeBoOk" expect(e.linkedin).to eq "LiNkEdIn" expect(e.twitter).to eq "OpenFoodNet" expect(e.instagram).to eq "openfoodnetwork" click_link "Go to Enterprise Dashboard" expect(page).to have_content "CHOOSE YOUR PACKAGE" page.find('.full_hub h3').click click_button "Select and Continue" expect(page).to have_content "Your profile live" click_link "Manage My Awesome Enterprise" expect(page).to have_checked_field "enterprise_visible_only_through_links" end context "Enterprise name is already taken" do let(:owner) do Spree::User.create!(email: "penny.profile@example.org", password: "cannotbeblank") end before do address = Spree::Address.create!(firstname: 'John', lastname: 'Doe', address1: '1400 Sesame street', zipcode: '3070', city: 'Southcote', phone: '12 3456 7890', country_id: 1, state_id: 1, company: 'unused') Enterprise.create(name: 'My Awesome Enterprise', address:, owner:) end it "checks that button after failure is still enabled" do visit registration_path switch_to_login_tab fill_in "Email", with: user.email fill_in "Password", with: user.password click_button "Login" click_button "Let's get started!" fill_in 'enterprise_name', with: "My Awesome Enterprise" fill_in 'enterprise_address', with: '123 Abc Street' fill_in 'enterprise_city', with: 'Northcote' fill_in 'enterprise_zipcode', with: '3070' select 'Vic', from: 'enterprise_state' click_button "Continue" fill_in 'enterprise_contact', with: 'Saskia Munroe' fill_in 'enterprise_phone', with: '12 3456 7890' click_button "Continue" click_button "Create Profile" click_link "producer-panel" alert_text = <<~TEXT.strip Name has already been taken. If this is your enterprise and you would \ like to claim ownership, or if you would like to trade with this \ enterprise please contact the current manager of this profile at \ penny.profile@example.org. TEXT accept_alert(alert_text) do click_button "Create Profile" end expect(page).to have_button "Create Profile", disabled: false end end context "when the user has no more remaining enterprises" do before do user.update(enterprise_limit: 0) end it "displays the limit reached page" do visit registration_path expect(page).to have_selector "dd", text: "Login" switch_to_login_tab # Enter Login details fill_in "Email", with: user.email fill_in "Password", with: user.password click_button 'Login' expect(page).to have_content 'Oh no!' end end end describe "Terms of Service agreement" do let!(:user2) { create(:user) } before do login_as user2 end context "if accepting Terms of Service is not required" do before { Spree::Config.enterprises_require_tos = false } it "allows registration as normal" do visit registration_path click_button "Let's get started!" expect(find("div#progress-bar")).to be_visible end end context "if accepting Terms of Service is required" do before { Spree::Config.enterprises_require_tos = true } it "does not allow registration unless checkbox is checked" do visit registration_path expect(page).to have_content "Terms of Service" expect(page).to have_selector "input.button.primary[disabled]" check "accept_terms" expect(page).not_to have_selector "input.button.primary[disabled]" click_button "Let's get started!" expect(find("div#progress-bar")).to be_visible end end end def switch_to_login_tab # Link appears to be unresponsive for a while, so keep clicking it until it works using_wait_time 0.5 do 10.times do find("a", text: "Login").click break if page.has_selector? "dd.active", text: "Login" end end end end