require 'spec_helper' require 'discourse_event' require 'ostruct' describe DiscourseEvent do describe "#events" do it "defaults to {}" do DiscourseEvent.instance_variable_set(:@events, nil) DiscourseEvent.events.should == {} end describe "key value" do it "defaults to an empty set" do DiscourseEvent.events["event42"].should == Set.new end end end describe ".clear" do it "clears out events" do DiscourseEvent.events["event42"] << "test event" DiscourseEvent.clear DiscourseEvent.events.should be_empty end end context 'when calling events' do let(:harvey) { OpenStruct.new( name: 'Harvey Dent', job: 'District Attorney' ) } before do DiscourseEvent.on(:acid_face) do |user| user.name = 'Two Face' end end context 'when event does not exist' do it "does not raise an error" do DiscourseEvent.trigger(:missing_event) end end context 'when single event exists' do it "doesn't raise an error" do DiscourseEvent.trigger(:acid_face, harvey) end it "changes the name" do DiscourseEvent.trigger(:acid_face, harvey) harvey.name.should == 'Two Face' end end context 'when multiple events exist' do before do DiscourseEvent.on(:acid_face) do |user| user.job = 'Supervillian' end DiscourseEvent.trigger(:acid_face, harvey) end it 'triggers both events' do harvey.job.should == 'Supervillian' harvey.name.should == 'Two Face' end end end end