spec/lib/flapjack/data/contact_spec.rb in flapjack-0.6.61 vs spec/lib/flapjack/data/contact_spec.rb in flapjack-0.7.0
- old
+ new
@@ -1,12 +1,30 @@
require 'spec_helper'
+require 'active_support/time_with_zone'
+require 'ice_cube'
+
require 'flapjack/data/contact'
require 'flapjack/data/entity_check'
+require 'flapjack/data/notification_rule'
describe Flapjack::Data::Contact, :redis => true do
+ weekdays_8_18 = IceCube::Schedule.new(Time.local(2013,2,1,8,0,0), :duration => 60 * 60 * 10)
+ weekdays_8_18.add_recurrence_rule(IceCube::Rule.weekly.day(:monday, :tuesday, :wednesday, :thursday, :friday))
+
+ let(:notification_rule_data) {
+ {:entity_tags => ["database","physical"],
+ :entities => ["foo-app-01.example.com"],
+ :time_restrictions => [ weekdays_8_18.to_hash ],
+ :warning_media => ["email"],
+ :critical_media => ["sms", "email"],
+ :warning_blackhole => false,
+ :critical_blackhole => false
+ }
+ }
+
before(:each) do
Flapjack::Data::Contact.add({'id' => '362',
'first_name' => 'John',
'last_name' => 'Johnson',
'email' => 'johnj@example.com',
@@ -40,18 +58,97 @@
contact = Flapjack::Data::Contact.find_by_id('362', :redis => @redis)
contact.should_not be_nil
contact.name.should == "John Johnson"
end
- it "deletes all contacts" do
- Flapjack::Data::Contact.delete_all(:redis => @redis)
- contact = Flapjack::Data::Contact.find_by_id('362', :redis => @redis)
- contact.should be_nil
+ it "adds a contact with the same id as an existing one, clears notification rules" do
contact = Flapjack::Data::Contact.find_by_id('363', :redis => @redis)
- contact.should be_nil
+ contact.should_not be_nil
+
+ contact.add_notification_rule(notification_rule_data)
+
+ nr = contact.notification_rules
+ nr.should_not be_nil
+ nr.should have(1).notification_rule
+
+ Flapjack::Data::Contact.add({'id' => '363',
+ 'first_name' => 'Smithy',
+ 'last_name' => 'Smith',
+ 'email' => 'smithys@example.com'},
+ :redis => @redis)
+
+ contact = Flapjack::Data::Contact.find_by_id('363', :redis => @redis)
+ contact.should_not be_nil
+ contact.name.should == 'Smithy Smith'
+
+ nr = contact.notification_rules
+ nr.should_not be_nil
+ nr.should be_empty
end
+ it "updates a contact, does not clear notification rules" do
+ contact = Flapjack::Data::Contact.find_by_id('363', :redis => @redis)
+ contact.should_not be_nil
+
+ contact.add_notification_rule(notification_rule_data)
+
+ nr = contact.notification_rules
+ nr.should_not be_nil
+ nr.should have(1).notification_rule
+
+ contact.update('first_name' => 'John',
+ 'last_name' => 'Smith',
+ 'email' => 'johns@example.com')
+ contact.name.should == 'John Smith'
+
+ nr = contact.notification_rules
+ nr.should_not be_nil
+ nr.should have(1).notification_rule
+ end
+
+ it "adds a notification rule for a contact" do
+ contact = Flapjack::Data::Contact.find_by_id('363', :redis => @redis)
+ contact.should_not be_nil
+
+ expect {
+ contact.add_notification_rule(notification_rule_data)
+ }.to change { contact.notification_rules.size }.from(0).to(1)
+ end
+
+ it "removes a notification rule from a contact" do
+ contact = Flapjack::Data::Contact.find_by_id('363', :redis => @redis)
+ contact.should_not be_nil
+
+ rule = contact.add_notification_rule(notification_rule_data)
+
+ expect {
+ contact.delete_notification_rule(rule)
+ }.to change { contact.notification_rules.size }.from(1).to(0)
+ end
+
+ it "deletes a contact by id, including linked entities, checks, tags and notification rules" do
+ contact = Flapjack::Data::Contact.find_by_id('362', :redis => @redis)
+ contact.add_tags('admin')
+
+ entity_name = 'abc-123'
+
+ entity = Flapjack::Data::Entity.add({'id' => '5000',
+ 'name' => entity_name,
+ 'contacts' => ['362']},
+ :redis => @redis)
+
+ expect {
+ expect {
+ expect {
+ contact.delete!
+ }.to change { Flapjack::Data::Contact.all(:redis => @redis).size }.by(-1)
+ }.to change { @redis.smembers('contact_tag:admin').size }.by(-1)
+ }.to change { entity.contacts.size }.by(-1)
+ end
+
+ it "deletes all contacts"
+
it "returns a list of entities and their checks for a contact" do
entity_name = 'abc-123'
Flapjack::Data::Entity.add({'id' => '5000',
'name' => entity_name,
@@ -61,10 +158,10 @@
ec = Flapjack::Data::EntityCheck.for_entity_name(entity_name, 'PING', :redis => @redis)
t = Time.now.to_i
ec.update_state('ok', :timestamp => t, :summary => 'a')
contact = Flapjack::Data::Contact.find_by_id('362', :redis => @redis)
- eandcs = contact.entities_and_checks
+ eandcs = contact.entities(:checks => true)
eandcs.should_not be_nil
eandcs.should be_an(Array)
eandcs.should have(1).entity_and_checks
eandc = eandcs.first