require 'spec_helper'

module Mailsafe
  RSpec.describe ReceipientWhitelist do

    describe ".email_has_domain" do
      context "single whitelisted domain" do
        let!(:whitelist) { "gmail.com" }

        it "accepts the allowed domains" do
          expect(ReceipientWhitelist.email_has_domain?("bert@gmail.com", whitelist)).to be_true 
        end

        it "does not accept other domains" do
          expect(ReceipientWhitelist.email_has_domain?("bert@gmx.de", whitelist)).to be_false 
          expect(ReceipientWhitelist.email_has_domain?("bert@yahoo.com", whitelist)).to be_false 
          expect(ReceipientWhitelist.email_has_domain?("bert@ggmail.com", whitelist)).to be_false 
          expect(ReceipientWhitelist.email_has_domain?("bert@gmail.com.de", whitelist)).to be_false 
        end
      end

      context "multiple whitelisted domains" do
        let!(:whitelist) { "gmail.com, gmx.de" }

        it "accepts the allowed domains" do
          expect(ReceipientWhitelist.email_has_domain?("bert@gmail.com", whitelist)).to be_true 
          expect(ReceipientWhitelist.email_has_domain?("bert@gmx.de", whitelist)).to be_true 
        end

        it "does not accept other domains" do
          expect(ReceipientWhitelist.email_has_domain?("bert@yahoo.com", whitelist)).to be_false 
          expect(ReceipientWhitelist.email_has_domain?("bert@ggmail.com", whitelist)).to be_false 
        end
      end

      context "invalid email addresses" do
        let!(:whitelist) { "gmail.com" }

        it "does not accept them" do
          expect(ReceipientWhitelist.email_has_domain?("bert", whitelist)).to be_false 
        end
      end

      context "invalid whitelist" do
        let!(:whitelist) { "gmail.com, " }

        it "accepts the allowed domains" do
          expect(ReceipientWhitelist.email_has_domain?("bert@gmail.com", whitelist)).to be_true 
        end

        it "does not accept other domains" do
          expect(ReceipientWhitelist.email_has_domain?("bert@gmx.de", whitelist)).to be_false 
          expect(ReceipientWhitelist.email_has_domain?("bert@yahoo.com", whitelist)).to be_false 
          expect(ReceipientWhitelist.email_has_domain?("bert@ggmail.com", whitelist)).to be_false 
          expect(ReceipientWhitelist.email_has_domain?("bert@gmail.com.de", whitelist)).to be_false 
        end
      end

    end
  end
end