rom-rb / rom-factory

Data generator with support for persistence backends
MIT License
83 stars 42 forks source link

Inconsistent behaviour of Factory.structs between v0.11 and v0.12 #88

Open ishando opened 5 months ago

ishando commented 5 months ago

Describe the bug

IDs are not created for associations in v0.12 as they were in v0.11

To Reproduce

with Factories:

Factory.define(:operator) do |f|
  f.id { SecureRandom.uuid }
  f.name 'Some Operator'
  f.created_at { Date.today.prev_month }
  ...
end

Factory.define(:membership) do |f|
  f.id { SecureRandom.uuid }
  f.customer_id { SecureRandom.uuid }
  f.created_at { Date.today.prev_month }
  f.status 'active'
  f.association(:operator)
  ...
end

def build(name, **args)
  Factory.structs[name, **args]
end

and called in rspec tests with

  let(:membership) { build(:membership) }

Expected behavior

in v0.11 it returned:

membership: #<ROM::Struct::Membership
  id="8e2225df-a2bb-4305-b949-67587bd4c949"
  customer_id="f2e10f3c-52cc-43fe-9958-6a17255208fb"
  created_at=#<Date: 2024-03-05 ((2460375j,0s,0n),+0s,2299161j)>
  status="active"
  operator_id="93f53cca-603f-41b3-bb67-e2f3fa8b6fc3"
  operator=#<ROM::Struct::Operator
    id="93f53cca-603f-41b3-bb67-e2f3fa8b6fc3"
    name="Some Operator"
    created_at=#<Date: 2024-03-05 ((2460375j,0s,0n),+0s,2299161j)>
    ...
  >
  ...
>

in v0.12 it returns:

membership: #<ROM::Struct::Membership
  id="8e2225df-a2bb-4305-b949-67587bd4c949"
  customer_id="f2e10f3c-52cc-43fe-9958-6a17255208fb"
  created_at=#<Date: 2024-03-05 ((2460375j,0s,0n),+0s,2299161j)>
  status="active"
  operator_id=nil
  operator=#<ROM::Struct::Operator
    id=nil
    name="Some Operator"
    created_at=#<Date: 2024-03-05 ((2460375j,0s,0n),+0s,2299161j)>
    ...
  >
  ...

I would have expected the same result as in v0.11

My environment