/** * Fill this modifiable instance with attribute values from the provided {@link ImmutablesTest.FooBarBaz} instance. * Regular attribute values will be overridden, i.e. replaced with ones of an instance. * Any of the instance's absent optional values will not be copied (will not override current values). * @param instance The instance from which to copy values * @return {@code this} for use in a chained invocation */ public ModifiableFooBarBaz from(ImmutablesTest.FooBarBaz instance) { Objects.requireNonNull(instance, "instance"); setId(instance.id()); Optional<String> fooOptional = instance.foo(); if (fooOptional.isPresent()) { setFoo(fooOptional); } OptionalInt barOptional = instance.bar(); if (barOptional.isPresent()) { setBar(barOptional); } OptionalDouble bazOptional = instance.baz(); if (bazOptional.isPresent()) { setBaz(bazOptional); } return this; }
@Test public void testModifiable() { h.execute("create table fbb (id serial, foo varchar, bar int, baz real)"); assertThat(h.createUpdate("insert into fbb (id, foo, bar, baz) values (:id, :foo, :bar, :baz)") .bindPojo(ModifiableFooBarBaz.create().setFoo("foo").setBar(42).setBaz(1.0)) .execute()) .isEqualTo(1); assertThat(h.createQuery("select * from fbb") .mapTo(ModifiableFooBarBaz.class) .findOnly()) .extracting("id", "foo", "bar", "baz") .containsExactly(1, Optional.of("foo"), OptionalInt.of(42), OptionalDouble.of(1.0)); assertThat(h.createQuery("select * from fbb") .mapTo(ImmutableFooBarBaz.class) .findOnly()) .extracting("id", "foo", "bar", "baz") // FIXME: https://github.com/joel-costigliola/assertj-core/pull/1360 .containsExactly(1, "foo", 42, 1.0); }