Skip to content
This repository has been archived by the owner on Jan 24, 2025. It is now read-only.

Returning IdenticalValue for a case class #420

Open
AvaPL opened this issue Oct 28, 2022 · 2 comments
Open

Returning IdenticalValue for a case class #420

AvaPL opened this issue Oct 28, 2022 · 2 comments

Comments

@AvaPL
Copy link

AvaPL commented Oct 28, 2022

Hi,

I have a question regarding the behaviour of the diff for case classes. Here is a short example:

  import com.softwaremill.diffx._

  case class FooBar(
    foo: String,
    bar: String
  )

  object FooBar {
    implicit val fooBarDiff: Diff[FooBar] = Diff.derived
  }

  "compare" should "return IdenticalValue for the same instance" in {
    val fooBarInstance = FooBar("a", "b")
    val diffResult = compare(fooBarInstance, fooBarInstance)
    diffResult shouldBe IdenticalValue(fooBarInstance)
  }

In a case like this, it was obvious that I'd receive IdenticalValue. Instead, the test fails with:

DiffResultObject(FooBar,ListMap(foo -> IdenticalValue(a), bar -> IdenticalValue(b))) was not equal to IdenticalValue(FooBar(a,b))

Is it intended behaviour? If it is, is there any alternative that will allow me to receive an IdenticalValue when the fields are identical and DiffResultObject when the fields are different? Of course, my example is simplified. My real scenario contains a larger hierarchy of nested objects, so manually creating a Diff will be quite hard.

I know that I can use isIdentical but I'd like to extract the whole identical entity from the diff. DiffResultObject contains only the name and a map of fields.

When I was using version 0.4.5 it worked as expected. My current diffx version is 0.8.0.

@ghostbuster91
Copy link
Collaborator

Hi,

Yes, the change was made deliberately to improve rendering of big structures when they are identical but contain some ignored fields inside.

Atm there is no way to retrieve the full original entity. This is a use-case that I didn't take into account.

Could you shed some light on what for do you actually need that identical instance? Maybe there is some bigger issue that we should aim to resolve instead.

@AvaPL
Copy link
Author

AvaPL commented Oct 31, 2022

My use case was to do a diff on an entity and then produce an event with the entity based on the result. For identical entities, it was just an IdentitcalEntityEvent with the entity itself. Now, when I get a DiffResultObject, I cannot extract this entity and produce the event easily.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants