describe Helpscout::UserConversationsAdapter do
  let(:from) { Date.new(2017, 11) }
  let(:to)   { Date.new(2017, 12) }

  describe '#can_fetch_reports?' do
    context 'when a required secret is missing' do
      before do
        Rails.application.secrets.helpscout[:mailbox_id] = nil
      end

      it { expect(described_class.new(from, to).can_fetch_reports?).to be false }
    end

    context 'when all required secrets are present' do
      before do
        mock_helpscout_secrets
      end

      it { expect(described_class.new(from, to).can_fetch_reports?).to be true }
    end
  end

  describe '#reports', vcr: { cassette_name: 'helpscout_conversations_reports' } do
    before do
      mock_helpscout_secrets
      Rails.cache.clear
    end

    subject { described_class.new(from, to) }

    it 'returns one report result per month' do
      expect(subject.reports.count).to eq 2
    end

    it 'populates each report with data' do
      expect(subject.reports.first[:replies_sent]).to be > 0
      expect(subject.reports.first[:start_date]).to eq Time.utc(2017, 11)
      expect(subject.reports.first[:end_date]).to eq Time.utc(2017, 12)

      expect(subject.reports.last[:replies_sent]).to be > 0
      expect(subject.reports.last[:start_date]).to eq Time.utc(2017, 12)
      expect(subject.reports.last[:end_date]).to eq Time.utc(2018, 01)
    end
  end

  def mock_helpscout_secrets
    Rails.application.secrets.helpscout[:mailbox_id] = '9999'
    Rails.application.secrets.helpscout[:client_id] = '1234'
    Rails.application.secrets.helpscout[:client_secret] = '5678'
  end
end
