RSpec.describe ERDL::SNSAlert do
  describe '#initialize' do
    let(:subcommand) { 'ftp' }
    let(:success) { true }
    let(:filename) { 'test_file' }
    let(:opts) do
      {
        account: 'test_account',
        user: 'test_user',
        host: 'test_host'
      }
    end
    let(:subcommand_opts) do
      {
        location: 'test_directory'
      }
    end
    it 'does not raise an error' do
      expect { ERDL::SNSAlert.new(opts, subcommand_opts, subcommand, success, filename) }.to_not raise_error
    end
  end

  describe '#send_alert' do
    let(:subcommand) { 'ftp' }
    let(:filename) { 'test_file' }
    let(:opts) do
      {
        account: 'test_account',
        user: 'test_user',
        host: 'test_host'
      }
    end
    let(:subcommand_opts) do
      {
        location: 'test_directory'
      }
    end
    let(:options) { { subject: 'test subject', message: 'test message' } }
    context 'upload was a success' do
      let(:success) { true }
      it 'sends a notification' do
        topic = instance_double(Aws::SNS::Topic).as_null_object
        expect(topic).to receive(:publish)
        ERDL::SNSAlert.new(opts, subcommand_opts, subcommand, success, filename).send_alert(topic)
      end
    end
    context 'upload was not a success' do
      let(:success) { false }
      it 'sends a notification' do
        topic = instance_double(Aws::SNS::Topic).as_null_object
        expect(topic).to receive(:publish)
        ERDL::SNSAlert.new(opts, subcommand_opts, subcommand, success, filename).send_alert(topic)
      end
    end
  end
end
