require "spec_helper"

describe Imap::Backup::Configuration::ConnectionTester do
  context ".test" do
    let(:connection) { double("Imap::Backup::Account::Connection", imap: nil) }

    before do
      allow(Imap::Backup::Account::Connection).to receive(:new).and_return(connection)
    end

    context "call" do
      before { @result = subject.test("foo") }

      it "tries to connect" do
        expect(connection).to have_received(:imap)
      end
    end

    context "success" do
      before { @result = subject.test("foo") }

      it "returns success" do
        expect(@result).to match(/successful/)
      end
    end

    context "failure" do
      before do
        allow(connection).to receive(:imap).and_raise(error)
        @result = subject.test("foo")
      end

      context "no connection" do
        let(:error) do
          data = double("foo", text: "bar")
          Net::IMAP::NoResponseError.new(double("o", data: data))
        end

        it "returns success" do
          expect(@result).to match(/no response/i)
        end
      end

      context "other" do
        let(:error) { "Error" }
        it "returns success" do
          expect(@result).to match(/unexpected error/i)
        end
      end
    end
  end
end