context "deep copy some record" do
  it do
    duplicate = call_the_copy_method(original)

    check_same = lambda { |&block| expect(block.call(duplicate)).to eq(block.call(original)) }

    check_same.call { |x| x.name }
    check_same.call { |x| x.list_of_shared_items }
    check_same.call { |x| x.list_of_copied_items.map { |item| item.name } }

    # same as:

    expect(duplicate.name).to eq(original.name)
    expect(duplicate.list_of_shared_items).to eq(list_of_shared_items)
    expect(duplicate.list_of_copied_items.map { |item| item.name }).to eq(original.list_of_copied_items.map { |item| item.name })
  end
end