Sha256: ab5e3e23392e06052d73d3f8be0e387e5441c15806ff3b970a7fa02c8f9c7569

Contents?: true

Size: 1.95 KB

Versions: 1

Compression:

Stored size: 1.95 KB

Contents

require 'opt_out'
require 'test/unit'
require 'dotenv'

Dotenv.load

# All adapters must pass these tests. To setup a new adapter test:
#
# class MyAdapterTest < Test::Unit::TestCase
#   include AdapterTests
#   test_adapter(MyAdapter, {:some => 'options'}) do
#     # optional test setup block
#   end
# end
module AdapterTests
  def self.included(base)
    base.extend Macros
  end

  module Macros
    attr_accessor :original_config, :test_config

    def test_adapter(adapter, options = {}, &blk)
      self.original_config = OptOut.config.dup
      self.test_config = {
        :adapter => adapter,
        :options => options,
        :setup   => blk
      }
    end
  end

  def setup
    if custom_setup = self.class.test_config[:setup]
      custom_setup.call
    end
    OptOut.configure do |c|
      c.adapter = self.class.test_config[:adapter]
      c.options = self.class.test_config[:options]
    end
    OptOut.reset
  end

  def teardown
    OptOut.config.adapter = self.class.original_config[:adapter]
    OptOut.config.options = self.class.original_config[:options]
    OptOut.reset
  end

  def test_auto_subscribed
    assert OptOut.subscribed?('newsletters', '5')
  end

  def test_resubscribe
    OptOut.unsubscribe('newsletters', '5')
    OptOut.subscribe('newsletters', '5')
    assert OptOut.subscribed?('newsletters', '5')
    assert !OptOut.unsubscribed?('newsletters', '5')
  end

  def test_unsubscribe
    OptOut.unsubscribe('newsletters', '5')
    assert !OptOut.subscribed?('newsletters', '5')
    assert OptOut.unsubscribed?('newsletters', '5')
  end

  def test_multi_unsubscribe
    OptOut.unsubscribe('newsletters', '5')
    OptOut.unsubscribe('newsletters', '5')
    assert !OptOut.subscribed?('newsletters', '5')
    assert OptOut.unsubscribed?('newsletters', '5')
  end

  def test_unsubscribers
    OptOut.unsubscribe('newsletters', '5')
    OptOut.unsubscribe('newsletters', '6')
    assert_equal ['5', '6'], OptOut.unsubscribers('newsletters').sort
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
opt_out-1.0.0 test/adapter_tests.rb