From a2ba12054ad904e868a395dc7f1861acf7f7aac2 Mon Sep 17 00:00:00 2001 From: Nils Rauch Date: Mon, 16 Dec 2024 13:03:05 +0100 Subject: [PATCH] Align external event registration with basic login (#1409) --- .../sac_cas/event/register_controller.rb | 19 ++++++ app/views/public_events/show.html.haml | 28 ++++---- lib/hitobito_sac_cas/wagon.rb | 1 + .../event/register_controller_spec.rb | 66 +++++++++++++++++++ 4 files changed, 101 insertions(+), 13 deletions(-) create mode 100644 app/controllers/sac_cas/event/register_controller.rb create mode 100644 spec/controllers/event/register_controller_spec.rb diff --git a/app/controllers/sac_cas/event/register_controller.rb b/app/controllers/sac_cas/event/register_controller.rb new file mode 100644 index 000000000..fe9005f4a --- /dev/null +++ b/app/controllers/sac_cas/event/register_controller.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +# Copyright (c) 2024, Schweizer Alpen-Club. This file is part of +# hitobito_sac_cas and licensed under the Affero General Public License version 3 +# or later. See the COPYING file at the top-level directory or at +# https://github.com/hitobito/hitobito_sac_cas + +module SacCas::Event::RegisterController + def save_entry + if super + person.send_reset_password_instructions + Group::AboBasicLogin::BasicLogin.create!(group: abo_basic_login_group, person: person) + end + end + + def abo_basic_login_group + Group::AboBasicLogin.where(layer_group_id: Group.root.id).first + end +end diff --git a/app/views/public_events/show.html.haml b/app/views/public_events/show.html.haml index 3d3bec070..35790ab30 100644 --- a/app/views/public_events/show.html.haml +++ b/app/views/public_events/show.html.haml @@ -3,18 +3,20 @@ -# or later. See the COPYING file at the top-level directory or at -# https://github.com/hitobito/hitobito. -.align-with-form - %h1=t(".login_to_participate") - %h2=t(".with_sac_account") -= render 'devise/sessions/form', autofocus_login: false -.align-with-form.mt-4 - .mb-1=t(".is_sac_account_active") - = link_to t('.login_questions'), t(".link_fag_sac_account") +%div{data: { turbo: 'false'}} + .align-with-form + %h1=t(".login_to_participate") + %h2=t(".with_sac_account") - %h2.mt-5=t(".first_time_here") - .mb-2=t(".create_account_now") -= render 'event/register/email_check' + = render 'devise/sessions/form', autofocus_login: false + .align-with-form.mt-4 + .mb-1=t(".is_sac_account_active") + = link_to t('.login_questions'), t(".link_fag_sac_account") -.align-with-form.mt-5 - %h2=t(".wanna_be_a_member") - = link_to t('.request_sac_membership'), t(".request_sac_membership_link") + %h2.mt-5=t(".first_time_here") + .mb-2=t(".create_account_now") + = render 'event/register/email_check' + + .align-with-form.mt-5 + %h2=t(".wanna_be_a_member") + = link_to t('.request_sac_membership'), t(".request_sac_membership_link") diff --git a/lib/hitobito_sac_cas/wagon.rb b/lib/hitobito_sac_cas/wagon.rb index 7b19a492f..cab3b5e96 100644 --- a/lib/hitobito_sac_cas/wagon.rb +++ b/lib/hitobito_sac_cas/wagon.rb @@ -157,6 +157,7 @@ class Wagon < Rails::Engine Event::KindsController.prepend SacCas::Event::KindsController Event::KindCategoriesController.prepend SacCas::Event::KindCategoriesController Event::ParticipationsController.prepend SacCas::Event::ParticipationsController + Event::RegisterController.prepend SacCas::Event::RegisterController Event::RolesController.prepend SacCas::Event::RolesController GroupsController.permitted_attrs << :mitglied_termination_by_section_only GroupsController.permitted_attrs << {section_offering_ids: []} diff --git a/spec/controllers/event/register_controller_spec.rb b/spec/controllers/event/register_controller_spec.rb new file mode 100644 index 000000000..8ef0ff815 --- /dev/null +++ b/spec/controllers/event/register_controller_spec.rb @@ -0,0 +1,66 @@ +# Copyright (c) 2024, Schweizer Alpen-Club. This file is part of +# hitobito and licensed under the Affero General Public License version 3 +# or later. See the COPYING file at the top-level directory or at +# https://github.com/hitobito/hitobito. + +require "spec_helper" + +describe Event::RegisterController do + include ActiveJob::TestHelper + + let(:event) do + events(:top_event).tap do |e| + e.update_column(:external_applications, true) + end + end + let(:group) { event.groups.first } + before do + Group::AboBasicLogin.create!( + parent: groups(:abos), + self_registration_role_type: "Group::AboBasicLogin::BasicLogin" + ) + end + + let(:attrs) { + { + first_name: "Max", + last_name: "Muster", + street: "Musterplatz", + housenumber: "23", + email: "max.muster@example.com", + zip_code: "8000", + town: "Zürich", + country: "CH", + birthday: "01.01.1980", + phone_numbers_attributes: { + "0": { + number: "+41 79 123 45 56", + public: true, + translated_label: "Mobile" + } + } + }.with_indifferent_access + } + + describe "PUT register" do + context "with valid data" do + it "creates person and sends password reset instructions" do + event.update!(required_contact_attrs: []) + + expect(Devise::Mailer).to receive(:reset_password_instructions).and_call_original + + expect do + put :register, params: {group_id: group.id, id: event.id, event_participation_contact_data: attrs} + end.to change { Person.count }.by(1) + .and change { Group::AboBasicLogin::BasicLogin.count }.by(1) + + person = Person.find_by(email: "max.muster@example.com") + + expect(person.roles.size).to eq(1) + expect(person.roles.first.type).to eq(Group::AboBasicLogin::BasicLogin.sti_name) + is_expected.to redirect_to(new_group_event_participation_path(group, event)) + expect(flash[:notice]).to include "Deine persönlichen Daten wurden aufgenommen. Bitte ergänze nun noch die Angaben" + end + end + end +end