From 2d7b71f70d94970aa53eccb20704f9856245c866 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Tue, 19 Apr 2022 12:30:33 +0100 Subject: [PATCH] extracting stage ordering to its own class with test --- .../onboarding/ftueauth/FtueAuthVariant.kt | 11 +--- ...FtueMissingRegistrationStagesComparator.kt | 35 +++++++++++++ ...MissingRegistrationStagesComparatorTest.kt | 52 +++++++++++++++++++ .../vector/app/test/fixtures/StageFixtures.kt | 26 ++++++++++ 4 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueMissingRegistrationStagesComparator.kt create mode 100644 vector/src/test/java/im/vector/app/features/onboarding/ftueauth/FtueMissingRegistrationStagesComparatorTest.kt create mode 100644 vector/src/test/java/im/vector/app/test/fixtures/StageFixtures.kt diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt index 00e96295be..b73d0c7997 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt @@ -252,16 +252,7 @@ class FtueAuthVariant( } private fun FlowResult.orderedStages() = when { - vectorFeatures.isOnboardingCombinedRegisterEnabled() -> missingStages.sortedBy { - when (it) { - is Stage.Email -> 0 - is Stage.Msisdn -> 1 - is Stage.Terms -> 2 - is Stage.ReCaptcha -> 3 - is Stage.Other -> 4 - is Stage.Dummy -> 5 - } - } + vectorFeatures.isOnboardingCombinedRegisterEnabled() -> missingStages.sortedWith(FtueMissingRegistrationStagesComparator()) else -> missingStages } diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueMissingRegistrationStagesComparator.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueMissingRegistrationStagesComparator.kt new file mode 100644 index 0000000000..6a6326625e --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueMissingRegistrationStagesComparator.kt @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.app.features.onboarding.ftueauth + +import org.matrix.android.sdk.api.auth.registration.Stage + +class FtueMissingRegistrationStagesComparator : Comparator { + + override fun compare(a: Stage?, b: Stage?): Int { + return (a?.toPriority() ?: 0) - (b?.toPriority() ?: 0) + } + + private fun Stage.toPriority() = when (this) { + is Stage.Email -> 0 + is Stage.Msisdn -> 1 + is Stage.Terms -> 2 + is Stage.ReCaptcha -> 3 + is Stage.Other -> 4 + is Stage.Dummy -> 5 + } +} diff --git a/vector/src/test/java/im/vector/app/features/onboarding/ftueauth/FtueMissingRegistrationStagesComparatorTest.kt b/vector/src/test/java/im/vector/app/features/onboarding/ftueauth/FtueMissingRegistrationStagesComparatorTest.kt new file mode 100644 index 0000000000..010cf5de60 --- /dev/null +++ b/vector/src/test/java/im/vector/app/features/onboarding/ftueauth/FtueMissingRegistrationStagesComparatorTest.kt @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2022 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.app.features.onboarding.ftueauth + +import im.vector.app.test.fixtures.aDummyStage +import im.vector.app.test.fixtures.aMsisdnStage +import im.vector.app.test.fixtures.aRecaptchaStage +import im.vector.app.test.fixtures.aTermsStage +import im.vector.app.test.fixtures.anEmailStage +import im.vector.app.test.fixtures.anOtherStage +import org.amshove.kluent.shouldBeEqualTo +import org.junit.Test + +class FtueMissingRegistrationStagesComparatorTest { + + @Test + fun `when ordering stages, then prioritizes email`() { + val input = listOf( + aDummyStage(), + anOtherStage(), + aMsisdnStage(), + anEmailStage(), + aRecaptchaStage(), + aTermsStage() + ) + + val result = input.sortedWith(FtueMissingRegistrationStagesComparator()) + + result shouldBeEqualTo listOf( + anEmailStage(), + aMsisdnStage(), + aTermsStage(), + aRecaptchaStage(), + anOtherStage(), + aDummyStage() + ) + } +} diff --git a/vector/src/test/java/im/vector/app/test/fixtures/StageFixtures.kt b/vector/src/test/java/im/vector/app/test/fixtures/StageFixtures.kt new file mode 100644 index 0000000000..e06993523c --- /dev/null +++ b/vector/src/test/java/im/vector/app/test/fixtures/StageFixtures.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.app.test.fixtures + +import org.matrix.android.sdk.api.auth.registration.Stage + +fun aDummyStage() = Stage.Dummy(mandatory = true) +fun anEmailStage() = Stage.Email(mandatory = true) +fun aMsisdnStage() = Stage.Msisdn(mandatory = true) +fun aTermsStage() = Stage.Terms(mandatory = true, policies = emptyMap()) +fun aRecaptchaStage() = Stage.ReCaptcha(mandatory = true, publicKey = "any-key") +fun anOtherStage() = Stage.Other(mandatory = true, type = "raw-type", params = emptyMap())