X-Git-Url: https://nos-oignons.net/gitweb/gestion-adh.git/blobdiff_plain/9d982cb5d7f9abe598c8df3eefabe10501056110..1b924f1f9311e5103fc706094b8f0aa5a1b682a2:/features/step_definitions/members.rb diff --git a/features/step_definitions/members.rb b/features/step_definitions/members.rb index 6e84484..0cde0b5 100644 --- a/features/step_definitions/members.rb +++ b/features/step_definitions/members.rb @@ -1,21 +1,45 @@ #-*- coding: utf-8 -*- +# +# Système de gestion des adhésions de Nos oignons +# Copyright © 2013-2014 Nos oignons +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . def init_db - @member_db_path = File.join(current_dir, NosOignons::MEMBERS_DB_DIR) - ENV['NOS_OIGNONS_BOARD_WIKI_PATH'] = current_dir - create_dir @member_db_path -end - -def create_new_member(name, joined_on, paid_on) - @last_member = { 'name' => name, - 'address' => "At #{name}", - 'email' => "#{name.downcase}@example.org", - 'joined_on' => joined_on, - 'membership_fee_paid_on' => paid_on - } + create_directory NosOignons::MEMBERS_DB_DIR + @member_db_path = expand_path(NosOignons::MEMBERS_DB_DIR) + ENV['NOS_OIGNONS_BOARD_WIKI_PATH'] = expand_path('.') +end + +def new_member_data(name, joined_on, paid_on) + { 'name' => name, + 'address' => "At #{name}", + 'email' => "#{name.downcase}@example.org", + 'joined_on' => joined_on, + 'membership_fee_paid_on' => paid_on + } +end + +def add_member(member_data) + @last_member = member_data init_db unless @member_db_path file = member_filename_for_id(new_id) - write_file file, render_member_file(@last_member) + File.write file, render_member_file(@last_member) +end + +def create_new_member(*args) + add_member(new_member_data(*args)) end Given /une base de membres vide$/ do @@ -35,14 +59,41 @@ Given /^(?:une base )?avec (\w+)(, à jour de cotisation| qui n'a pas payé sa c create_new_member(name, joined_on, paid_on) end -Given /^une base avec (\w+) qui a adhéré le ([0-9-]+) et payé sa dernière cotisation le ([0-9-]+)$/ do |name, joined_on, paid_on| +Given /^une base avec (\w+) qui a adhérée? le ([0-9-]+) et payé sa dernière cotisation le ([0-9-]+)$/ do |name, joined_on, paid_on| create_new_member(name, joined_on, paid_on) end -Given /^(?:une base )?avec (\w+) qui doit renouveller sa cotisation d'ici (\d+) jours$/ do |name, days_before_anniversary| - paid_on = Time.now.to_date - days_before_anniversary.to_i +Given /^une base avec (\w+), membre (\w+), ayant cotisé le ([0-9-]+)$/ do |name, member_id, paid_on| + create_new_member(name, paid_on, paid_on) + expect(File.read(member_filename_for_id(member_id))).to include(name) +end + +Given /^une base avec (\w+), membre (\w+), n'ayant jamais cotisé$/ do |name, member_id| + joined_on = (Time.now - 3600*24*30).strftime('%Y-%m-%d') + create_new_member(name, joined_on, nil) + expect(File.read(member_filename_for_id(member_id))).to include(name) +end + +Given /^une base avec uniquement (\w+), membre (\w+)$/ do |name, member_id| + paid_on = (Time.now - 3600*24*30).strftime('%Y-%m-%d') + create_new_member(name, paid_on, paid_on) + member_path = File.join(member_filename_for_id(member_id)) + expect(File.read(member_path)).to include(name) + expect(Dir.glob("#{@member_db_path}/[0-9]*").size).to eq(1) +end + +Given /^(?:une base )?avec (\w+) (ayant une adresse postale et |qui n'a pas d'adresse postale et )?qui doit renouveler sa cotisation d'ici (\d+) jours$/ do |name, address_status, days_before_anniversary| + now = Time.now + paid_on = Time.new(now.year - 1, now.month, now.day).to_date + days_before_anniversary.to_i joined_on = paid_on - create_new_member(name, joined_on, paid_on) + member_data = new_member_data(name, joined_on, paid_on) + case address_status + when /ayant/ + member_data['address'] = "At #{name}'s" + when /qui n'a pas/ + member_data.delete('address') + end + add_member(member_data) end Given /^une nouvelle adhésion de (\w+)$/ do |name| @@ -50,32 +101,49 @@ Given /^une nouvelle adhésion de (\w+)$/ do |name| create_new_member(name, joined_on, joined_on) end +Given /^une nouvelle adhésion de (\w+) qui a payé sa cotisation il y a (\d+) jours$/ do |name, days| + joined_on = (Time.now.to_date - days.to_i).strftime('%Y-%m-%d') + create_new_member(name, joined_on, joined_on) +end + Given /^elle avait déjà reçu des appels l'année précédente$/ do Timecop.travel(Time.now.to_date - 375) do NosOignons::ReminderDb.instance.record(OpenStruct.new(@last_member)) end end +Given /^qui a déjà reçu un appel (\d+) jours plus tôt$/ do |days_ago| + Timecop.travel(Time.now.to_date - days_ago.to_i) do + NosOignons::ReminderDb.instance.record(OpenStruct.new(@last_member)) + end +end + +Given /^qui a déjà reçu un appel le ([0-9-]+)$/ do |date| + Timecop.travel(Time.parse(date)) do + NosOignons::ReminderDb.instance.record(OpenStruct.new(@last_member)) + end +end + When /^j'ajoute une fiche correcte pour une nouvelle adhésion$/ do @file = member_filename_for_id(new_id) - write_file @file, render_member_file(EXTRA_MEMBER) + File.write @file, render_member_file(EXTRA_MEMBER) end When /^j'ajoute une fiche vide$/ do @file = member_filename_for_id(new_id) - write_file @file, '' + File.write @file, '' end When /^j'ajoute une fiche sans YAML$/ do @file = member_filename_for_id(new_id) - write_file @file, <<-EOF.gsub(/^ /, '') + File.write @file, <<-EOF.gsub(/^ /, '') Ceci est une fiche sans YAML. EOF end When /^j'ajoute une fiche avec du mauvais YAML$/ do @file = member_filename_for_id(new_id) - write_file @file, <<-EOF.gsub(/^ /, '') + File.write @file, <<-EOF.gsub(/^ /, '') --- [This is missing a closing bracket --- @@ -84,7 +152,7 @@ end When /^j'ajoute une fiche sans email$/ do @file = member_filename_for_id(new_id) - write_file @file, <<-EOF.gsub(/^ /, '') + File.write @file, <<-EOF.gsub(/^ /, '') --- name: J. Example address: | @@ -98,7 +166,7 @@ end When /^j'ajoute une fiche sans nom$/ do @file = member_filename_for_id(new_id) - write_file @file, <<-EOF.gsub(/^ /, '') + File.write @file, <<-EOF.gsub(/^ /, '') --- email: joe@example.org address: | @@ -112,7 +180,7 @@ end When /^j'ajoute une fiche avec comme date d'adhésion "([^"]*)"$/ do |date| @file = member_filename_for_id(new_id) - write_file @file, <<-EOF.gsub(/^ /, '') + File.write @file, <<-EOF.gsub(/^ /, '') --- name: J. Example email: joe@example.org @@ -127,7 +195,7 @@ end When /^j'ajoute une fiche avec comme date de cotisation "([^"]*)"$/ do |date| @file = member_filename_for_id(new_id) - write_file @file, <<-EOF.gsub(/^ /, '') + File.write @file, <<-EOF.gsub(/^ /, '') --- name: J. Example email: joe@example.org @@ -142,10 +210,10 @@ end When /^je supprime le nom sur une fiche existante$/ do @file = member_filename_for_id(1) - run_simple "sed -e '/^name:/d' -i #{@file}" + run_command_and_stop "sed -e '/^name:/d' -i #{@file}" end When /^j'ajoute un fichier hors de la base des adhérents$/ do - @file = 'test' - write_file @file, 'Test content.' + @file = expand_path('test') + File.write @file, 'Test content.' end