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

Commit 57b720d4 authored by Nicolas Gelot's avatar Nicolas Gelot Committed by Vincent Bourgmayer
Browse files

Fix modified timestamp for chunk upload

parent bc96a33c
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -252,11 +252,12 @@ public class UploadFileOperation extends RemoteOperation {
    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
    @NonNull
    public RemoteOperationResult uploadChunkedFile(@NonNull final File file, @NonNull final OwnCloudClient client) {
        final String timeStamp = formatTimestampToMatchCloud(file.lastModified());
        final String mimeType = CommonUtils.getMimeType(file);
        final ChunkedFileUploadRemoteOperation uploadOperation = new ChunkedFileUploadRemoteOperation(syncedState.getLocalPath(),
                syncedState.getRemotePath(),
                mimeType, syncedState.getLastETAG(),
                syncedState.getLocalLastModified()+"", false);
                timeStamp, false);
        return uploadOperation.execute(client);
    }

@@ -305,7 +306,7 @@ public class UploadFileOperation extends RemoteOperation {
    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
    @NonNull
    public RemoteOperationResult<String> uploadFile(@NonNull final File file, @NonNull final OwnCloudClient client, boolean checkEtag) {
        final String timeStamp = ((Long) (file.lastModified() / 1000) ).toString();
        final String timeStamp = formatTimestampToMatchCloud(file.lastModified());
        final String eTag = checkEtag ? syncedState.getLastETAG() : null;

        final UploadFileRemoteOperation uploadOperation = new UploadFileRemoteOperation(syncedState.getLocalPath(),
@@ -334,4 +335,14 @@ public class UploadFileOperation extends RemoteOperation {
    public SyncedFileState getSyncedState() {
        return syncedState;
    }

    /**
     * Convert local file timestamp to the format expected by the cloud
     * On Android, file timestamp is a ms value, while nextcloud expect value in second
     * @return String timestamp in second
     */
    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
    public @NonNull String formatTimestampToMatchCloud(long timestamp) {
        return String.valueOf(timestamp/1000);
    }
}
 No newline at end of file
+26 −0
Original line number Diff line number Diff line
@@ -314,6 +314,32 @@ public class UploadFileOperationTest {
        assertTrue("Expected result for ifMatchETagRequired(client) is true but got: false", addIfMatchHeader);
    }

    @Test
    public void formatTimeStampToMatchCloud_validTimestamp() {
        final long initialTimestamp = 1683017095074L;
        final String expectedOutput = "1683017095";
        final SyncedFileState mockedSyncedState = Mockito.mock(SyncedFileState.class);
        final UploadFileOperation operationUnderTest = new UploadFileOperation(mockedSyncedState, account, context);

        final String output = operationUnderTest.formatTimestampToMatchCloud(initialTimestamp);
        assertNotNull("Output shouldn't be null", output);
        assertFalse("Output shouldn't not be empty.", output.isEmpty());
        assertEquals("Output doesn't match expectation.", expectedOutput, output);
    }

    @Test
    public void formatTimeStampToMatchCloud_invalidTimestamp() {
        final long initialTimestamp = 0;
        final String expectedOutput = "0";
        final SyncedFileState mockedSyncedState = Mockito.mock(SyncedFileState.class);
        final UploadFileOperation operationUnderTest = new UploadFileOperation(mockedSyncedState, account, context);

        final String output = operationUnderTest.formatTimestampToMatchCloud(initialTimestamp);
        assertNotNull("Output shouldn't be null", output);
        assertFalse("Output shouldn't not be empty.", output.isEmpty());
        assertEquals("Output doesn't match expectation.", expectedOutput, output);
    }

    private void mockUserInfoReading(UploadFileOperation instanceUnderTest) {
        final long userTotalQuota = 100;
        final long userUsedQuota = 50;