diff --git a/owncloudData/src/test/java/com/owncloud/android/data/user/repository/OCUserRepositoryTest.kt b/owncloudData/src/test/java/com/owncloud/android/data/user/repository/OCUserRepositoryTest.kt index 1041f5f0c68..f2165b44ab1 100644 --- a/owncloudData/src/test/java/com/owncloud/android/data/user/repository/OCUserRepositoryTest.kt +++ b/owncloudData/src/test/java/com/owncloud/android/data/user/repository/OCUserRepositoryTest.kt @@ -2,7 +2,9 @@ * ownCloud Android client application * * @author Abel GarcĂ­a de Prada - * Copyright (C) 2020 ownCloud GmbH. + * @author Jorge Aguado Recio + * + * Copyright (C) 2024 ownCloud GmbH. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -16,6 +18,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + package com.owncloud.android.data.user.repository import com.owncloud.android.data.user.datasources.LocalUserDataSource @@ -27,37 +30,40 @@ import com.owncloud.android.testutil.OC_USER_QUOTA import io.mockk.every import io.mockk.mockk import io.mockk.verify +import junit.framework.TestCase.assertEquals +import junit.framework.TestCase.assertNull +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.runTest import org.junit.Test class OCUserRepositoryTest { - - private val remoteUserDataSource = mockk(relaxed = true) - private val localUserDataSource = mockk(relaxed = true) - private val ocUserRepository: OCUserRepository = OCUserRepository(localUserDataSource, remoteUserDataSource) + private val remoteUserDataSource = mockk() + private val localUserDataSource = mockk(relaxUnitFun = true) + private val ocUserRepository = OCUserRepository(localUserDataSource, remoteUserDataSource) @Test - fun `get user info - ok`() { - every { remoteUserDataSource.getUserInfo(OC_ACCOUNT_NAME) } returns OC_USER_INFO + fun `getUserInfo returns an UserInfo`() { + every { + remoteUserDataSource.getUserInfo(OC_ACCOUNT_NAME) + } returns OC_USER_INFO - ocUserRepository.getUserInfo(OC_ACCOUNT_NAME) + val userInfo = ocUserRepository.getUserInfo(OC_ACCOUNT_NAME) + assertEquals(OC_USER_INFO, userInfo) verify(exactly = 1) { remoteUserDataSource.getUserInfo(OC_ACCOUNT_NAME) } } - @Test(expected = Exception::class) - fun `get user info - ko`() { - every { remoteUserDataSource.getUserInfo(OC_ACCOUNT_NAME) } throws Exception() - - ocUserRepository.getUserInfo(OC_ACCOUNT_NAME) - } - @Test - fun `get user quota - ok`() { - every { remoteUserDataSource.getUserQuota(OC_ACCOUNT_NAME) } returns OC_USER_QUOTA + fun `getUserQuota returns an UserQuota`() { + every { + remoteUserDataSource.getUserQuota(OC_ACCOUNT_NAME) + } returns OC_USER_QUOTA - ocUserRepository.getUserQuota(OC_ACCOUNT_NAME) + val userQuota = ocUserRepository.getUserQuota(OC_ACCOUNT_NAME) + assertEquals(OC_USER_QUOTA, userQuota) verify(exactly = 1) { remoteUserDataSource.getUserQuota(OC_ACCOUNT_NAME) @@ -65,53 +71,102 @@ class OCUserRepositoryTest { } } - @Test(expected = Exception::class) - fun `get user quota - ko`() { - every { remoteUserDataSource.getUserQuota(OC_ACCOUNT_NAME) } throws Exception() + @Test + fun `getStoredUserQuota returns an UserQuota`() { + every { + localUserDataSource.getQuotaForAccount(OC_ACCOUNT_NAME) + } returns OC_USER_QUOTA - ocUserRepository.getUserQuota(OC_ACCOUNT_NAME) + val storedQuota = ocUserRepository.getStoredUserQuota(OC_ACCOUNT_NAME) + assertEquals(OC_USER_QUOTA, storedQuota) - verify(exactly = 0) { - localUserDataSource.saveQuotaForAccount(OC_ACCOUNT_NAME, OC_USER_QUOTA) + verify(exactly = 1) { + localUserDataSource.getQuotaForAccount(OC_ACCOUNT_NAME) } } @Test - fun `get stored user quota - ok`() { - every { localUserDataSource.getQuotaForAccount(OC_ACCOUNT_NAME) } returns OC_USER_QUOTA + fun `getStoredUserQuota returns null when local datasource returns null`() { + every { + localUserDataSource.getQuotaForAccount(OC_ACCOUNT_NAME) + } returns null - ocUserRepository.getStoredUserQuota(OC_ACCOUNT_NAME) + val storedQuota = ocUserRepository.getStoredUserQuota(OC_ACCOUNT_NAME) + assertNull(storedQuota) verify(exactly = 1) { localUserDataSource.getQuotaForAccount(OC_ACCOUNT_NAME) } - verify(exactly = 0) { - remoteUserDataSource.getUserQuota(OC_ACCOUNT_NAME) + } + + @Test + fun `getStoredUserQuotaAsFlow returns a Flow with an UserQuota`() = runTest { + every { + localUserDataSource.getQuotaForAccountAsFlow(OC_ACCOUNT_NAME) + } returns flowOf(OC_USER_QUOTA) + + val userQuota = ocUserRepository.getStoredUserQuotaAsFlow(OC_ACCOUNT_NAME).first() + assertEquals(OC_USER_QUOTA, userQuota) + + verify(exactly = 1) { + localUserDataSource.getQuotaForAccountAsFlow(OC_ACCOUNT_NAME) } } - @Test(expected = Exception::class) - fun `get stored user quota - ko`() { - every { localUserDataSource.getQuotaForAccount(OC_ACCOUNT_NAME) } throws Exception() + @Test + fun `getStoredUserQuotaAsFlow returns a Flow with null when local datasource returns a Flow with null`() = runTest { + every { + localUserDataSource.getQuotaForAccountAsFlow(OC_ACCOUNT_NAME) + } returns flowOf(null) + + val userQuota = ocUserRepository.getStoredUserQuotaAsFlow(OC_ACCOUNT_NAME).first() + assertNull(userQuota) - ocUserRepository.getStoredUserQuota(OC_ACCOUNT_NAME) + verify(exactly = 1) { + localUserDataSource.getQuotaForAccountAsFlow(OC_ACCOUNT_NAME) + } } @Test - fun `get user avatar - ok`() { - every { remoteUserDataSource.getUserAvatar(OC_ACCOUNT_NAME) } returns OC_USER_AVATAR + fun `getAllUserQuotas returns a list of UserQuota`() { + every { + localUserDataSource.getAllUserQuotas() + } returns listOf(OC_USER_QUOTA) - ocUserRepository.getUserAvatar(OC_ACCOUNT_NAME) + val listOfUserQuotas = ocUserRepository.getAllUserQuotas() + assertEquals(listOf(OC_USER_QUOTA), listOfUserQuotas) verify(exactly = 1) { - remoteUserDataSource.getUserAvatar(OC_ACCOUNT_NAME) + localUserDataSource.getAllUserQuotas() + } + } + + @Test + fun `getAllUserQuotasAsFlow returns a Flow with a list of UserQuota`() = runTest { + every { + localUserDataSource.getAllUserQuotasAsFlow() + } returns flowOf(listOf(OC_USER_QUOTA)) + + val listOfUserQuotas = ocUserRepository.getAllUserQuotasAsFlow().first() + assertEquals(listOf(OC_USER_QUOTA), listOfUserQuotas) + + verify(exactly = 1) { + localUserDataSource.getAllUserQuotasAsFlow() } } - @Test(expected = Exception::class) - fun `get user avatar - ko`() { - every { remoteUserDataSource.getUserAvatar(OC_ACCOUNT_NAME) } throws Exception() + @Test + fun `getUserAvatar returns an UserAvatar`() { + every { + remoteUserDataSource.getUserAvatar(OC_ACCOUNT_NAME) + } returns OC_USER_AVATAR + + val userAvatar = ocUserRepository.getUserAvatar(OC_ACCOUNT_NAME) + assertEquals(OC_USER_AVATAR, userAvatar) - ocUserRepository.getUserAvatar(OC_ACCOUNT_NAME) + verify(exactly = 1) { + remoteUserDataSource.getUserAvatar(OC_ACCOUNT_NAME) + } } + }