Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add per model automatically_define_enum_traits option #1598

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Commits on Nov 7, 2023

  1. Add per model automatically_define_enum_traits option

    Currently you can only specify whether to automatically define enum traits at
    a global level, through `FactoryBot.automatically_define_enum_traits`.
    This means that an entire codebase has to either opt-in, or opt-out
    from automatically defining enum traits. If you are in a large,
    established codebase with lots of enum's, this is quite hard to change
    globally when you find that automatically defining them doesn't fit for
    your new use case.
    
    If we could override this at a per-factory level, we could allow
    individual factories to override the global setting where appropriate,
    in order to do customise them where necessary.
    
    Given `FactoryBot.automatically_define_enum_traits` being set to `true`,
    and a model called `Task` with the following enum definition:
    
    ```
    class Task
      enum :confirmed_by, [:user, :organisation], prefix: true
    end
    ```
    
    You would be able to override disable this on a per-factory basis like so:
    
    ```
    FactoryBot.define do
      factory :task, automatically_define_enum_traits: false do
        confirmed_by { :user }
    
        trait :org_confirmed do
          confirmed_by { :organisation }
        end
      end
    end
    ```
    
    If `FactoryBot.automatically_define_enum_traits` was instead set to
    `false`, then the same model with a factory override set to `true` you
    would end up with the following automatic traits:
    
    ```
    FactoryBot.define do
      factory :task, automatically_define_enum_traits: true do
        # The :user and :organisation traits below would be automatically
        # defined in the following way:
        #
        # trait :user do
        #   confirmed_by { :user }
        # end
    
        # trait :organisation do
        #   confirmed_by { :organisation }
        # end
      end
    end
    ```
    
    Fixes: thoughtbot#1597
    
    Co-Authored-By: Julia Chan <[email protected]>
    mikespokefire and juliachn committed Nov 7, 2023
    Configuration menu
    Copy the full SHA
    f3e9265 View commit details
    Browse the repository at this point in the history