Sha256: 0cb996d3fc8268af6a9e8ff7ccb20780a8cae150f12ca4afe8f3c190f3504553

Contents?: true

Size: 1.29 KB

Versions: 2

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true

##
# A fake group service implementation for use in test suites as a drop-in
# replacement for `RoleMapper` or the `hydra-role-management` gem, allowing
# dynamic group assignment backed by in-memory data structures.
#
# @example setup the group service for an rspec test suite
#   config.before(:suite) do
#     ::User.group_service = TestHydraGroupService.new
#   end
#
# @example adding a user to a group
#   ::User.group_service.add(user: my_user, groups: ['a_group'])
#
# @example clearing the user -> group map
#   ::User.group_service.clear
#
# @see Hydra::User.group_service
class TestHydraGroupService
  ##
  # @param group_map [Hash{String, Array<String>}] map user keys to group names
  def initialize(group_map: {})
    @group_map = group_map
  end

  ##
  # @param user [::User]
  # @param groups [Array<String>, String]
  #
  # @return [void]
  def add(user:, groups:)
    @group_map[user.user_key] = fetch_groups(user: user) + Array(groups)
  end

  ##
  # @return [void]
  def clear
    @group_map = {}
  end

  ##
  # @param user [::User]
  #
  # @return [Array<String>]
  def fetch_groups(user:)
    @group_map.fetch(user.user_key) { [] }
  end

  ##
  # @return [Array<String>] a list of all known group names
  def role_names
    @group_map.values.flatten.uniq
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hyrax-5.0.0 spec/support/fakes/test_hydra_group_service.rb
hyrax-5.0.0.rc3 spec/support/fakes/test_hydra_group_service.rb