# frozen_string_literal: true
require "rails_helper"

RSpec.describe ActiveAdmin::AuthorizationAdapter do
  let(:adapter) { ActiveAdmin::AuthorizationAdapter.new(double, double) }

  describe "#authorized?" do
    it "should always return true" do
      expect(adapter.authorized?(:read, "Resource")).to eq true
    end
  end

  describe "#scope_collection" do
    it "should return the collection unscoped" do
      collection = double
      expect(adapter.scope_collection(collection, ActiveAdmin::Auth::READ)).to eq collection
    end
  end

  describe "using #normalized in a subclass" do
    let(:auth_class) do
      Class.new(ActiveAdmin::AuthorizationAdapter) do
        def authorized?(action, subject = nil)
          case subject
          when normalized(String)
            true
          else
            false
          end
        end
      end
    end

    let(:adapter) { auth_class.new(double, double) }

    it "should match against a class" do
      expect(adapter.authorized?(:read, String)).to eq true
    end

    it "should match against an instance" do
      expect(adapter.authorized?(:read, "String")).to eq true
    end

    it "should not match a different class" do
      expect(adapter.authorized?(:read, Hash)).to eq false
    end

    it "should not match a different instance" do
      expect(adapter.authorized?(:read, {})).to eq false
    end
  end
end
