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

Unverified Commit abc9c21b authored by ZetaTom's avatar ZetaTom
Browse files

Add FilesDownloadLimitIT

parent 5bf45ce0
Loading
Loading
Loading
Loading
+97 −0
Original line number Diff line number Diff line
/*
 * Nextcloud Android Library
 *
 * SPDX-FileCopyrightText: 2024 ZetaTom <70907959+zetatom@users.noreply.github.com>
 * SPDX-License-Identifier: MIT
 */

package com.owncloud.android.lib.resources.files

import com.nextcloud.android.lib.resources.files.GetFilesDownloadLimitRemoteOperation
import com.nextcloud.android.lib.resources.files.RemoveFilesDownloadLimitRemoteOperation
import com.nextcloud.android.lib.resources.files.SetFilesDownloadLimitRemoteOperation
import com.owncloud.android.AbstractIT
import com.owncloud.android.lib.resources.shares.CreateShareRemoteOperation
import com.owncloud.android.lib.resources.shares.OCShare
import com.owncloud.android.lib.resources.shares.ShareType
import com.owncloud.android.lib.resources.status.GetCapabilitiesRemoteOperation
import com.owncloud.android.lib.resources.status.OCCapability
import com.owncloud.android.lib.resources.status.OwnCloudVersion
import org.junit.Assume.assumeTrue
import org.junit.Before
import org.junit.Test

class FilesDownloadLimitIT : AbstractIT() {
    @Before
    fun before() {
        testOnlyOnServer(OwnCloudVersion.nextcloud_30)
        assumeTrue(getCapability().filesDownloadLimit.isTrue)
    }

    @Test
    fun getDefaultLimit() {
        val defaultLimit = getCapability().filesDownloadLimitDefault
        assert(defaultLimit == 0)
    }

    @Test
    fun downloadLimit() {
        val share = createTestShare()
        val limit = 5

        val resultSet = SetFilesDownloadLimitRemoteOperation(share.token!!, limit).execute(nextcloudClient)
        assert(resultSet.isSuccess)

        shortSleep()

        val resultGet1 = GetFilesDownloadLimitRemoteOperation(REMOTE_PATH, false).execute(client)
        assert(resultGet1.isSuccess)
        assert(resultGet1.resultData.size == 1)
        assert(resultGet1.resultData.first().token == share.token)
        assert(resultGet1.resultData.first().limit == limit)
        assert(resultGet1.resultData.first().count == 0)

        shortSleep()

        val resultRemove = RemoveFilesDownloadLimitRemoteOperation(share.token!!).execute(nextcloudClient)
        assert(resultRemove.isSuccess)

        shortSleep()

        val resultGet2 = GetFilesDownloadLimitRemoteOperation(REMOTE_PATH, false).execute(client)
        assert(resultGet2.isSuccess)
        assert(resultGet2.resultData.isEmpty())
    }

    private fun getCapability(): OCCapability =
        GetCapabilitiesRemoteOperation().execute(nextcloudClient).singleData as OCCapability

    private fun createTestShare(): OCShare {
        val localPath = createFile("test")

        assert(
            UploadFileRemoteOperation(localPath, REMOTE_PATH, "text/plain", RANDOM_MTIME)
                .execute(client)
                .isSuccess
        )

        val result =
            CreateShareRemoteOperation(
                REMOTE_PATH,
                ShareType.PUBLIC_LINK,
                "",
                false,
                "",
                1
            ).execute(client)

        assert(result.isSuccess)
        val share = result.resultData.first()
        assert(share.token != null)
        return share
    }

    companion object {
        private const val REMOTE_PATH = "/downloadLimits.txt"
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ public class OwnCloudVersion implements Comparable<OwnCloudVersion>, Parcelable
    public static final OwnCloudVersion nextcloud_18 = new OwnCloudVersion(0x12000000); // 18.0
    public static final OwnCloudVersion nextcloud_19 = new OwnCloudVersion(0x13000000); // 19.0
    public static final OwnCloudVersion nextcloud_20 = new OwnCloudVersion(0x14000000); // 20.0
    public static final OwnCloudVersion nextcloud_30 = new OwnCloudVersion(0x1E000000); // 30.0

    private static final int MAX_DOTS = 3;