Browse Source

Konsist: improve test about no default value for State classes, and fix new detected issues.

pull/1526/head
Benoit Marty 12 months ago
parent
commit
4338d821e5
  1. 22
      app/src/test/kotlin/io/element/android/app/KonsistTest.kt
  2. 8
      features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListState.kt
  3. 4
      features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListStateProvider.kt
  4. 8
      features/leaveroom/api/src/main/kotlin/io/element/android/features/leaveroom/api/LeaveRoomState.kt
  5. 23
      features/leaveroom/api/src/main/kotlin/io/element/android/features/leaveroom/api/LeaveRoomStateProvider.kt
  6. 9
      features/leaveroom/test/src/main/kotlin/io/element/android/features/leaveroom/fake/FakeLeaveRoomPresenter.kt
  7. 2
      features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollState.kt
  8. 32
      features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollStateProvider.kt
  9. 3
      features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt
  10. 3
      features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt

22
app/src/test/kotlin/io/element/android/app/KonsistTest.kt

@ -19,8 +19,10 @@ package io.element.android.app
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import com.lemonappdev.konsist.api.KoModifier import com.lemonappdev.konsist.api.KoModifier
import com.lemonappdev.konsist.api.Konsist import com.lemonappdev.konsist.api.Konsist
import com.lemonappdev.konsist.api.ext.list.constructors
import com.lemonappdev.konsist.api.ext.list.modifierprovider.withoutModifier import com.lemonappdev.konsist.api.ext.list.modifierprovider.withoutModifier
import com.lemonappdev.konsist.api.ext.list.modifierprovider.withoutOverrideModifier import com.lemonappdev.konsist.api.ext.list.modifierprovider.withoutOverrideModifier
import com.lemonappdev.konsist.api.ext.list.parameters
import com.lemonappdev.konsist.api.ext.list.withAllAnnotationsOf import com.lemonappdev.konsist.api.ext.list.withAllAnnotationsOf
import com.lemonappdev.konsist.api.ext.list.withAllParentsOf import com.lemonappdev.konsist.api.ext.list.withAllParentsOf
import com.lemonappdev.konsist.api.ext.list.withNameEndingWith import com.lemonappdev.konsist.api.ext.list.withNameEndingWith
@ -40,7 +42,9 @@ class KonsistTest {
Konsist.scopeFromProject() Konsist.scopeFromProject()
.classes() .classes()
.withAllParentsOf(Presenter::class) .withAllParentsOf(Presenter::class)
.assertTrue { it.name.endsWith("Presenter") } .assertTrue {
it.name.endsWith("Presenter")
}
} }
@Test @Test
@ -94,12 +98,16 @@ class KonsistTest {
.scopeFromProject() .scopeFromProject()
.classes() .classes()
.withNameEndingWith("State") .withNameEndingWith("State")
.assertTrue { classDeclaration -> .withoutName(
classDeclaration.constructors.all { constructorDeclaration -> "CameraPositionState",
constructorDeclaration.parameters.all { parameterDeclaration -> )
parameterDeclaration.defaultValue == null .constructors
} .parameters
} .assertTrue { parameterDeclaration ->
parameterDeclaration.defaultValue == null &&
// Using parameterDeclaration.defaultValue == null is not enough apparently,
// Also check that the text does not contain an equal sign
parameterDeclaration.text.contains("=").not()
} }
} }

8
features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListState.kt

