#-*- coding: utf-8 -*-
#
# Système de gestion des adhésions de Nos oignons
# Copyright © 2013-2014 Nos oignons <contact@nos-oignons.net>
#
# 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 <http://www.gnu.org/licenses/>.

When /^j'exécute list\-emails$/ do
  run_simple 'list-emails'
end

When /^j'exécute list-emails le (\d+)\-(\d+)\-(\d+)$/ do |year, month, day|$/
  Timecop.travel(Time.new(year, month, day)) do
    stdout_io = StringIO.new
    begin
      $stdout = stdout_io
      NosOignons.list_emails!
      @stdout = stdout_io.string
    ensure
      $stdout = STDOUT
    end
  end
end

When /^j'exécute update-ag-subscribers$/ do
  NosOignons.update_ag_subscribers!
end

When /^(?:que )?j'exécute send-membership-reminders$/ do
  NosOignons.send_membership_reminders!
end

When /^(?:que )?j'exécute send-membership-reminders le ([0-9]{4})-([0-9]{2})-([0-9]{2})$/ do |year, month, day|
  Timecop.travel(Date.new(year.to_i, month.to_i, day.to_i)) do
    NosOignons.send_membership_reminders!
  end
end

When /^j'exécute send\-member\-emails\-to\-advisors$/ do
  NosOignons.send_member_emails_to_advisors!
end

When /^j'exécute `create\-membership\-fee\-receipt ([0-9]+) ([0-9,]+)` le ([0-9]{4})-([0-9]{2})-([0-9]{2})$/ do |member, amount, year, month, day|
  Timecop.travel(Date.new(year.to_i, month.to_i, day.to_i)) do
    NosOignons.create_membership_fee_receipt!(member, amount)
  end
end

When /^j'exécute `(create\-membership\-fee\-receipt.*)`$/ do |cmd|
  run_simple cmd, :fail_on_error => false
end

Then /^je ne dois pas avoir eu d'erreur$/ do
  expect(last_command_started).to have_exit_status(0)
end

Then /^je dois voir comme erreur "(.*?)"$/ do |expected|
  expect(last_command_started).to have_output_on_stderr /#{Regexp.escape(expected)}/
end

Then /^la sortie doit être vide$/ do
  expect(last_command_started).to have_output_on_stdout('')
end

Then /^la sortie doit être:$/ do |expected|
  # add an extra line feed for nice scenario
  expect(last_command_started).to have_output_on_stdout(expected)
end

Then /^la sortie doit être "([^"]*)"$/ do |expected|
  begin
    expect(last_command_started).to have_output_on_stdout(expected)
  rescue Aruba::NoCommandHasBeenStartedError
    expect(@stdout.rstrip).to eq(expected)
  end
end
