В простой модели данных mongoid с пользователем, у которого много комментариев, я хочу наградить пользователя специальным значком, когда он напишет хотя бы 1 комментарий. Итак, я настроил наблюдателя следующим образом:
class CommentBadgeObserver < Mongoid::Observer
observe :comment
def after_create(comment)
CommentBadge.check_conditions_for(comment.user)
end
end
class CommentBadge < Badge
def self.check_conditions_for(user)
if user.comments.size > 1
badge = CommentBadge.create(:title => "Comment badge")
user.award(badge)
end
end
end
Метод user.award:
def award(badge)
self.badges << badge
self.save
end
Следующий тест не прошел (но я думаю, что это нормально, потому что наблюдатели выполняются в фоновом режиме?)
it 'should award the user with comment badge' do
@comment = Factory(:comment, :user => @user)
@user.badges.count.should == 1
@user.badges[0].title.should == "Comment badge"
end
Каким может быть лучший способ проверить это поведение?