Skip to content

Commit

Permalink
backport: Export ah data to user (#96)
Browse files Browse the repository at this point in the history
* backport: Export authorization metadata to user extended data

* fix: Fix failing tests

* fix: Fix missed failing test
  • Loading branch information
AyakorK authored Sep 26, 2024
1 parent 1d6f2db commit eee6539
Show file tree
Hide file tree
Showing 9 changed files with 79 additions and 6 deletions.
6 changes: 5 additions & 1 deletion .env-example
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,8 @@ DECIDIM_ADMIN_PASSWORD_STRONG="false"
# PUMA_PRELOAD_APP=false

# Override after confirmation path with custom route
# AH_REDIRECT_AFTER_CONFIRMATION="/initiatives"
# AH_REDIRECT_AFTER_CONFIRMATION="/initiatives"

# Automatically save AH metadata to user extended data
# Format : comma separated list of auhtorization handler names
# AUTO_EXPORT_AUTHORIZATIONS_DATA_TO_USER_DATA_ENABLED_FOR="authorization1,authorization2"
9 changes: 9 additions & 0 deletions app/jobs/authorization_data_to_user_data_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

class AuthorizationDataToUserDataJob < ApplicationJob
queue_as :exports

def perform(*args)
Decidim::AuthorizationDataToUserDataService.run(*args)
end
end
27 changes: 27 additions & 0 deletions app/services/decidim/authorization_data_to_user_data_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# frozen_string_literal: true

module Decidim
class AuthorizationDataToUserDataService
def self.run(**args)
new(**args).execute
end

def initialize(**args)
@name = args[:name]
@user = args[:user]
end

def execute
Decidim::Authorization.find_each(filter) do |authorization|
authorization.user.update(extended_data: authorization.user.extended_data.merge({ @name.to_s => authorization.metadata }))
end
end

def filter
@filter ||= {
name: @name,
user: @user
}.compact
end
end
end
1 change: 1 addition & 0 deletions config/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class Application < Rails::Application
require "extends/forms/decidim/admin/organization_appearance_form_extends"
require "extends/omniauth/strategies/france_connect_extends"
require "extends/forms/decidim/omniauth_registration_form_extend"
require "extends/models/decidim/authorization_extends"
end

initializer "session cookie domain", after: "Expire sessions" do
Expand Down
2 changes: 2 additions & 0 deletions config/secrets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
default: &default
asset_host: <%= ENV["ASSET_HOST"] %>
decidim:
authorizations:
export_data_to_userdata_enabled_for: <%= ENV.fetch("AUTO_EXPORT_AUTHORIZATIONS_DATA_TO_USER_DATA_ENABLED_FOR", "") %>
reminder:
unconfirmed_email:
days: <%= ENV["DECIDIM_REMINDER_UNCONFIRMED_EMAIL_DAYS"]&.to_i || 2 %>
Expand Down
18 changes: 18 additions & 0 deletions lib/extends/models/decidim/authorization_extends.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# frozen_string_literal: true

require "active_support/concern"
module AuthorizationExtends
extend ActiveSupport::Concern

included do
after_commit :export_to_user_extended_data, if: proc { |authorization|
Rails.application.secrets.dig(:decidim, :export_data_to_userdata_enabled_for)&.split(",")&.include?(authorization.name)
}

def export_to_user_extended_data
Decidim::AuthorizationDataToUserDataService.run(name: name, user: user)
end
end
end

Decidim::Authorization.include(AuthorizationExtends)
12 changes: 12 additions & 0 deletions lib/tasks/authorizations.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# frozen_string_literal: true

namespace :authorizations do
task export_to_user_extended_data: :environment do
name = ENV["AUTHORIZATION_HANDLE_NAME"].presence
raise "AUTHORIZATION_HANDLE_NAME is blank." if name.blank?

raise "No data found for authorization handler name '#{name}'" unless Decidim::Authorization.exists?(name: name)

AuthorizationDataToUserDataJob.perform_later(name: name)
end
end
2 changes: 1 addition & 1 deletion spec/mailers/confirmation_reminder_mailer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ module Decidim
it "parses the body in the user's locale" do
expect(email_body(mail)).to include("Vous avez créé un compte il y a 2 jours mais vous ne l'avez pas encore confirmé.")
expect(email_body(mail)).to include("Veuillez confirmer votre compte en cliquant sur le lien ci-dessous.")
expect(email_body(mail)).to include("L'ensemble de vos votes seront supprimés dans 6 jours si votre compte n'est pas confirmé dans ce délai.")
expect(email_body(mail)).to include("L'ensemble de vos signatures seront annulées dans 6 jours si vous ne confirmez pas votre compte.")
end
end
end
Expand Down
8 changes: 4 additions & 4 deletions spec/mailers/unconfirmed_votes_clear_mailer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ module Decidim
end

it "parses the subject in the user's locale" do
expect(mail.subject).to eq("Vous n'avez pas confirmé votre compte, vos votes ont été supprimés")
expect(mail.subject).to eq("Vous n'avez pas confirmé votre compte, vos signatures ont donc été annulées")
end

it "parses the body in the user's locale" do
expect(email_body(mail)).to include("Vous n'avez pas confirmé votre compte, les votes que vous avez fait ont été supprimés")
expect(email_body(mail)).to include("Vous pouvez toujours confirmer votre compte et voter à nouveau sur les pétitions.")
expect(email_body(mail)).to include("Vous navez pas confirmé votre compte sur la plateforme de pétitions du CESE , les signatures suivantes ont donc été annulées")
expect(email_body(mail)).to include("Vous pouvez toujours confirmer votre compte et signer à nouveau les pétitions de votre choix.")
initiatives.each do |initiative|
expect(email_body(mail)).to include("Votre vote sur la pétition '#{translated(initiative.title)}' a été supprimé.")
expect(email_body(mail)).to include("Votre signature de la pétition '#{translated(initiative.title)}' a été annulée.")
end
end
end
Expand Down

0 comments on commit eee6539

Please sign in to comment.