require "spec_helper" describe Redistat::Event do include Redistat::Database before(:each) do db.flushdb @scope = "PageViews" @label = "about_us" @label_hash = Digest::SHA1.hexdigest(@label) @stats = {:views => 1} @meta = {:user_id => 239} @options = {:depth => :hour} @date = Time.now @event = Redistat::Event.new(@scope, @label, @date, @stats, @options, @meta) end it "should initialize properly" do @event.id.should be_nil @event.scope.should == @scope @event.label.should == @label @event.label_hash.should == @label_hash @event.date.to_time.should == @date @event.stats.should == @stats @event.meta.should == @meta @event.options.should == @event.default_options.merge(@options) end it "should allow changing attributes" do # date @event.date.to_time.should == @date @date = Time.now @event.date = @date @event.date.to_time.should == @date # label @event.label.should == @label @event.label_hash.should == @label_hash @label = "contact_us" @label_hash = Digest::SHA1.hexdigest(@label) @event.label = @label @event.label.should == @label @event.label_hash.should == @label_hash end it "should increment next_id" do event = Redistat::Event.new("VisitorCount", @label, @date, @stats, @options, @meta) @event.next_id.should == 1 event.next_id.should == 1 @event.next_id.should == 2 event.next_id.should == 2 end it "should store event properly" do @event = Redistat::Event.new(@scope, @label, @date, @stats, @options.merge({:store_event => true}), @meta) @event.new?.should be_true @event.save @event.new?.should be_false keys = db.keys "*" keys.should include("#{@event.scope}#{Redistat::KEY_EVENT}#{@event.id}") keys.should include("#{@event.scope}#{Redistat::KEY_EVENT_IDS}") end it "should find event by id" do @event = Redistat::Event.new(@scope, @label, @date, @stats, @options.merge({:store_event => true}), @meta).save fetched = Redistat::Event.find(@scope, @event.id) @event.scope.should == fetched.scope @event.label.should == fetched.label @event.date.to_s.should == fetched.date.to_s end it "should store summarized statistics" do 2.times do |i| @event = Redistat::Event.new(@scope, @label, @date, @stats, @options, @meta).save Redistat::Date::DEPTHS.each do |depth| summary = db.hgetall @event.key.to_s(depth) summary.should have_at_least(1).items summary["views"].should == (i+1).to_s break if depth == :hour end end end end