require 'rails_helper'

feature "Admin download user emails" do

  let(:admin_user) { create(:user, newsletter: false, email: 'admin@consul.dev') }

  background do
    create(:administrator, user: admin_user)
    login_as(admin_user)
  end

  context "Download only emails from segment users with newsletter flag & present email " do

    before do
      create(:user, email: 'user@consul.dev')

      create(:administrator, user: create(:user, newsletter: true, email: 'admin_news1@consul.dev'))
      create(:administrator, user: create(:user, newsletter: true, email: 'admin_news2@consul.dev'))

      create(:administrator, user: create(:user, newsletter: false, email: 'no_news@consul.dev'))

      admin_without_email = create(:user, newsletter: true, email: 'no_email@consul.dev')
      create(:administrator, user: admin_without_email)
      admin_without_email.update_attribute(:email, nil)
    end

    scenario "returns the selected users segment csv file" do
      visit admin_emails_download_index_path

      within('#admin_download_emails') do
        select 'Administrators', from: 'users_segment'
        click_button 'Download emails list'
      end

      header = page.response_headers['Content-Disposition']
      expect(header).to match /^attachment/
      expect(header).to match /filename="Administrators.csv"$/

      file_contents = page.body.split(',')
      expect(file_contents.count).to eq(2)
      expect(file_contents).to include('admin_news1@consul.dev')
      expect(file_contents).to include('admin_news2@consul.dev')
      expect(file_contents).not_to include('admin@consul.dev')
      expect(file_contents).not_to include('user@consul.dev')
      expect(file_contents).not_to include('no_news@consul.dev')
      expect(file_contents).not_to include('no_email@consul.dev')
    end
  end
end
