require 'spec_helper' shared_examples_for EmailConcern do let(:valid_options) { { :subject => "hello!", :expected_receive_period_in_days => "2" } } let(:agent) do _agent = described_class.new(:name => "some email agent", :options => valid_options) _agent.user = users(:jane) _agent end describe "validations" do it "should be valid" do expect(agent).to be_valid end it "should validate the presence of 'subject'" do agent.options['subject'] = '' expect(agent).not_to be_valid agent.options['subject'] = nil expect(agent).not_to be_valid end it "should validate the presence of 'expected_receive_period_in_days'" do agent.options['expected_receive_period_in_days'] = '' expect(agent).not_to be_valid agent.options['expected_receive_period_in_days'] = nil expect(agent).not_to be_valid end it "should validate that recipients, when provided, is one or more valid email addresses" do agent.options['recipients'] = '' expect(agent).to be_valid agent.options['recipients'] = nil expect(agent).to be_valid agent.options['recipients'] = 'bob@example.com' expect(agent).to be_valid agent.options['recipients'] = ['bob@example.com'] expect(agent).to be_valid agent.options['recipients'] = ['bob@example.com', 'jane@example.com'] expect(agent).to be_valid agent.options['recipients'] = ['bob@example.com', 'example.com'] expect(agent).not_to be_valid agent.options['recipients'] = ['hi!'] expect(agent).not_to be_valid agent.options['recipients'] = { :foo => "bar" } expect(agent).not_to be_valid agent.options['recipients'] = "wut" expect(agent).not_to be_valid end end describe "#recipients" do it "defaults to the user's email address" do expect(agent.recipients).to eq([users(:jane).email]) end it "wraps a string with an array" do agent.options['recipients'] = 'bob@bob.com' expect(agent.recipients).to eq(['bob@bob.com']) end it "handles an array" do agent.options['recipients'] = ['bob@bob.com', 'jane@jane.com'] expect(agent.recipients).to eq(['bob@bob.com', 'jane@jane.com']) end it "interpolates" do agent.options['recipients'] = "{{ username }}@{{ domain }}" expect(agent.recipients('username' => 'bob', 'domain' => 'example.com')).to eq(["bob@example.com"]) end end end