X-Git-Url: https://nos-oignons.net/gitweb/gestion-adh.git/blobdiff_plain/01f97846a9919f81d6af6fdd76bdac0fc14572a4..56d63dc536c09e07e7de107a76500ecc92cf7cb7:/features/step_definitions/mailman.rb diff --git a/features/step_definitions/mailman.rb b/features/step_definitions/mailman.rb index e201bab..c3c36cf 100644 --- a/features/step_definitions/mailman.rb +++ b/features/step_definitions/mailman.rb @@ -16,36 +16,61 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +require 'webmock' require 'json' +require 'digest' Before('@mailman') do - @mock_mailman_db = expand_path('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}" + @ag_emails = [] + stub_request(:any, /mailman.example.org/). + with(basic_auth: ['mailman_rest_user', 'mailman_rest_pass']) + stub_request(:get, 'https://mailman.example.org/3.0/lists/ag@nos-oignons.net/roster/member'). + with(basic_auth: ['mailman_rest_user', 'mailman_rest_pass']). + to_return { |request| {body: roster_member_payload } } end -After('@mailman') do - ENV['PATH'] = @orig_path - FileUtils.remove_entry_secure @mock_mailman_db +def member_id_for_email(email) + Digest::SHA1.hexdigest(email) end -def init_mailman_mock_db(dict) - File.open(@mock_mailman_db, 'w') { |f| f.write(JSON.dump(dict)) } +def roster_member_payload + # This is an approximation of the actual payload from Mailman, but good enough for our needs + payload = { + "total_size": @ag_emails.count, + "start": 0, + "entries": @ag_emails.map { |email| { "email": email, "member_id": member_id_for_email(email) } }, + } + payload.to_json end -def mailman_mock_db - JSON.load(File.open(@mock_mailman_db)) +Given /^une liste ag@ avec comme emails inscrits:$/ do |subscriber_list| + @ag_emails = subscriber_list.strip.split end -Given /^une liste ag@ avec comme emails inscrits:$/ do |subscriber_list| - emails = subscriber_list.strip.split - init_mailman_mock_db('ag' => emails) +Then 'la liste ag@ doit avoir reçu l’inscription de {string}' do |email| + expect( + a_request(:post, "https://mailman.example.org/3.0/members"). + with(headers: {'Content-Type': 'application/json'}, + body: hash_including( + {"list_id": "ag.nos-oignons.net", + "subscriber": email, + "pre_verified": true, + "pre_confirmed": true, + "pre_approved": true, + } + ), + )).to have_been_made +end + +Then 'la liste ag@ ne doit pas avoir reçu d’inscription' do + expect( + a_request(:post, "https://mailman.example.org/3.0/members") + ).not_to have_been_made 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) +Then 'la liste ag@ doit avoir reçu la désinscription de {string}' do |email| + expect( + a_request(:delete, "https://mailman.example.org/3.0/members/#{member_id_for_email(email)}") + ).to have_been_made end