Skip to content

Commit

Permalink
Convert boolean to enum
Browse files Browse the repository at this point in the history
  • Loading branch information
seadowg committed May 20, 2024
1 parent be3fb7e commit e13f688
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,9 @@ class JsonFileEntitiesRepository(directory: File) : EntitiesRepository {
val existing = storedEntities.find { it.id == entity.id }

if (existing != null) {
val offline = if (existing.offline) {
entity.offline
} else {
false
val state = when (existing.state) {
Entity.State.OFFLINE -> entity.state
Entity.State.ONLINE -> Entity.State.ONLINE
}

storedEntities.remove(existing)
Expand All @@ -40,7 +39,7 @@ class JsonFileEntitiesRepository(directory: File) : EntitiesRepository {
entity.label ?: existing.label,
version = entity.version,
properties = mergeProperties(existing, entity),
offline = offline
state = state
)
)
} else {
Expand Down Expand Up @@ -145,13 +144,19 @@ class JsonFileEntitiesRepository(directory: File) : EntitiesRepository {
)

private fun JsonEntity.toEntity(list: String): Entity {
val state = if (this.offline) {
Entity.State.OFFLINE
} else {
Entity.State.ONLINE
}

return Entity(
list,
this.id,
this.label,
this.version,
this.properties.entries.map { Pair(it.key, it.value) },
this.offline
state
)
}

Expand All @@ -161,7 +166,7 @@ class JsonFileEntitiesRepository(directory: File) : EntitiesRepository {
this.label,
this.version,
this.properties.toMap(),
this.offline
this.state == Entity.State.OFFLINE
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,27 +87,27 @@ abstract class EntitiesRepositoryTest {
}

@Test
fun `#save updates offline on existing entity when it is false`() {
fun `#save updates state on existing entity when it is offline`() {
val repository = buildSubject()

val wine = Entity("wines", "1", "L茅oville Barton 2008", offline = true)
val wine = Entity("wines", "1", "L茅oville Barton 2008", state = Entity.State.OFFLINE)
repository.save(wine)

val updatedWine = wine.copy(offline = false)
val updatedWine = wine.copy(state = Entity.State.ONLINE)
repository.save(updatedWine)

val wines = repository.getEntities("wines")
assertThat(wines, contains(updatedWine))
}

@Test
fun `#save does not update offline on existing entity when it is true`() {
fun `#save does not update state on existing entity when it is online`() {
val repository = buildSubject()

val wine = Entity("wines", "1", "L茅oville Barton 2008", offline = false)
val wine = Entity("wines", "1", "L茅oville Barton 2008", state = Entity.State.ONLINE)
repository.save(wine)

val updatedWine = wine.copy(offline = true)
val updatedWine = wine.copy(state = Entity.State.OFFLINE)
repository.save(updatedWine)

val wines = repository.getEntities("wines")
Expand Down
9 changes: 7 additions & 2 deletions entities/src/main/java/org/odk/collect/entities/Entity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,10 @@ data class Entity @JvmOverloads constructor(
val label: String?,
val version: Int = 1,
val properties: List<Pair<String, String>> = emptyList(),
val offline: Boolean = true
)
val state: State = State.OFFLINE
) {
enum class State {
OFFLINE,
ONLINE
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ class EntityItemView(context: Context) : FrameLayout(context) {
binding.properties.text = entity.properties
.sortedBy { it.first }
.joinToString(separator = ", ") { "${it.first}: ${it.second}" }
binding.offlinePill.isVisible = entity.offline
binding.offlinePill.isVisible = entity.state == Entity.State.OFFLINE
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,9 @@ class InMemEntitiesRepository : EntitiesRepository {
val existing = this.entities.find { it.id == entity.id }

if (existing != null) {
val offline = if (existing.offline) {
entity.offline
} else {
false
val state = when (existing.state) {
Entity.State.OFFLINE -> entity.state
Entity.State.ONLINE -> Entity.State.ONLINE
}

this.entities.remove(existing)
Expand All @@ -46,7 +45,7 @@ class InMemEntitiesRepository : EntitiesRepository {
entity.label ?: existing.label,
version = entity.version,
properties = mergeProperties(existing, entity),
offline = offline
state = state
)
)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@ object LocalEntityUseCases {

if (existing == null || existing.version < entity.version) {
Pair(new + entity, missing)
} else if (existing.offline) {
Pair(new + existing.copy(offline = false), missing)
} else if (existing.state == Entity.State.OFFLINE) {
Pair(new + existing.copy(state = Entity.State.ONLINE), missing)
} else {
Pair(new, missing)
}
}

missingFromServer.values.forEach {
if (!it.offline) {
if (it.state == Entity.State.ONLINE) {
entitiesRepository.delete(it.id)
}
}
Expand Down Expand Up @@ -72,7 +72,7 @@ object LocalEntityUseCases {
}
}

val entity = Entity(list, id, label, version, properties, offline = false)
val entity = Entity(list, id, label, version, properties, state = Entity.State.ONLINE)
return entity
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,10 @@ class EntityItemViewTest {
val view = EntityItemView(context)
val entity = Entity("songs", "1", "S.D.O.S")

view.setEntity(entity.copy(offline = true))
view.setEntity(entity.copy(state = Entity.State.OFFLINE))
assertThat(view.binding.offlinePill.isVisible, equalTo(true))

view.setEntity(entity.copy(offline = false))
view.setEntity(entity.copy(state = Entity.State.ONLINE))
assertThat(view.binding.offlinePill.isVisible, equalTo(false))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.Matchers.containsInAnyOrder
import org.hamcrest.Matchers.equalTo
import org.junit.Test
import org.odk.collect.entities.Entity.State
import org.odk.collect.entities.Entity.State.ONLINE
import org.odk.collect.shared.TempFiles
import java.io.File

Expand All @@ -20,7 +22,7 @@ class LocalEntityUseCasesTest {

LocalEntityUseCases.updateLocalEntities("songs", csv, entitiesRepository)
val songs = entitiesRepository.getEntities("songs")
assertThat(songs, containsInAnyOrder(Entity("songs", "noah", "Noah", 2, offline = false)))
assertThat(songs, containsInAnyOrder(Entity("songs", "noah", "Noah", 2, state = ONLINE)))
}

@Test
Expand All @@ -30,7 +32,7 @@ class LocalEntityUseCasesTest {

LocalEntityUseCases.updateLocalEntities("songs", csv, entitiesRepository)
val songs = entitiesRepository.getEntities("songs")
assertThat(songs, containsInAnyOrder(Entity("songs", "noah", "Noah", 2, offline = false)))
assertThat(songs, containsInAnyOrder(Entity("songs", "noah", "Noah", 2, state = ONLINE)))
}

@Test
Expand All @@ -40,7 +42,7 @@ class LocalEntityUseCasesTest {

LocalEntityUseCases.updateLocalEntities("songs", csv, entitiesRepository)
val songs = entitiesRepository.getEntities("songs")
assertThat(songs, containsInAnyOrder(Entity("songs", "noah", "Noah", 2, offline = false)))
assertThat(songs, containsInAnyOrder(Entity("songs", "noah", "Noah", 2, state = ONLINE)))
}

@Test
Expand All @@ -53,7 +55,7 @@ class LocalEntityUseCasesTest {
val songs = entitiesRepository.getEntities("songs")
assertThat(
songs,
containsInAnyOrder(Entity("songs", "noah", "Noah", 3, offline = false))
containsInAnyOrder(Entity("songs", "noah", "Noah", 3, state = ONLINE))
)
}

Expand All @@ -74,7 +76,7 @@ class LocalEntityUseCasesTest {
"Noah",
2,
listOf(Pair("length", "4:58")),
offline = false
state = ONLINE
)
)
)
Expand Down Expand Up @@ -124,7 +126,7 @@ class LocalEntityUseCasesTest {
val songs = entitiesRepository.getEntities("songs")
assertThat(
songs,
containsInAnyOrder(Entity("songs", "cathedrals", label = "", offline = false))
containsInAnyOrder(Entity("songs", "cathedrals", label = "", state = ONLINE))
)
}

Expand Down Expand Up @@ -158,7 +160,7 @@ class LocalEntityUseCasesTest {
assertThat(
songs,
containsInAnyOrder(
Entity("songs", "cathedrals", "Cathedrals", offline = false),
Entity("songs", "cathedrals", "Cathedrals", state = ONLINE),
Entity("songs", "noah", "Noah")
)
)
Expand All @@ -175,7 +177,7 @@ class LocalEntityUseCasesTest {
LocalEntityUseCases.updateLocalEntities("songs", secondCsv, entitiesRepository)

val songs = entitiesRepository.getEntities("songs")
assertThat(songs, containsInAnyOrder(Entity("songs", "noah", "Noah", offline = false)))
assertThat(songs, containsInAnyOrder(Entity("songs", "noah", "Noah", state = ONLINE)))
}

@Test
Expand Down

0 comments on commit e13f688

Please sign in to comment.