Generation Modes

FakeDataDSL supports different generation modes for various testing scenarios.

Available Modes

Random Mode (Default)

Generates realistic random data:

schema = registry.schema('User')
record = schema.generate(mode: :random)
# => Normal, realistic data

Edge Mode

Generates edge case values (empty, boundary, null):

record = schema.generate(mode: :edge)
# => Edge cases: empty strings, null values, boundary numbers

Use cases:

  • Testing validation logic
  • Finding boundary bugs
  • Stress testing

Invalid Mode

Generates intentionally invalid data:

record = schema.generate(mode: :invalid)
# => Invalid data: wrong types, malformed values

Use cases:

  • Testing error handling
  • Validating input sanitization
  • Security testing

Mixed Mode

Combines random, edge, and invalid values:

record = schema.generate(mode: :mixed)
# => Mix of random, edge, and invalid values

Custom ratios:

record = schema.generate(mode: :mixed, ratios: { random: 70, edge: 20, invalid: 10 })

Mode Examples

Random Mode

User:
  name: name
  age: number(18..65)
  email: email

# Generates:
# { "name" => "John Smith", "age" => 42, "email" => "john@example.com" }

Edge Mode

# Same schema, edge mode:
# { "name" => "", "age" => 18, "email" => "" }
# or
# { "name" => "A", "age" => 65, "email" => "a@b.c" }

Invalid Mode

# Same schema, invalid mode:
# { "name" => 123, "age" => "not a number", "email" => nil }

Mode Configuration

Set default mode globally:

FakeDataDSL.configure do |config|
  config.default_mode = :edge
end

Or per-schema:

schema = registry.schema('User')
schema.default_mode = :invalid

Combining with Behaviors

Modes work with behaviors:

User:
  @latency 100ms
  @failure 5%
  name: name

# Edge mode + behaviors:
# Generates edge cases with delays and occasional failures

See Also