From 7b61f25dd1ca4b324b85ab90ca891c5d5495c6cc Mon Sep 17 00:00:00 2001 From: Lunar Date: Fri, 29 Nov 2013 11:10:41 +0100 Subject: [PATCH] Implement send-member-emails-to-advisors --- README | 1 + bin/send-member-emails-to-advisors | 15 +++++++++++ .../send-member-emails-to-advisors.feature | 15 +++++++++++ features/step_definitions/commands.rb | 4 +++ features/step_definitions/emails.rb | 11 ++++++++ lib/nos_oignons.rb | 27 +++++++++++++++++++ 6 files changed, 73 insertions(+) create mode 100755 bin/send-member-emails-to-advisors create mode 100644 features/send-member-emails-to-advisors.feature diff --git a/README b/README index 96cdd54..7ba2097 100644 --- a/README +++ b/README @@ -165,6 +165,7 @@ Ensuite, pour exécuter régulièrement les scripts via le *crontab* du compte 42 * * * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/update-ag-subscribers 42 6 * * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/send-membership-reminders + 21 0 1 * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/send-member-emails-to-advisors Pour installer le `pre-commit` *hook* sur le dépôt utilisé par Ikiwiki, on met dans `/srv/ikiwiki/wiki-ca/src/.git/hooks/pre-commit` : diff --git a/bin/send-member-emails-to-advisors b/bin/send-member-emails-to-advisors new file mode 100755 index 0000000..b85d25d --- /dev/null +++ b/bin/send-member-emails-to-advisors @@ -0,0 +1,15 @@ +#!/usr/bin/ruby1.9.1 +#-*- coding: utf-8 -*- + +require 'rubygems' +require 'bundler' +Bundler.setup + +require 'mail' +require 'nos_oignons' + +Mail.defaults do + delivery_method :sendmail +end + +NosOignons.send_member_emails_to_advisors! diff --git a/features/send-member-emails-to-advisors.feature b/features/send-member-emails-to-advisors.feature new file mode 100644 index 0000000..af4a5e5 --- /dev/null +++ b/features/send-member-emails-to-advisors.feature @@ -0,0 +1,15 @@ +# language: fr + +Fonctionnalité: envoyer au comité de déontologie les emails des membres + Afin que le comité de déontologie puisse organiser une assemblée générale + extraordinaire sans avoir besoin de l'appui du conseil d'administration, + il est nécessaire de lui envoyer (chaque mois) les emails des membres + de l'association. + + Scénario: Envoi de la liste des membres + Soit une base avec Jane, à jour de cotisation + Et avec Pierre qui n'a pas payé sa cotisation cette année + Et avec Fred qui doit renouveller sa cotisation d'ici 10 jours + Lorsque j'exécute send-member-emails-to-advisors + Alors un email doit avoir été envoyé au comité de déontologie + Et il doit contenir les adresses emails de Jane et Fred diff --git a/features/step_definitions/commands.rb b/features/step_definitions/commands.rb index 221523a..1788c39 100644 --- a/features/step_definitions/commands.rb +++ b/features/step_definitions/commands.rb @@ -25,6 +25,10 @@ When /^(?:que )?j'exécute send-membership-reminders$/ do NosOignons.send_membership_reminders! end +When /^j'exécute send\-member\-emails\-to\-advisors$/ do + NosOignons.send_member_emails_to_advisors! +end + Then /^je ne dois pas avoir eu d'erreur$/ do assert_exit_status(0) end diff --git a/features/step_definitions/emails.rb b/features/step_definitions/emails.rb index 9ed3f98..2bbecd3 100644 --- a/features/step_definitions/emails.rb +++ b/features/step_definitions/emails.rb @@ -27,3 +27,14 @@ end Then /^(\d+) emails? (?:doit|doivent) avoir été envoyés?$/ do |count| Mail::TestMailer.deliveries.should have(count).email end + +Then /^un email doit avoir été envoyé au comité de déontologie$/ do + expect(Mail::TestMailer.deliveries).to have(1).email + expect(Mail::TestMailer.deliveries.first.to).to include('deontologie@nos-oignons.net') +end + +Then /^il doit contenir les adresses emails de Jane et Fred$/ do + expect(Mail::TestMailer.deliveries.first.body).to include('jane@example.org') + expect(Mail::TestMailer.deliveries.first.body).to include('fred@example.org') +end + diff --git a/lib/nos_oignons.rb b/lib/nos_oignons.rb index 4ecd3c4..8368699 100644 --- a/lib/nos_oignons.rb +++ b/lib/nos_oignons.rb @@ -8,6 +8,7 @@ require 'nos_oignons/reminder_db' module NosOignons BOARD_EMAIL = 'ca@nos-oignons.net' + ADVISORS_EMAIL = 'deontologie@nos-oignons.net' MEMBER_MAILING_LIST = 'ag' # The following class methods are all meant to be called as command-line scripts @@ -48,6 +49,32 @@ module NosOignons end end + def send_member_emails_to_advisors! + uptodate_emails = NosOignons::Member.all.select(&:up_to_date?).collect(&:email) + subject = 'Adresses emails des members à jour de cotisation' + body = <<-END_OF_BODY.gsub(/^ /, '') + Cher comité de déontologie de Nos oignons, + + Comme le prévoit les statuts l'article 12 des statuts de l'association, + vous devez être en mesure de pouvoir convoquer une assemblée générale + extraordinaire. Pour ce faire, voici donc la liste des emails à jour + de cotisation à la date d'aujourd'hui : + + #{uptodate_emails.join("\n")} + + Et merci encore de votre engagement auprès de Nos oignons ! + + -- + Le robot du conseil d'administration + END_OF_BODY + mail = Mail.new :charset => 'utf-8', + :from => NosOignons::BOARD_EMAIL, + :to => NosOignons::ADVISORS_EMAIL, + :subject => subject, + :body => body + mail.deliver + end + def pre_commit_hook! if system('git rev-parse --quiet --verify HEAD >/dev/null') against = 'HEAD' -- 2.39.5