1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- require 'rails_helper'
- describe Scenario do
- let(:new_instance) { users(:bob).scenarios.build(:name => "some scenario") }
- it_behaves_like HasGuid
- describe "validations" do
- before do
- expect(new_instance).to be_valid
- end
- it "validates the presence of name" do
- new_instance.name = ''
- expect(new_instance).not_to be_valid
- end
- it "validates the presence of user" do
- new_instance.user = nil
- expect(new_instance).not_to be_valid
- end
- it "validates tag_fg_color is hex color" do
- new_instance.tag_fg_color = '#N07H3X'
- expect(new_instance).not_to be_valid
- new_instance.tag_fg_color = '#BADA55'
- expect(new_instance).to be_valid
- end
- it "allows nil tag_fg_color" do
- new_instance.tag_fg_color = nil
- expect(new_instance).to be_valid
- end
- it "validates tag_bg_color is hex color" do
- new_instance.tag_bg_color = '#N07H3X'
- expect(new_instance).not_to be_valid
- new_instance.tag_bg_color = '#BADA55'
- expect(new_instance).to be_valid
- end
- it "allows nil tag_bg_color" do
- new_instance.tag_bg_color = nil
- expect(new_instance).to be_valid
- end
- it "only allows Agents owned by user" do
- new_instance.agent_ids = [agents(:bob_website_agent).id]
- expect(new_instance).to be_valid
- new_instance.agent_ids = [agents(:jane_website_agent).id]
- expect(new_instance).not_to be_valid
- end
- end
- describe "counters" do
- it "maintains a counter cache on user" do
- expect {
- new_instance.save!
- }.to change { users(:bob).reload.scenario_count }.by(1)
- expect {
- new_instance.destroy
- }.to change { users(:bob).reload.scenario_count }.by(-1)
- end
- end
- context '#unique_agents' do
- it "equals agents when no agents are shared" do
- agent_ids = scenarios(:bob_weather).agents.map(&:id).sort
- unique_agent_ids = scenarios(:bob_weather).send(:unique_agent_ids).sort
- expect(agent_ids).to eq(unique_agent_ids)
- end
- it "includes only agents that are not present in two scnearios" do
- unique_agent_ids = scenarios(:jane_weather).send(:unique_agent_ids)
- expect(unique_agent_ids).to eq([agents(:jane_rain_notifier_agent).id])
- end
- it "returns no agents when all are also used in a different scenario" do
- expect(scenarios(:jane_weather_duplicate).send(:unique_agent_ids)).to eq([])
- end
- end
- context '#destroy_with_mode' do
- it "only destroys the scenario when no mode is passed" do
- expect { scenarios(:jane_weather).destroy_with_mode('') }.not_to change(Agent, :count)
- end
- it "only destroys unique agents when 'unique_agents' is passed" do
- expect { scenarios(:jane_weather).destroy_with_mode('unique_agents') }.to change(Agent, :count).by(-1)
- end
- it "destroys all agents when 'all_agents' is passed" do
- expect { scenarios(:jane_weather).destroy_with_mode('all_agents') }.to change(Agent, :count).by(-2)
- end
- end
- end
|