]> nos-oignons.net Git - gestion-adh.git/commitdiff
Start implementing update-ag-subscribers
authorLunar <lunar@anargeek.net>
Sat, 1 Jun 2013 16:36:10 +0000 (18:36 +0200)
committerLunar <lunar@anargeek.net>
Sat, 1 Jun 2013 16:36:10 +0000 (18:36 +0200)
bin/update-ag-subscribers [new file with mode: 0755]
features/step_definitions/commands.rb
features/step_definitions/mailman.rb [new file with mode: 0644]
features/support/mock_mailman/add_members [new file with mode: 0755]
features/support/mock_mailman/list_members [new file with mode: 0755]
features/support/mock_mailman/remove_members [new file with mode: 0755]
features/update-ag-subscribers.feature
lib/nos_oignons/mailman.rb [new file with mode: 0644]

diff --git a/bin/update-ag-subscribers b/bin/update-ag-subscribers
new file mode 100755 (executable)
index 0000000..e5580c2
--- /dev/null
@@ -0,0 +1,9 @@
+#!/usr/bin/ruby1.9.1
+#-*- coding: utf-8 -*-
+
+require 'rubygems'
+require 'bundler'
+Bundler.setup
+
+require 'nos_oignons/mailman'
+require 'nos_oignons/subscriptions'
index 0aec8b608430a5bd6a97ff4a5d831eddaee82190..685aa158906edabe144cb84c55a3295c9a8a78c1 100644 (file)
@@ -4,6 +4,10 @@ When /^j'exécute list\-emails$/ do
   run_simple 'list-emails'
 end
 
   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
 Then /^je ne dois pas avoir eu d'erreur$/ do
   assert_exit_status(0)
 end
diff --git a/features/step_definitions/mailman.rb b/features/step_definitions/mailman.rb
new file mode 100644 (file)
index 0000000..ab98b18
--- /dev/null
@@ -0,0 +1,35 @@
+#-*- 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
+
diff --git a/features/support/mock_mailman/add_members b/features/support/mock_mailman/add_members
new file mode 100755 (executable)
index 0000000..59563d8
--- /dev/null
@@ -0,0 +1,15 @@
+#!/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)) }
diff --git a/features/support/mock_mailman/list_members b/features/support/mock_mailman/list_members
new file mode 100755 (executable)
index 0000000..47fbdda
--- /dev/null
@@ -0,0 +1,10 @@
+#!/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
diff --git a/features/support/mock_mailman/remove_members b/features/support/mock_mailman/remove_members
new file mode 100755 (executable)
index 0000000..b3eaffa
--- /dev/null
@@ -0,0 +1,15 @@
+#!/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)) }
index 7fe997dde9dfc49ebac4c5fbc7053c2ff298b4e0..0ca89aa543229068a4e8b1b932f0fe5add415ba1 100644 (file)
@@ -1,5 +1,6 @@
 # language: fr
 
 # 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
 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
diff --git a/lib/nos_oignons/mailman.rb b/lib/nos_oignons/mailman.rb
new file mode 100644 (file)
index 0000000..501b542
--- /dev/null
@@ -0,0 +1,22 @@
+#-*- 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