--- /dev/null
+#!/usr/bin/ruby1.9.1
+#-*- coding: utf-8 -*-
+
+require 'rubygems'
+require 'bundler'
+Bundler.setup
+
+require 'nos_oignons/mailman'
+require 'nos_oignons/subscriptions'
run_simple 'list-emails'
end
+When /^j'exécute update-ag-subscribers$/ do
+ run_simple 'update-ag-subscribers'
+end
+
Then /^je ne dois pas avoir eu d'erreur$/ do
assert_exit_status(0)
end
--- /dev/null
+#-*- coding: utf-8 -*-
+
+require 'json'
+
+Before('@mailman') do
+ @mock_mailman_db = "#{current_dir}/mock_mailman.json"
+ init_mailman_mock_db({})
+ ENV['MOCK_MAILMAN_DB'] = @mock_mailman_db
+ @orig_path = ENV['PATH']
+ ENV['PATH'] = "#{File.expand_path('../../support/mock_mailman', __FILE__)}:#{@orig_path}"
+end
+
+After('@mailman') do
+ ENV['PATH'] = @orig_path
+ FileUtils.remove_entry_secure @mock_mailman_db
+end
+
+def init_mailman_mock_db(dict)
+ File.open(@mock_mailman_db, 'w') { |f| f.write(JSON.dump(dict)) }
+end
+
+def mailman_mock_db
+ JSON.load(File.open(@mock_mailman_db))
+end
+
+Given /^une liste ag@ avec comme emails inscrits:$/ do |subscriber_list|
+ emails = subscriber_list.strip.split
+ init_mailman_mock_db('ag' => emails)
+end
+
+Then /^la liste ag@ doit avoir comme emails inscrits:$/ do |expected|
+ emails = expected.strip.split.sort
+ expect(mailman_mock_db['ag'].sort).to eql(emails)
+end
+
--- /dev/null
+#!/usr/bin/ruby1.9.1
+
+require 'json'
+
+db = ENV['MOCK_MAILMAN_DB']
+
+lists = JSON.load(File.read(db))
+if ARGV[0] != '-r'
+ $stderr.puts "Bad call"
+ exit 1
+else
+ emails = (ARGV[1] == '-' ? $stdin : File.open(ARGV[1])).read.split
+ lists[ARGV[2]] = (lists[ARGV[2]] || []) + emails
+end
+File.open(db, 'w') { |f| f.write(JSON.dump(lists)) }
--- /dev/null
+#!/usr/bin/ruby1.9.1
+
+require 'json'
+
+db = ENV['MOCK_MAILMAN_DB']
+
+lists = JSON.load(File.read(db))
+(lists[ARGV[0]] || []).each do |email|
+ puts email
+end
--- /dev/null
+#!/usr/bin/ruby1.9.1
+
+require 'json'
+
+db = ENV['MOCK_MAILMAN_DB']
+
+lists = JSON.load(File.read(db))
+if ARGV[0] != '-f'
+ $stderr.puts "Bad call"
+ exit 1
+else
+ emails = (ARGV[1] == '-' ? $stdin : File.open(ARGV[1])).read.split
+ lists[ARGV[2]] = (lists[ARGV[2]] || []) - emails
+end
+File.open(db, 'w') { |f| f.write(JSON.dump(lists)) }
# language: fr
+@mailman
Fonctionnalité: mettre à jour les emails inscrites à la liste ag@
En tant que membre de Nos oignons, mon adresse email doit être inscrite
à la liste ag@ qui correspond à l'assemblée générale. Elle doit
--- /dev/null
+#-*- coding: utf-8 -*-
+
+require 'shellwords'
+
+module NosOignons
+ module Mailman
+ class << self
+ def list_members(list)
+ `list_members #{Shellwords.escape(list)}`.split
+ end
+
+ def add_member(list, email)
+ add_members(list, [email])
+ end
+
+ def add_members(list, emails)
+ # XXX IO.popen
+ `add_members #{Shellwords.escape(list)}`.split
+ end
+ end
+ end
+end