@ -25,10 +25,10 @@ import kotlinx.collections.immutable.ImmutableList
@Immutable @Immutable
data class InviteListState( data class InviteListState(
val inviteList: ImmutableList<InviteListInviteSummary>, val inviteList: ImmutableList<InviteListInviteSummary>,
val declineConfirmationDialog: InviteDeclineConfirmationDialog = InviteDeclineConfirmationDialog.Hidden, val declineConfirmationDialog: InviteDeclineConfirmationDialog,
val acceptedAction: Async<RoomId> = Async.Uninitialized, val acceptedAction: Async<RoomId>,
val declinedAction: Async<Unit> = Async.Uninitialized, val declinedAction: Async<Unit>,
val eventSink: (InviteListEvents) -> Unit = {} val eventSink: (InviteListEvents) -> Unit
) )
sealed interface InviteDeclineConfirmationDialog { sealed interface InviteDeclineConfirmationDialog {

4
features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListStateProvider.kt

@ -39,6 +39,10 @@ open class InviteListStateProvider : PreviewParameterProvider<InviteListState> {
internal fun aInviteListState() = InviteListState( internal fun aInviteListState() = InviteListState(
inviteList = aInviteListInviteSummaryList(), inviteList = aInviteListInviteSummaryList(),
declineConfirmationDialog = InviteDeclineConfirmationDialog.Hidden,
acceptedAction = Async.Uninitialized,
declinedAction = Async.Uninitialized,
eventSink = {},
) )
internal fun aInviteListInviteSummaryList(): ImmutableList<InviteListInviteSummary> { internal fun aInviteListInviteSummaryList(): ImmutableList<InviteListInviteSummary> {

8
features/leaveroom/api/src/main/kotlin/io/element/android/features/leaveroom/api/LeaveRoomState.kt

@ -19,10 +19,10 @@ package io.element.android.features.leaveroom.api
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
data class LeaveRoomState( data class LeaveRoomState(
val confirmation: Confirmation = Confirmation.Hidden, val confirmation: Confirmation,
val progress: Progress = Progress.Hidden, val progress: Progress,
val error: Error = Error.Hidden, val error: Error,
val eventSink: (LeaveRoomEvent) -> Unit = {}, val eventSink: (LeaveRoomEvent) -> Unit,
) { ) {
sealed interface Confirmation { sealed interface Confirmation {
data object Hidden : Confirmation data object Hidden : Confirmation

23
features/leaveroom/api/src/main/kotlin/io/element/android/features/leaveroom/api/LeaveRoomStateProvider.kt

@ -22,32 +22,32 @@ import io.element.android.libraries.matrix.api.core.RoomId
class LeaveRoomStateProvider : PreviewParameterProvider<LeaveRoomState> { class LeaveRoomStateProvider : PreviewParameterProvider<LeaveRoomState> {
override val values: Sequence<LeaveRoomState> override val values: Sequence<LeaveRoomState>
get() = sequenceOf( get() = sequenceOf(
LeaveRoomState( aLeaveRoomState(
confirmation = LeaveRoomState.Confirmation.Hidden, confirmation = LeaveRoomState.Confirmation.Hidden,
progress = LeaveRoomState.Progress.Hidden, progress = LeaveRoomState.Progress.Hidden,
error = LeaveRoomState.Error.Hidden, error = LeaveRoomState.Error.Hidden,
), ),
LeaveRoomState( aLeaveRoomState(
confirmation = LeaveRoomState.Confirmation.Generic(A_ROOM_ID), confirmation = LeaveRoomState.Confirmation.Generic(A_ROOM_ID),
progress = LeaveRoomState.Progress.Hidden, progress = LeaveRoomState.Progress.Hidden,
error = LeaveRoomState.Error.Hidden, error = LeaveRoomState.Error.Hidden,
), ),
LeaveRoomState( aLeaveRoomState(
confirmation = LeaveRoomState.Confirmation.PrivateRoom(A_ROOM_ID), confirmation = LeaveRoomState.Confirmation.PrivateRoom(A_ROOM_ID),
progress = LeaveRoomState.Progress.Hidden, progress = LeaveRoomState.Progress.Hidden,
error = LeaveRoomState.Error.Hidden, error = LeaveRoomState.Error.Hidden,
), ),
LeaveRoomState( aLeaveRoomState(
confirmation = LeaveRoomState.Confirmation.LastUserInRoom(A_ROOM_ID), confirmation = LeaveRoomState.Confirmation.LastUserInRoom(A_ROOM_ID),
progress = LeaveRoomState.Progress.Hidden, progress = LeaveRoomState.Progress.Hidden,
error = LeaveRoomState.Error.Hidden, error = LeaveRoomState.Error.Hidden,
), ),
LeaveRoomState( aLeaveRoomState(
confirmation = LeaveRoomState.Confirmation.Hidden, confirmation = LeaveRoomState.Confirmation.Hidden,
progress = LeaveRoomState.Progress.Shown, progress = LeaveRoomState.Progress.Shown,
error = LeaveRoomState.Error.Hidden, error = LeaveRoomState.Error.Hidden,
), ),
LeaveRoomState( aLeaveRoomState(
confirmation = LeaveRoomState.Confirmation.Hidden, confirmation = LeaveRoomState.Confirmation.Hidden,
progress = LeaveRoomState.Progress.Hidden, progress = LeaveRoomState.Progress.Hidden,
error = LeaveRoomState.Error.Shown, error = LeaveRoomState.Error.Shown,
@ -56,3 +56,14 @@ class LeaveRoomStateProvider : PreviewParameterProvider<LeaveRoomState> {
} }
private val A_ROOM_ID = RoomId("!aRoomId:aDomain") private val A_ROOM_ID = RoomId("!aRoomId:aDomain")
fun aLeaveRoomState(
confirmation: LeaveRoomState.Confirmation = LeaveRoomState.Confirmation.Hidden,
progress: LeaveRoomState.Progress = LeaveRoomState.Progress.Hidden,
error: LeaveRoomState.Error = LeaveRoomState.Error.Hidden,
) = LeaveRoomState(
confirmation = confirmation,
progress = progress,
error = error,
eventSink = {},
)

9
features/leaveroom/test/src/main/kotlin/io/element/android/features/leaveroom/fake/FakeLeaveRoomPresenter.kt

@ -21,7 +21,7 @@ import io.element.android.features.leaveroom.api.LeaveRoomEvent
import io.element.android.features.leaveroom.api.LeaveRoomPresenter import io.element.android.features.leaveroom.api.LeaveRoomPresenter
import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.LeaveRoomState
class FakeLeaveRoomPresenter: LeaveRoomPresenter { class FakeLeaveRoomPresenter : LeaveRoomPresenter {
val events = mutableListOf<LeaveRoomEvent>() val events = mutableListOf<LeaveRoomEvent>()
@ -29,7 +29,12 @@ class FakeLeaveRoomPresenter: LeaveRoomPresenter {
events += event events += event
} }
private var state = LeaveRoomState(eventSink = ::handleEvent) private var state = LeaveRoomState(
confirmation = LeaveRoomState.Confirmation.Hidden,
progress = LeaveRoomState.Progress.Hidden,
error = LeaveRoomState.Error.Hidden,
eventSink = ::handleEvent,
)
set(value) { set(value) {
field = value.copy(eventSink = ::handleEvent) field = value.copy(eventSink = ::handleEvent)
} }

2
features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollState.kt

@ -26,7 +26,7 @@ data class CreatePollState(
val answers: ImmutableList<Answer>, val answers: ImmutableList<Answer>,
val pollKind: PollKind, val pollKind: PollKind,
val showConfirmation: Boolean, val showConfirmation: Boolean,
val eventSink: (CreatePollEvents) -> Unit = {}, val eventSink: (CreatePollEvents) -> Unit,
) )
data class Answer( data class Answer(

32
features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollStateProvider.kt

@ -18,12 +18,13 @@ package io.element.android.features.poll.impl.create
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.poll.PollKind
import kotlinx.collections.immutable.PersistentList
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
class CreatePollStateProvider : PreviewParameterProvider<CreatePollState> { class CreatePollStateProvider : PreviewParameterProvider<CreatePollState> {
override val values: Sequence<CreatePollState> override val values: Sequence<CreatePollState>
get() = sequenceOf( get() = sequenceOf(
CreatePollState( aCreatePollState(
canCreate = false, canCreate = false,
canAddAnswer = true, canAddAnswer = true,
question = "", question = "",
@ -34,7 +35,7 @@ class CreatePollStateProvider : PreviewParameterProvider<CreatePollState> {
pollKind = PollKind.Disclosed, pollKind = PollKind.Disclosed,
showConfirmation = false, showConfirmation = false,
), ),
CreatePollState( aCreatePollState(
canCreate = true, canCreate = true,
canAddAnswer = true, canAddAnswer = true,
question = "What type of food should we have?", question = "What type of food should we have?",
@ -45,7 +46,7 @@ class CreatePollStateProvider : PreviewParameterProvider<CreatePollState> {
showConfirmation = false, showConfirmation = false,
pollKind = PollKind.Undisclosed, pollKind = PollKind.Undisclosed,
), ),
CreatePollState( aCreatePollState(
canCreate = true, canCreate = true,
canAddAnswer = true, canAddAnswer = true,
question = "What type of food should we have?", question = "What type of food should we have?",
@ -56,7 +57,7 @@ class CreatePollStateProvider : PreviewParameterProvider<CreatePollState> {
showConfirmation = true, showConfirmation = true,
pollKind = PollKind.Undisclosed, pollKind = PollKind.Undisclosed,
), ),
CreatePollState( aCreatePollState(
canCreate = true, canCreate = true,
canAddAnswer = true, canAddAnswer = true,
question = "What type of food should we have?", question = "What type of food should we have?",
@ -69,7 +70,7 @@ class CreatePollStateProvider : PreviewParameterProvider<CreatePollState> {
showConfirmation = false, showConfirmation = false,
pollKind = PollKind.Undisclosed, pollKind = PollKind.Undisclosed,
), ),
CreatePollState( aCreatePollState(
canCreate = true, canCreate = true,
canAddAnswer = false, canAddAnswer = false,
question = "Should there be more than 20 answers?", question = "Should there be more than 20 answers?",
@ -98,7 +99,7 @@ class CreatePollStateProvider : PreviewParameterProvider<CreatePollState> {
showConfirmation = false, showConfirmation = false,
pollKind = PollKind.Undisclosed, pollKind = PollKind.Undisclosed,
), ),
CreatePollState( aCreatePollState(
canCreate = true, canCreate = true,
canAddAnswer = true, canAddAnswer = true,
question = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." + question = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." +
@ -122,3 +123,22 @@ class CreatePollStateProvider : PreviewParameterProvider<CreatePollState> {
) )
) )
} }
private fun aCreatePollState(
canCreate: Boolean,
canAddAnswer: Boolean,
question: String,
answers: PersistentList<Answer>,
showConfirmation: Boolean,
pollKind: PollKind
): CreatePollState {
return CreatePollState(
canCreate = canCreate,
canAddAnswer = canAddAnswer,
question = question,
answers = answers,
showConfirmation = showConfirmation,
pollKind = pollKind,
eventSink = {}
)
}

3
features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsStateProvider.kt

@ -18,6 +18,7 @@ package io.element.android.features.roomdetails.impl
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.LeaveRoomState
import io.element.android.features.leaveroom.api.aLeaveRoomState
import io.element.android.features.roomdetails.impl.members.details.aRoomMemberDetailsState import io.element.android.features.roomdetails.impl.members.details.aRoomMemberDetailsState
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMember
@ -80,7 +81,7 @@ fun aRoomDetailsState() = RoomDetailsState(
canShowNotificationSettings = true, canShowNotificationSettings = true,
roomType = RoomDetailsType.Room, roomType = RoomDetailsType.Room,
roomMemberDetailsState = null, roomMemberDetailsState = null,
leaveRoomState = LeaveRoomState(), leaveRoomState = aLeaveRoomState(),
roomNotificationSettings = RoomNotificationSettings(mode = RoomNotificationMode.MUTE, isDefault = false), roomNotificationSettings = RoomNotificationSettings(mode = RoomNotificationMode.MUTE, isDefault = false),
eventSink = {} eventSink = {}
) )

3
features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt

@ -18,6 +18,7 @@ package io.element.android.features.roomlist.impl
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.LeaveRoomState
import io.element.android.features.leaveroom.api.aLeaveRoomState
import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomListRoomSummary
import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryPlaceholders import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryPlaceholders
import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarData
@ -58,7 +59,7 @@ internal fun aRoomListState() = RoomListState(
invitesState = InvitesState.NoInvites, invitesState = InvitesState.NoInvites,
displaySearchResults = false, displaySearchResults = false,
contextMenu = RoomListState.ContextMenu.Hidden, contextMenu = RoomListState.ContextMenu.Hidden,
leaveRoomState = LeaveRoomState(), leaveRoomState = aLeaveRoomState(),
eventSink = {} eventSink = {}
) )

Loading…
Cancel
Save