extracting stage ordering to its own class with test

This commit is contained in:
Adam Brown 2022-04-19 12:30:33 +01:00
parent 1a76b4d680
commit 2d7b71f70d
4 changed files with 114 additions and 10 deletions

View File

@ -252,16 +252,7 @@ class FtueAuthVariant(
} }
private fun FlowResult.orderedStages() = when { private fun FlowResult.orderedStages() = when {
vectorFeatures.isOnboardingCombinedRegisterEnabled() -> missingStages.sortedBy { vectorFeatures.isOnboardingCombinedRegisterEnabled() -> missingStages.sortedWith(FtueMissingRegistrationStagesComparator())
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
}
}
else -> missingStages else -> missingStages
} }

View File

@ -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<Stage> {
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
}
}

View File

@ -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()
)
}
}

View File

@ -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<String, String>())
fun aRecaptchaStage() = Stage.ReCaptcha(mandatory = true, publicKey = "any-key")
fun anOtherStage() = Stage.Other(mandatory = true, type = "raw-type", params = emptyMap<String, String>())