Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 98fd9f3f authored by Alejandro Nijamkin's avatar Alejandro Nijamkin
Browse files

Guest user is last.

There is a bug where the guest user might get placed between two
non-guest users in cases where a non-guest user was created _after_ the
guest user was created. This is because in ag/20155790, we added sorting
by creation time but missed this requirement.

This CL fixes that.

Fix: 254258116
Test: This was done using TDD (test-driven development). The test was
first updated to fail, then the production code was changed to make the
test pass. Finally, I manually verified that a guest user, which I
created before a normal user, is displayed at the end of the user list
in both the full-screen user switcher and the popup version. Also
verified in the bouncer drop-down.

Change-Id: I0f4eaaddc4b264eb7457e0f731412f2cf93e2e8b
parent 17f47db7
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -220,7 +220,12 @@ constructor(
            val result = withContext(backgroundDispatcher) { manager.aliveUsers }

            if (result != null) {
                _userInfos.value = result.sortedBy { it.creationTime }
                _userInfos.value =
                    result
                        // Users should be sorted by ascending creation time.
                        .sortedBy { it.creationTime }
                        // The guest user is always last, regardless of creation time.
                        .sortedBy { it.isGuest }
            }
        }
    }
+14 −10
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ class UserRepositoryImplRefactoredTest : UserRepositoryImplTest() {
        val thirdExpectedValue =
            setUpUsers(
                count = 2,
                hasGuest = true,
                isLastGuestUser = true,
                selectedIndex = 1,
            )
        underTest.refreshUsers()
@@ -121,21 +121,25 @@ class UserRepositoryImplRefactoredTest : UserRepositoryImplTest() {
    }

    @Test
    fun `refreshUsers - sorts by creation time`() = runSelfCancelingTest {
    fun `refreshUsers - sorts by creation time - guest user last`() = runSelfCancelingTest {
        underTest = create(this)
        val unsortedUsers =
            setUpUsers(
                count = 3,
                selectedIndex = 0,
                isLastGuestUser = true,
            )
        unsortedUsers[0].creationTime = 999
        unsortedUsers[1].creationTime = 900
        unsortedUsers[2].creationTime = 950
        val expectedUsers =
            listOf(
                unsortedUsers[1],
                unsortedUsers[0],
                unsortedUsers[2], // last because this is the guest
            )
        unsortedUsers[0].creationTime = 900
        unsortedUsers[1].creationTime = 700
        unsortedUsers[2].creationTime = 999
        val expectedUsers = listOf(unsortedUsers[1], unsortedUsers[0], unsortedUsers[2])
        var userInfos: List<UserInfo>? = null
        var selectedUserInfo: UserInfo? = null
        underTest.userInfos.onEach { userInfos = it }.launchIn(this)
        underTest.selectedUserInfo.onEach { selectedUserInfo = it }.launchIn(this)

        underTest.refreshUsers()
        assertThat(userInfos).isEqualTo(expectedUsers)
@@ -143,14 +147,14 @@ class UserRepositoryImplRefactoredTest : UserRepositoryImplTest() {

    private fun setUpUsers(
        count: Int,
        hasGuest: Boolean = false,
        isLastGuestUser: Boolean = false,
        selectedIndex: Int = 0,
    ): List<UserInfo> {
        val userInfos =
            (0 until count).map { index ->
                createUserInfo(
                    index,
                    isGuest = hasGuest && index == count - 1,
                    isGuest = isLastGuestUser && index == count - 1,
                )
            }
        whenever(manager.aliveUsers).thenReturn(userInfos)