@Test public void shouldUpdateIfETagMatch() { // given final TestObject testObject = new TestObject("someId", "someValue"); testee.create(testObject); final String etagFromCreated = testee.findOne("someId").get().eTag; final TestObject testObjectToUpdate = new TestObject("someId", "someUpdatedValue", etagFromCreated); // when final UpdateIfMatchResult updateIfMatchResult = testee.updateIfMatch(testObjectToUpdate, etagFromCreated); final TestObject updatedTestObject = testee.findOne("someId").get(); // then assertThat(updateIfMatchResult, is(UpdateIfMatchResult.OK)); assertThat(updatedTestObject.eTag, notNullValue()); assertThat(updatedTestObject.eTag, is(not(etagFromCreated))); assertThat(updatedTestObject.id, is("someId")); assertThat(updatedTestObject.value, is("someUpdatedValue")); }
@Test public void shouldUpdateExistingDocument() { // given final TestObject testObject = new TestObject("someId", "someValue"); testee.create(testObject); final TestObject testObjectToUpdate = new TestObject("someId", "someUpdatedValue"); // when final boolean updated = testee.update(testObjectToUpdate); // then assertThat(updated, is(true)); final TestObject updatedTestObject = testee.findOne("someId").get(); assertThat(updatedTestObject.eTag, notNullValue()); assertThat(updatedTestObject.eTag, is(not(testObject.eTag))); assertThat(updatedTestObject.id, is("someId")); assertThat(updatedTestObject.value, is("someUpdatedValue")); }
@Test public void shouldCreateOrUpdateBulk() { // given final TestObject testObjectA = new TestObject("someIdA", "someValueA"); final TestObject testObjectB = new TestObject("someIdB", "someValueB"); // when testee.createOrUpdateBulk(asList(testObjectA, testObjectB)); // then final List<TestObject> foundObjects = testee.findAll(); assertThat(foundObjects.size(), is(2)); assertThat(foundObjects, Matchers.containsInAnyOrder(asList( new TestObjectMatcher(testObjectA), new TestObjectMatcher(testObjectB)))); }
public boolean matches(final Object object) { return ((object instanceof TestObject) && ((TestObject) object).equalsWithoutEtag(testObject)); } }
@Override protected TestObject decode(final Document document) { return new TestObject( document.containsKey("_id") ? document.get("_id").toString() : null, document.getString("value"), document.getString("etag") ); }
@Test public void shouldNotCreateOrUpdateWithMissingId() { // given final TestObject testObject = new TestObject(null, "someValue"); // when / then assertThrows(NullPointerException.class, () -> { final TestObject resultingObject = testee.createOrUpdate(testObject); }); }
@Test public void shouldNotUpdateIfEtagNotMatch() { // given final TestObject testObject = new TestObject("someId", "someValue", "someEtagWhichIsNotInTheDb"); testee.create(testObject); // when final UpdateIfMatchResult updated = testee.updateIfMatch(testObject, "someOtherETag"); // then assertThat(updated, is(UpdateIfMatchResult.CONCURRENTLY_MODIFIED)); }
private void createTestObjects(final String... values) { Arrays.stream(values) .map(value -> new TestObject(value, value)) .forEach(testee::create); }
@Test public void shouldNotUpdateMissingDocument() { // given final TestObject testObjectToUpdate = new TestObject("someId", "someUpdatedValue"); // when final boolean updated = testee.update(testObjectToUpdate); // then assertThat(updated, is(false)); assertThat(testee.findOne("someId").isPresent(), is(false)); }
@Test public void shouldNotUpdateIfEtagNotExists() { // given final TestObject testObject = new TestObject("someId", "someValue"); // when final UpdateIfMatchResult updated = testee.updateIfMatch(testObject, "someETag"); // then assertThat(updated, is(UpdateIfMatchResult.NOT_FOUND)); }
@Test public void shouldNotCreateWithMissingId() { // given final TestObject testObject = new TestObject(null, "someValue"); // when / then assertThrows(NullPointerException.class, () -> { testee.create(testObject); }); }