Skip to content

Commit

Permalink
test: added tests for all methods from OCUserRepository
Browse files Browse the repository at this point in the history
  • Loading branch information
joragua committed Jan 24, 2025
1 parent 9bb1026 commit a31c016
Showing 1 changed file with 96 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -16,6 +18,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package com.owncloud.android.data.user.repository

import com.owncloud.android.data.user.datasources.LocalUserDataSource
Expand All @@ -27,91 +30,143 @@ 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<RemoteUserDataSource>(relaxed = true)
private val localUserDataSource = mockk<LocalUserDataSource>(relaxed = true)
private val ocUserRepository: OCUserRepository = OCUserRepository(localUserDataSource, remoteUserDataSource)
private val remoteUserDataSource = mockk<RemoteUserDataSource>()
private val localUserDataSource = mockk<LocalUserDataSource>(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)
localUserDataSource.saveQuotaForAccount(OC_ACCOUNT_NAME, OC_USER_QUOTA)
}
}

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

}

0 comments on commit a31c016

Please sign in to comment.