Wednesday, July 15, 2026 2:55:14 AM
> user.rb
# frozen_string_literal: true

FactoryBot.define do
  factory :user, class: "ESM::User" do
    transient do
      discord_user { build(:discord_user) }
    end

    discord_id { discord_user.id.to_s }
    discord_username { discord_user.username }
    steam_uid { Faker::Steam.uid }
    user_steam_data

    trait :unregistered do
      steam_uid { nil }
    end

    # Register the user as a member of `discord_server` after the AR record is built.
    # `discord_member_roles` is forwarded to the :discord_member factory so callers
    # can attach roles in one shot.
    trait :with_discord_member do
      transient do
        discord_server { nil }
        discord_member_roles { [] }
      end

      after(:build) do |user, evaluator|
        if evaluator.discord_server.nil?
          raise ArgumentError, "create(:user, :with_discord_member) requires `discord_server:`"
        end

        build(
          :discord_member,
          server: evaluator.discord_server,
          user: user.discord_user,
          roles: evaluator.discord_member_roles
        )
      end
    end

    factory :developer do
      after(:build) do |user|
        next if ESM.config.dev_user_allowlist.include?(user.discord_id)

        ESM.config.dev_user_allowlist << user.discord_id
      end
    end
  end
end
All opinions represented herein are my own
- © 2024 - 2026 itsthedevman
- build 43aa0d7