Skip to content

Commit

Permalink
Add tests for acts_as roles and arrange tests for concern
Browse files Browse the repository at this point in the history
  • Loading branch information
simukappu committed Aug 7, 2016
1 parent fcdcbf7 commit aa182f0
Show file tree
Hide file tree
Showing 12 changed files with 112 additions and 45 deletions.
4 changes: 4 additions & 0 deletions lib/activity_notification/models/concerns/notifiable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ def default_url_options
end

class_methods do
def available_as_notifiable?
true
end

def set_notifiable_class_defaults
self._notification_targets = {}
self._notification_group = {}
Expand Down
6 changes: 6 additions & 0 deletions lib/activity_notification/models/concerns/notifier.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,11 @@ module Notifier
class_name: "::ActivityNotification::Notification",
as: :notifier
end

class_methods do
def available_as_notifier?
true
end
end
end
end
4 changes: 4 additions & 0 deletions lib/activity_notification/models/concerns/target.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ module Target
end

class_methods do
def available_as_target?
true
end

def set_target_class_defaults
self._notification_email = nil
self._notification_email_allowed = ActivityNotification.config.email_enabled
Expand Down
1 change: 0 additions & 1 deletion lib/activity_notification/roles/acts_as_notifier.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ module ActsAsNotifier
class_methods do
def acts_as_notifier
include Notifier
true
end
end
end
Expand Down
19 changes: 7 additions & 12 deletions lib/activity_notification/roles/acts_as_target.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,23 @@ module ActsAsTarget
extend ActiveSupport::Concern

class_methods do
def acts_as_target(opts = {})
def acts_as_target(options = {})
include Target
options = opts.clone
if options[:skip_email] == true
self.send("_notification_email_allowed=".to_sym, false)
options.delete(:email_allowed)
end
assign_target_globals(options)
nil
[:email, :email_allowed].map { |key|
options[key] ?
[key, self.send("_notification_#{key}=".to_sym, options.delete(key))] :
[nil, nil]
}.to_h.delete_if { |k, v| k.nil? }
end
alias_method :acts_as_notification_target, :acts_as_target

def available_target_options
[:skip_email, :email, :email_allowed].freeze
end

def assign_target_globals(options)
[:email, :email_allowed].each do |key|
if options[key]
self.send("_notification_#{key}=".to_sym, options.delete(key))
end
end
end
end
end
end
27 changes: 0 additions & 27 deletions spec/concerns/acts_as_notifiable_spec.rb

This file was deleted.

File renamed without changes.
32 changes: 32 additions & 0 deletions spec/concerns/roles/acts_as_notifiable_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
describe ActivityNotification::ActsAsNotifiable do
let(:dummy_model_class) { DummyModel }

describe "as public class methods" do
describe "acts_as_notifiable" do
it "have not included Notifiable before calling" do
expect(dummy_model_class.respond_to?(:available_as_notifiable?)).to be_falsey
end

it "includes Notifiable" do
dummy_model_class.acts_as_notifiable :users
expect(dummy_model_class.respond_to?(:available_as_notifiable?)).to be_truthy
expect(dummy_model_class.available_as_notifiable?).to be_truthy
end

context "with no options" do
it "returns hash of specified options" do
expect(dummy_model_class.acts_as_notifiable :users).to eq({})
end
end

#TODO test other options
end

describe "available_notifiable_options" do
it "returns list of available options in acts_as_notifiable" do
expect(dummy_model_class.available_notifiable_options)
.to eq([:targets, :group, :notifier, :parameters, :email_allowed, :notifiable_path])
end
end
end
end
17 changes: 17 additions & 0 deletions spec/concerns/roles/acts_as_notifier_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
describe ActivityNotification::ActsAsNotifier do
let(:dummy_model_class) { DummyModel }

describe "as public class methods" do
describe "acts_as_notifier" do
it "have not included Notifier before calling" do
expect(dummy_model_class.respond_to?(:available_as_notifier?)).to be_falsey
end

it "includes Notifier" do
dummy_model_class.acts_as_notifier
expect(dummy_model_class.respond_to?(:available_as_notifier?)).to be_truthy
expect(dummy_model_class.available_as_notifier?).to be_truthy
end
end
end
end
40 changes: 40 additions & 0 deletions spec/concerns/roles/acts_as_target_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
describe ActivityNotification::ActsAsTarget do
let(:dummy_model_class) { DummyModel }

describe "as public class methods" do
describe "acts_as_target" do
it "have not included Target before calling" do
expect(dummy_model_class.respond_to?(:available_as_target?)).to be_falsey
end

it "includes Target" do
dummy_model_class.acts_as_target
expect(dummy_model_class.respond_to?(:available_as_target?)).to be_truthy
expect(dummy_model_class.available_as_target?).to be_truthy
end

context "with no options" do
it "returns hash of specified options" do
expect(dummy_model_class.acts_as_target).to eq({})
end
end

#TODO test other options
end

describe "acts_as_notification_target" do
it "is alias of acts_as_target" do
#TODO better way
#expect(dummy_model_class.acts_as_notification_target).to receive(:acts_as_target)
expect(dummy_model_class.respond_to?(:acts_as_notification_target)).to be_truthy
end
end

describe "available_target_options" do
it "returns list of available options in acts_as_target" do
expect(dummy_model_class.available_target_options)
.to eq([:skip_email, :email, :email_allowed])
end
end
end
end
5 changes: 0 additions & 5 deletions spec/models/test/comment_spec.rb

This file was deleted.

2 changes: 2 additions & 0 deletions spec/rails_app/app/models/dummy_model.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class DummyModel < ActiveRecord::Base
end

0 comments on commit aa182f0

Please sign in to comment.