From 70c6280decab44e100231a46517d9f77b7c3811c Mon Sep 17 00:00:00 2001 From: Callum Stott Date: Mon, 22 Jul 2024 18:48:00 +0100 Subject: [PATCH] Don't update trunk version when updating locally --- .../collect/entities/LocalEntityUseCases.kt | 9 +++---- .../entities/LocalEntityUseCasesTest.kt | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/entities/src/main/java/org/odk/collect/entities/LocalEntityUseCases.kt b/entities/src/main/java/org/odk/collect/entities/LocalEntityUseCases.kt index 1461fea0c85..0b07fc74574 100644 --- a/entities/src/main/java/org/odk/collect/entities/LocalEntityUseCases.kt +++ b/entities/src/main/java/org/odk/collect/entities/LocalEntityUseCases.kt @@ -19,16 +19,15 @@ object LocalEntityUseCases { formEntities?.entities?.forEach { formEntity -> val id = formEntity.id if (id != null && entitiesRepository.getLists().contains(formEntity.dataset)) { - if (formEntity.action != EntityAction.UPDATE || entitiesRepository.getEntities( - formEntity.dataset - ).any { it.id == id } - ) { + val existing = entitiesRepository.getById(formEntity.dataset, formEntity.id) + if (formEntity.action != EntityAction.UPDATE || existing != null) { val entity = Entity.New( formEntity.dataset, id, formEntity.label, formEntity.version, - formEntity.properties + formEntity.properties, + trunkVersion = existing?.trunkVersion ) entitiesRepository.save(entity) diff --git a/entities/src/test/java/org/odk/collect/entities/LocalEntityUseCasesTest.kt b/entities/src/test/java/org/odk/collect/entities/LocalEntityUseCasesTest.kt index 01246fa9b68..b9e0adbecc8 100644 --- a/entities/src/test/java/org/odk/collect/entities/LocalEntityUseCasesTest.kt +++ b/entities/src/test/java/org/odk/collect/entities/LocalEntityUseCasesTest.kt @@ -19,6 +19,31 @@ class LocalEntityUseCasesTest { private val entitiesRepository = InMemEntitiesRepository() + @Test + fun `updateLocalEntitiesFromForm does not override trunk version`() { + entitiesRepository.save( + Entity.New( + "things", + "id", + "label", + version = 1, + trunkVersion = 1 + ) + ) + + val formEntity = + FormEntity(EntityAction.UPDATE, "things", "id", "label", 2, emptyList()) + val formEntities = + EntitiesExtra( + listOf(formEntity) + ) + + LocalEntityUseCases.updateLocalEntitiesFromForm(formEntities, entitiesRepository) + val entities = entitiesRepository.getEntities("things") + assertThat(entities.size, equalTo(1)) + assertThat(entities[0].trunkVersion, equalTo(1)) + } + @Test fun `updateLocalEntitiesFromForm does not save updated entity that doesn't already exist`() { val formEntity =