Class: HasHelpers::FactoryController

Inherits:
ActionController::API
  • Object
show all
Defined in:
app/controllers/has_helpers/factory_controller.rb

Overview

Test-only API for exercising ::FactoryBot factories from e2e suites.

Instance Method Summary collapse

Instance Method Details

#buildObject



20
21
22
23
24
# File 'app/controllers/has_helpers/factory_controller.rb', line 20

def build
  config = factory_request_config
  record = build_record(config[:factory], config[:traits], config[:overrides])
  render json: serialize(record, config[:includes]).merge(persisted: record.persisted?), status: :ok
end

#createObject



14
15
16
17
18
# File 'app/controllers/has_helpers/factory_controller.rb', line 14

def create
  config = factory_request_config
  record = create_record(config[:factory], config[:traits], config[:overrides])
  render json: serialize(record, config[:includes]), status: :created
end

#scenarioObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'app/controllers/has_helpers/factory_controller.rb', line 46

def scenario
  scenario_def = ::HasHelpers::FactoryScenario.registry.fetch(params.require(:scenario))
  return head :not_found unless scenario_def

  runner = ::HasHelpers::FactoryScenario::Runner.new(
    scenario_def,
    params[:objects] || {},
    params[:activate] || [],
    params[:response] || []
  )
  result_objects = runner.run
  render json: serialize_scenario_payload(result_objects, runner.explicit_keys), status: :ok
rescue StandardError => e
  handle_error(e)
end

#seedObject

Raises:

  • (ArgumentError)


26
27
28
29
30
31
32
33
# File 'app/controllers/has_helpers/factory_controller.rb', line 26

def seed
  config = factory_request_config
  count = params.require(:count).to_i
  raise ArgumentError, "count must be greater than 0" unless count.positive?

  records = create_records(config[:factory], count, config[:traits], config[:overrides])
  render json: records.map { |record| serialize(record, config[:includes]) }, status: :created
end

#showObject



35
36
37
38
39
40
41
42
43
44
# File 'app/controllers/has_helpers/factory_controller.rb', line 35

def show
  record = find_record(params.require(:resource).to_sym, params.require(:id))
  return head :not_found unless record

  render json: serialize(record, parse_includes(params[:include])), status: :ok
rescue ::FactoryBot::FactoryNotRegisteredError, NameError => e
  render json: { error: e.message }, status: :bad_request
rescue ActiveRecord::RecordNotFound, ActiveRecord::StatementInvalid
  head :not_found
end