Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions gradle/verification-metadata.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8637,6 +8637,14 @@
<sha256 value="27dfd34ad6656990d3c73176344b0991f2c82709fab30709b3ddea8fa3003070" origin="Generated by Gradle" reason="A key couldn't be downloaded"/>
</artifact>
</component>
<component group="com.github.bitfireAT" name="dav4jvm" version="2.1.3">
<artifact name="dav4jvm-2.1.3.jar">
<sha256 value="7d0969dbd8efce7f4679e95153a9ee068c7c28666b7b1d3a75907682e7d9e757" origin="Generated by Gradle" reason="Artifact is not signed"/>
</artifact>
<artifact name="dav4jvm-2.1.3.module">
<sha256 value="75c6d60b57b164d6847078c54a359c86e87f222ed4d6300cc6d04cd28bff6301" origin="Generated by Gradle" reason="Artifact is not signed"/>
</artifact>
</component>
<component group="com.github.bitfireAT" name="dav4jvm" version="2.2.1">
<artifact name="dav4jvm-2.2.1.jar">
<sha256 value="5ce40389fc7ba0b630f07cbd2a573a507db616aed0ffdc744fb78000d8835815" origin="Generated by Gradle" reason="Artifact is not signed">
Expand Down
2 changes: 1 addition & 1 deletion library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ dependencies {

implementation 'org.apache.jackrabbit:jackrabbit-webdav:2.13.5'
api 'com.squareup.okhttp3:okhttp:5.5.0'
implementation 'com.github.bitfireAT:dav4jvm:3.0.2'
implementation 'com.github.bitfireAT:dav4jvm:2.1.3'
// in transition phase, we use old and new libs
implementation group: 'com.google.code.gson', name: 'gson', version: '2.14.0'
implementation 'androidx.annotation:annotation:1.10.0'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
*/
package com.nextcloud.android.lib.resources.directediting;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import com.owncloud.android.AbstractIT;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation;
Expand All @@ -18,9 +21,6 @@

import java.io.IOException;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class DirectEditingOpenFileRemoteOperationIT extends AbstractIT {
@Test
public void openFile() throws IOException {
Expand All @@ -34,7 +34,7 @@ public void openFile() throws IOException {
1464818400
).execute(client).isSuccess());

TestCase.assertTrue(new ReadFileRemoteOperation(remotePath).execute(client).isSuccess());
TestCase.assertTrue(new ReadFileRemoteOperation(remotePath).execute(nextcloudClient).isSuccess());

// open file
RemoteOperationResult<String> result = new DirectEditingOpenFileRemoteOperation(remotePath, "text")
Expand All @@ -58,7 +58,7 @@ public void openFileWithSpecialChars() throws IOException {
1464818400
).execute(client).isSuccess());

TestCase.assertTrue(new ReadFileRemoteOperation(remotePath).execute(client).isSuccess());
TestCase.assertTrue(new ReadFileRemoteOperation(remotePath).execute(nextcloudClient).isSuccess());

// open file
RemoteOperationResult<String> result = new DirectEditingOpenFileRemoteOperation(remotePath, "text")
Expand All @@ -82,7 +82,7 @@ public void openFileWithSpecialChars2() throws IOException {
1464818400
).execute(client).isSuccess());

TestCase.assertTrue(new ReadFileRemoteOperation(remotePath).execute(client).isSuccess());
TestCase.assertTrue(new ReadFileRemoteOperation(remotePath).execute(nextcloudClient).isSuccess());

