require 'rails_helper' describe User do let(:bob) { users(:bob) } describe "validations" do describe "invitation_code" do context "when configured to use invitation codes" do before do stub(User).using_invitation_code? {true} end it "only accepts valid invitation codes" do User::INVITATION_CODES.each do |v| should allow_value(v).for(:invitation_code) end end it "can reject invalid invitation codes" do %w['foo', 'bar'].each do |v| should_not allow_value(v).for(:invitation_code) end end it "requires no authentication code when requires_no_invitation_code! is called" do u = User.new(username: 'test', email: 'test@test.com', password: '12345678', password_confirmation: '12345678') u.requires_no_invitation_code! expect(u).to be_valid end end context "when configured not to use invitation codes" do before do stub(User).using_invitation_code? {false} end it "skips this validation" do %w['foo', 'bar', nil, ''].each do |v| should allow_value(v).for(:invitation_code) end end end end end context '#deactivate!' do it "deactivates the user and all her agents" do agent = agents(:jane_website_agent) users(:jane).deactivate! agent.reload expect(agent.deactivated).to be_truthy expect(users(:jane).deactivated_at).not_to be_nil end end context '#activate!' do before do users(:bob).deactivate! end it 'activates the user and all his agents' do agent = agents(:bob_website_agent) users(:bob).activate! agent.reload expect(agent.deactivated).to be_falsy expect(users(:bob).deactivated_at).to be_nil end end context '#undefined_agent_types' do it 'returns an empty array when no agents are undefined' do expect(bob.undefined_agent_types).to be_empty end it 'returns the undefined agent types' do agent = agents(:bob_website_agent) agent.update_attribute(:type, 'Agents::UndefinedAgent') expect(bob.undefined_agent_types).to match_array(['Agents::UndefinedAgent']) end end context '#undefined_agents' do it 'returns an empty array when no agents are undefined' do expect(bob.undefined_agents).to be_empty end it 'returns the undefined agent types' do agent = agents(:bob_website_agent) agent.update_attribute(:type, 'Agents::UndefinedAgent') expect(bob.undefined_agents).not_to be_empty expect(bob.undefined_agents.first).to be_a(Agent) end end end