Skip to content

Commit 5cb0e85

Browse files
Add tests to DrawAreaTaskViewModelTest to convert resetting of hasSelfIntersection if it causes self intersection non completion when self intersection happened
1 parent 9556c93 commit 5cb0e85

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskViewModelTest.kt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,45 @@ class DrawAreaTaskViewModelTest : BaseHiltTest() {
620620
assertThat(viewModel.isMarkedComplete()).isTrue()
621621
}
622622

623+
@Test
624+
fun `onButtonClick ADD_POINT removes last vertex and resets hasSelfIntersection if it causes self-intersection`() =
625+
runWithTestDispatcher {
626+
setupViewModel()
627+
// Create a non-intersecting path: (0,0) -> (10,10) -> (0,10)
628+
updateLastVertexAndAdd(COORDINATE_1)
629+
updateLastVertexAndAdd(COORDINATE_2)
630+
updateLastVertexAndAdd(COORDINATE_6)
631+
632+
// Move cursor to a point that crosses the first segment: (10,0)
633+
updateLastVertex(COORDINATE_5)
634+
635+
viewModel.onButtonClick(ButtonAction.ADD_POINT)
636+
advanceUntilIdle()
637+
638+
// The intersecting vertex (10,0) should be dropped.
639+
// Result: 3 fixed vertices + 1 temp cursor vertex = 4 total in geometry
640+
assertGeometry(4, isLineString = true)
641+
assertThat(viewModel.hasSelfIntersection).isFalse()
642+
}
643+
644+
@Test
645+
fun `onButtonClick COMPLETE does not mark complete if it causes self-intersection`() =
646+
runWithTestDispatcher {
647+
setupViewModel()
648+
// Create a path that will intersect when closed: (0,0) -> (10,0) -> (0,10) -> (10,10)
649+
updateLastVertexAndAdd(COORDINATE_1)
650+
updateLastVertexAndAdd(COORDINATE_5)
651+
updateLastVertexAndAdd(COORDINATE_6)
652+
updateLastVertex(COORDINATE_2)
653+
654+
viewModel.onButtonClick(ButtonAction.COMPLETE)
655+
advanceUntilIdle()
656+
657+
// Completion should fail and flag should be true
658+
assertThat(viewModel.isMarkedComplete()).isFalse()
659+
assertThat(viewModel.hasSelfIntersection).isTrue()
660+
}
661+
623662
private fun assertGeometry(
624663
expectedVerticesCount: Int,
625664
isLineString: Boolean = false,
@@ -679,6 +718,8 @@ class DrawAreaTaskViewModelTest : BaseHiltTest() {
679718
private val COORDINATE_2 = Coordinates(10.0, 10.0)
680719
private val COORDINATE_3 = Coordinates(20.0, 20.0)
681720
private val COORDINATE_4 = Coordinates(30.0, 30.0)
721+
private val COORDINATE_5 = Coordinates(10.0, 0.0)
722+
private val COORDINATE_6 = Coordinates(0.0, 10.0)
682723

683724
private val TASK =
684725
Task(

0 commit comments

Comments
 (0)