// open file
RemoteOperationResult<String> result = new DirectEditingOpenFileRemoteOperation(remotePath, "text")
Expand All @@ -98,7 +98,7 @@ public void openFileWithSpecialChars2() throws IOException {
public void openNonExistingFile() {
String remotePath = "/nonExisting.md";

TestCase.assertFalse(new ReadFileRemoteOperation(remotePath).execute(client).isSuccess());
TestCase.assertFalse(new ReadFileRemoteOperation(remotePath).execute(nextcloudClient).isSuccess());

// open file
RemoteOperationResult<String> result = new DirectEditingOpenFileRemoteOperation(remotePath, "text")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import com.owncloud.android.AbstractIT
import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation
import com.owncloud.android.lib.resources.files.UploadFileRemoteOperation
import com.owncloud.android.lib.resources.files.model.FileLockType
import com.owncloud.android.lib.resources.files.model.RemoteFile
import com.owncloud.android.lib.resources.status.NextcloudVersion.Companion.nextcloud_24
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
Expand All @@ -34,20 +33,20 @@ class ToggleFileLockRemoteOperationIT : AbstractIT() {
.isSuccess
)
val initialFile =
ReadFileRemoteOperation(remotePath).execute(client).singleData as RemoteFile
ReadFileRemoteOperation(remotePath).execute(nextcloudClient).resultData
assertFalse("File shouldn't be locked", initialFile.isLocked)

// lock file
val lockResult = ToggleFileLockRemoteOperation(toLock = true, remotePath).execute(nextcloudClient)
assertTrue("File lock failed", lockResult.isSuccess)
val lockFile = ReadFileRemoteOperation(remotePath).execute(client).singleData as RemoteFile
val lockFile = ReadFileRemoteOperation(remotePath).execute(nextcloudClient).resultData
assertTrue("File should be locked", lockFile.isLocked)
assertEquals("Wrong lock type", FileLockType.MANUAL, lockFile.lockType)

// unlock again
val unlockResult = ToggleFileLockRemoteOperation(toLock = false, remotePath).execute(nextcloudClient)
assertTrue("File unlock failed", unlockResult.isSuccess)
val unlockFile = ReadFileRemoteOperation(remotePath).execute(client).singleData as RemoteFile
val unlockFile = ReadFileRemoteOperation(remotePath).execute(nextcloudClient).resultData
assertFalse("File shouldn't be locked", unlockFile.isLocked)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ package com.nextcloud.android.lib.resources.search
import com.owncloud.android.AbstractIT
import com.owncloud.android.lib.resources.files.CreateFolderRemoteOperation
import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation
import com.owncloud.android.lib.resources.files.model.RemoteFile
import com.owncloud.android.lib.resources.status.NextcloudVersion
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
Expand Down Expand Up @@ -48,8 +47,8 @@ class UnifiedSearchRemoteOperationIT : AbstractIT() {
assertTrue(CreateFolderRemoteOperation(remotePath, true).execute(client).isSuccess)
val remoteFile =
ReadFileRemoteOperation(remotePath)
.execute(client)
.data[0] as RemoteFile
.execute(nextcloudClient)
.resultData
val fileId = remoteFile.localId

val result = UnifiedSearchRemoteOperation("files", "test").execute(nextcloudClient)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ public static void beforeAll() throws InterruptedException,
String loginName = arguments.getString("TEST_SERVER_USERNAME");
String password = arguments.getString("TEST_SERVER_PASSWORD");

// E2E server app checks for official NC client with >=3.13.0,
// and blocks all other clients, e.g. 3rd party apps using this lib
OwnCloudClientManagerFactory.setUserAgent("Mozilla/5.0 (Android) Nextcloud-android/3.13.0");

client = OwnCloudClientFactory.createOwnCloudClient(url, context, true);
client.setCredentials(new OwnCloudBasicCredentials(loginName, password));
client.setUserId(loginName); // for test same as userId
Expand All @@ -106,8 +110,6 @@ public static void beforeAll() throws InterruptedException,
client2.setCredentials(new OwnCloudBasicCredentials(loginName2, password2));
client2.setUserId(loginName2); // for test same as userId

OwnCloudClientManagerFactory.setUserAgent("Mozilla/5.0 (Android) Nextcloud-android/1.0.0");

String userId = loginName; // for test same as userId
String credentials = Credentials.basic(loginName, password);
nextcloudClient = new NextcloudClient(url, userId, credentials, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,10 @@ public void testFileID() {
RemoteOperationResult<String> result = new CreateFolderRemoteOperation(remotePath, true).execute(client);
assertTrue(result.isSuccess());

RemoteOperationResult readResult = new ReadFileRemoteOperation(remotePath).execute(client);
RemoteOperationResult<RemoteFile> readResult = new ReadFileRemoteOperation(remotePath).execute(nextcloudClient);
assertTrue(readResult.isSuccess());

String remoteId = ((RemoteFile) readResult.getData().get(0)).getRemoteId();
String remoteId = readResult.getResultData().getRemoteId();
assertEquals(result.getResultData(), remoteId);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ package com.owncloud.android.lib.resources.comments
import com.owncloud.android.AbstractIT
import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation
import com.owncloud.android.lib.resources.files.UploadFileRemoteOperation
import com.owncloud.android.lib.resources.files.model.RemoteFile
import junit.framework.Assert.assertTrue
import org.junit.Test

Expand All @@ -25,8 +24,8 @@ class CommentFileRemoteOperationIT : AbstractIT() {
.isSuccess
)

val readResult = ReadFileRemoteOperation(remotePath).execute(client)
val remoteFile = readResult.data.get(0) as RemoteFile
val readResult = ReadFileRemoteOperation(remotePath).execute(nextcloudClient)
val remoteFile = readResult.resultData

assertTrue(
CommentFileRemoteOperation("test", remoteFile.localId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import com.owncloud.android.AbstractIT
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
import com.owncloud.android.lib.resources.files.CreateFolderRemoteOperation
import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation
import com.owncloud.android.lib.resources.files.model.RemoteFile
import com.owncloud.android.lib.resources.status.OwnCloudVersion
import junit.framework.TestCase
import org.junit.Assert
Expand All @@ -33,8 +32,7 @@ class UpdateMetadataRemoteOperationIT : AbstractIT() {
// create folder
val folder = "/" + make(20) + "/"
TestCase.assertTrue(CreateFolderRemoteOperation(folder, true).execute(client).isSuccess)
val remoteFolder =
ReadFileRemoteOperation(folder).execute(client).getSingleData() as RemoteFile?
val remoteFolder = ReadFileRemoteOperation(folder).execute(nextcloudClient).resultData

TestCase.assertNotNull(remoteFolder)

Expand Down Expand Up @@ -117,8 +115,7 @@ class UpdateMetadataRemoteOperationIT : AbstractIT() {
// create folder
val folder = "/" + make(20) + "/"
TestCase.assertTrue(CreateFolderRemoteOperation(folder, true).execute(client).isSuccess)
val remoteFolder =
ReadFileRemoteOperation(folder).execute(client).getSingleData() as RemoteFile?
val remoteFolder = ReadFileRemoteOperation(folder).execute(nextcloudClient).resultData

TestCase.assertNotNull(remoteFolder)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ package com.owncloud.android.lib.resources.files

import com.owncloud.android.AbstractIT
import com.owncloud.android.lib.common.operations.RemoteOperationResult
import com.owncloud.android.lib.resources.files.model.RemoteFile
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
Expand All @@ -26,8 +25,7 @@ class CheckEtagRemoteOperationIT : AbstractIT() {
.isSuccess
)

val readResult = ReadFileRemoteOperation(remotePath).execute(client)
val remoteFile = readResult.data[0] as RemoteFile
val remoteFile = ReadFileRemoteOperation(remotePath).execute(nextcloudClient).resultData
val eTag = remoteFile.etag

var eTagResult = CheckEtagRemoteOperation(remotePath, eTag).execute(client)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
package com.owncloud.android.lib.resources.files

import com.owncloud.android.AbstractIT
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory
import com.owncloud.android.lib.resources.e2ee.ToggleEncryptionRemoteOperation
import com.owncloud.android.lib.resources.files.model.GeoLocation
import com.owncloud.android.lib.resources.files.model.ImageDimension
Expand All @@ -23,14 +22,24 @@ import org.junit.Test
class ReadFileRemoteOperationIT : AbstractIT() {
@Test
fun readRemoteFolder() {
val remotePath = "/test/"
val remotePath = "/folder/"

assertTrue(CreateFolderRemoteOperation(remotePath, true).execute(client).isSuccess)

val result = ReadFileRemoteOperation(remotePath).execute(client)
// use ownCloud client for reference
var result = ReadFileRemoteOperation(remotePath).execute(client)
assertTrue(result.isSuccess)
val ocClientFile = result.resultData
assertEquals(remotePath, ocClientFile.remotePath)

result = ReadFileRemoteOperation(remotePath).execute(nextcloudClient)
assertTrue(result.isSuccess)
assertEquals(remotePath, (result.data[0] as RemoteFile).remotePath)
val ncClientFile = result.resultData
assertEquals(remotePath, result.resultData.remotePath)

assertEquals(ocClientFile.modifiedTimestamp, ncClientFile.modifiedTimestamp)

assertTrue(remoteFilesEqual(ocClientFile, ncClientFile))
}

@Test
Expand Down Expand Up @@ -68,13 +77,13 @@ class ReadFileRemoteOperationIT : AbstractIT() {
).execute(client).isSuccess
)

val movieFileResult = ReadFileRemoteOperation(movieFilePath).execute(client)
val movieFileResult = ReadFileRemoteOperation(movieFilePath).execute(nextcloudClient)
assertTrue(movieFileResult.isSuccess)
val movieRemoteFile = movieFileResult.data[0] as RemoteFile
val movieRemoteFile = movieFileResult.resultData

val livePhotoResult = ReadFileRemoteOperation(livePhotoPath).execute(client)
val livePhotoResult = ReadFileRemoteOperation(livePhotoPath).execute(nextcloudClient)
assertTrue(livePhotoResult.isSuccess)
val livePhotoRemoteFile = livePhotoResult.data[0] as RemoteFile
val livePhotoRemoteFile = livePhotoResult.resultData

assertEquals(livePhotoRemoteFile.livePhoto, movieRemoteFile.remotePath)
assertTrue(movieRemoteFile.hidden)
Expand All @@ -91,10 +100,18 @@ class ReadFileRemoteOperationIT : AbstractIT() {
.isSuccess
)

val result = ReadFileRemoteOperation(remotePath).execute(client)
// use ownCloud client for reference
var result = ReadFileRemoteOperation(remotePath).execute(client)
assertTrue(result.isSuccess)
val ocClientFile = result.resultData
assertEquals(remotePath, ocClientFile.remotePath)

result = ReadFileRemoteOperation(remotePath).execute(nextcloudClient)
assertTrue(result.isSuccess)
assertEquals(remotePath, (result.data[0] as RemoteFile).remotePath)
val ncClientFile = result.resultData
assertEquals(remotePath, result.resultData.remotePath)

assertTrue(remoteFilesEqual(ocClientFile, ncClientFile))
}

@Test
Expand All @@ -108,10 +125,10 @@ class ReadFileRemoteOperationIT : AbstractIT() {
.isSuccess
)

val result = ReadFileRemoteOperation(remotePath).execute(client)
val result = ReadFileRemoteOperation(remotePath).execute(nextcloudClient)

assertTrue(result.isSuccess)
val remoteFile = result.data[0] as RemoteFile
val remoteFile = result.resultData

@Suppress("Detekt.MagicNumber")
if (isServerAtLeast(NextcloudVersion.nextcloud_23)) {
Expand All @@ -134,15 +151,10 @@ class ReadFileRemoteOperationIT : AbstractIT() {
@Test
fun readEncryptedState() {
val remotePath = "/testEncryptedFolder/"

// E2E server app checks for official NC client with >=3.13.0,
// and blocks all other clients, e.g. 3rd party apps using this lib
OwnCloudClientManagerFactory.setUserAgent("Mozilla/5.0 (Android) Nextcloud-android/3.13.0")

assertTrue(CreateFolderRemoteOperation(remotePath, true).execute(client).isSuccess)

var result = ReadFileRemoteOperation(remotePath).execute(client)
val remoteFile = result.data[0] as RemoteFile
var result = ReadFileRemoteOperation(remotePath).execute(nextcloudClient)
val remoteFile = result.resultData

assertTrue(result.isSuccess)
assertFalse(remoteFile.isEncrypted)
Expand All @@ -159,7 +171,47 @@ class ReadFileRemoteOperationIT : AbstractIT() {
)

// re-read
result = ReadFileRemoteOperation(remotePath).execute(client)
assertEquals(true, (result.data[0] as RemoteFile).isEncrypted)
result = ReadFileRemoteOperation(remotePath).execute(nextcloudClient)
assertEquals(true, result.resultData.isEncrypted)
}

private fun remoteFilesEqual(
a: RemoteFile,
b: RemoteFile
): Boolean =
a.remotePath == b.remotePath &&
a.mimeType == b.mimeType &&
a.length == b.length &&
a.creationTimestamp == b.creationTimestamp &&
a.modifiedTimestamp == b.modifiedTimestamp &&
a.uploadTimestamp == b.uploadTimestamp &&
a.etag == b.etag &&
a.permissions == b.permissions &&
a.localId == b.localId &&
a.remoteId == b.remoteId &&
a.size == b.size &&
a.isFavorite == b.isFavorite &&
a.isEncrypted == b.isEncrypted &&
a.mountType == b.mountType &&
a.ownerId == b.ownerId &&
a.ownerDisplayName == b.ownerDisplayName &&
a.unreadCommentsCount == b.unreadCommentsCount &&
a.isHasPreview == b.isHasPreview &&
a.note == b.note &&
a.sharees.contentEquals(b.sharees) &&
a.richWorkspace == b.richWorkspace &&
a.isLocked == b.isLocked &&
a.lockType == b.lockType &&
a.lockOwner == b.lockOwner &&
a.lockOwnerDisplayName == b.lockOwnerDisplayName &&
a.lockTimestamp == b.lockTimestamp &&
a.lockOwnerEditor == b.lockOwnerEditor &&
a.lockTimeout == b.lockTimeout &&
a.lockToken == b.lockToken &&
a.tags.contentEquals(b.tags) &&
a.imageDimension == b.imageDimension &&
a.geoLocation == b.geoLocation &&
a.hidden == b.hidden &&
a.livePhoto == b.livePhoto &&
a.fileDownloadLimit == b.fileDownloadLimit
}
Loading
Loading