Skip to content

Commit db30b5f

Browse files
committed
Update test to have a calculation that populates the id in the update case
1 parent 7642902 commit db30b5f

1 file changed

Lines changed: 37 additions & 15 deletions

File tree

entities/src/test/java/org/odk/collect/entities/javarosa/EntitiesTest.kt

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ package org.odk.collect.entities.javarosa
33
import org.hamcrest.CoreMatchers.equalTo
44
import org.hamcrest.MatcherAssert.assertThat
55
import org.hamcrest.Matchers.containsInAnyOrder
6+
import org.javarosa.core.model.FormDef
67
import org.javarosa.core.model.data.StringData
78
import org.javarosa.core.model.data.UncastData
89
import org.javarosa.core.model.instance.TreeElement
10+
import org.javarosa.form.api.FormEntryController
11+
import org.javarosa.form.api.FormEntryModel
912
import org.javarosa.test.BindBuilderXFormsElement.bind
1013
import org.javarosa.test.Scenario
1114
import org.javarosa.test.XFormsElement.body
@@ -18,6 +21,7 @@ import org.javarosa.test.XFormsElement.mainInstance
1821
import org.javarosa.test.XFormsElement.model
1922
import org.javarosa.test.XFormsElement.repeat
2023
import org.javarosa.test.XFormsElement.select1
24+
import org.javarosa.test.XFormsElement.select1Dynamic
2125
import org.javarosa.test.XFormsElement.setvalue
2226
import org.javarosa.test.XFormsElement.t
2327
import org.javarosa.test.XFormsElement.title
@@ -26,11 +30,14 @@ import org.javarosa.xform.util.XFormUtils
2630
import org.junit.After
2731
import org.junit.Before
2832
import org.junit.Test
33+
import org.odk.collect.entities.javarosa.filter.LocalEntitiesFilterStrategy
2934
import org.odk.collect.entities.javarosa.finalization.EntitiesExtra
3035
import org.odk.collect.entities.javarosa.finalization.EntityFormFinalizationProcessor
3136
import org.odk.collect.entities.javarosa.finalization.FormEntity
3237
import org.odk.collect.entities.javarosa.parse.EntityXFormParserFactory
3338
import org.odk.collect.entities.javarosa.spec.EntityAction
39+
import org.odk.collect.entities.storage.Entity
40+
import org.odk.collect.entities.storage.InMemEntitiesRepository
3441

3542
class EntitiesTest {
3643
private val entityXFormParserFactory = EntityXFormParserFactory(XFormParserFactory())
@@ -461,6 +468,15 @@ class EntitiesTest {
461468

462469
@Test
463470
fun `filling form with create or update in repeats makes entities available`() {
471+
val entitiesRepository = InMemEntitiesRepository()
472+
entitiesRepository.save("beneficiaries", Entity.New("1", "Roman Roy"))
473+
474+
val controllerSupplier: (FormDef) -> FormEntryController = { formDef ->
475+
FormEntryController(FormEntryModel(formDef)).also {
476+
it.addFilterStrategy(LocalEntitiesFilterStrategy(entitiesRepository))
477+
}
478+
}
479+
464480
val scenario = Scenario.init(
465481
"Create or update entities from repeats form",
466482
html(
@@ -474,7 +490,8 @@ class EntitiesTest {
474490
"data id=\"create-or-update-entities-from-repeats-form\"",
475491
t(
476492
"people",
477-
t("new"),
493+
t("beneficiary"),
494+
t("new_uuid"),
478495
t("name"),
479496
t(
480497
"meta",
@@ -486,35 +503,40 @@ class EntitiesTest {
486503
)
487504
)
488505
),
489-
bind("/data/people/new").type("string"),
506+
t("instance id=\"beneficiaries\" src=\"jr://file-csv/beneficiaries.csv\""),
507+
bind("/data/people/beneficiary").type("string"),
508+
bind("/data/people/new_uuid").type("string").calculate("once(uuid())").relevant("/data/people/beneficiary = ''"),
490509
bind("/data/people/name").type("string").withAttribute("entities", "saveto", "name"),
491-
bind("/data/people/meta/entity/@create").type("string").calculate("/data/people/new = 'yes'"),
492-
bind("/data/people/meta/entity/@update").type("string").calculate("/data/people/new != 'yes'"),
493-
bind("/data/people/meta/entity/@id").type("string"),
510+
bind("/data/people/meta/entity/@create").type("string").calculate("/data/people/beneficiary = ''"),
511+
bind("/data/people/meta/entity/@update").type("string").calculate("/data/people/beneficiary != ''"),
512+
bind("/data/people/meta/entity/@id").type("string").calculate("if(/data/people/beneficiary = '', /data/people/new_uuid , /data/people/beneficiary)"),
494513
bind("/data/people/meta/entity/label").type("string").calculate("/data/people/name"),
495514
setvalue("odk-instance-first-load", "/data/people/meta/entity/@id", "uuid()"),
496515
)
497516
),
498517
body(
499518
repeat(
500519
"/data/people",
501-
input("/data/people/new"),
520+
select1Dynamic(
521+
"/data/people/beneficiary",
522+
"instance('beneficiaries')/root/item",
523+
"name",
524+
"label"
525+
),
502526
input("/data/people/name"),
503527
setvalue("odk-new-repeat", "/data/people/meta/entity/@id", "uuid()")
504528
)
505529
)
506-
)
530+
),
531+
controllerSupplier
507532
)
508533

509534
scenario.formEntryController.addPostProcessor(EntityFormFinalizationProcessor())
510535

511-
scenario.answer("/data/people[1]/new", "yes")
512536
scenario.answer("/data/people[1]/name", "Tom Wambsgans")
513-
514537
scenario.createNewRepeat("/data/people")
515-
516-
scenario.answer("/data/people[2]/new", "no")
517-
scenario.answer("/data/people[2]/name", "Shiv Roy")
538+
scenario.answer("/data/people[2]/beneficiary", "1")
539+
scenario.answer("/data/people[2]/name", "Romulus Roy")
518540
scenario.finalizeInstance()
519541

520542
val entities = scenario.formEntryController.model.extras.get(EntitiesExtra::class.java).entities
@@ -533,9 +555,9 @@ class EntitiesTest {
533555
FormEntity(
534556
EntityAction.UPDATE,
535557
"people",
536-
scenario.answerOf<UncastData>("/data/people[2]/meta/entity/@id").value as String?,
537-
"Shiv Roy",
538-
listOf(Pair("name", "Shiv Roy"))
558+
"1",
559+
"Romulus Roy",
560+
listOf(Pair("name", "Romulus Roy"))
539561
)
540562
)
541563
)

0 commit comments

Comments
 (0)