Konsist: improve test about no default value for State classes, and fix new detected issues.
This commit is contained in:
parent
22fa3dff15
commit
108ce544d7
10 changed files with 82 additions and 32 deletions
|
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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> {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 = {},
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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 = {}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 = {}
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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…
Add table
Add a link
Reference in a new issue