瀏覽代碼

randomize tests and fix some edge cases

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 6 月之前
父節點
當前提交
f54eb094d6

+ 10 - 37
app/src/androidTest/java/com/nextcloud/utils/AutoRenameTests.kt

@@ -26,7 +26,16 @@ class AutoRenameTests : AbstractOnServerIT() {
         testOnlyOnServer(NextcloudVersion.nextcloud_30)
 
         capability = capability.apply {
-            forbiddenFilenameExtensionJson = """[" ",".",".part",".part"]"""
+            forbiddenFilenameExtensionJson = listOf(
+                """[" ",".",".part",".part"]""",
+                """[".",".part",".part"," "]""",
+                """[".",".part"," ", ".part"]""",
+                """[".part"," ", ".part","."]""",
+                """[" ",".",".PART",".PART"]""",
+                """[".",".PART",".PART"," "]""",
+                """[".",".PART"," ", ".PART"]""",
+                """[".PART"," ", ".PART","."]"""
+            ).random()
             forbiddenFilenameCharactersJson = """["<", ">", ":", "\\\\", "/", "|", "?", "*", "&"]"""
         }
     }
@@ -55,18 +64,6 @@ class AutoRenameTests : AbstractOnServerIT() {
         assert(result == expectedFilename) { "Expected $expectedFilename but got $result" }
     }
 
-    @Test
-    fun testStartEndInvalidExtensionsIfSpaceCharInTheEnd() {
-        capability = capability.apply {
-            forbiddenFilenameExtensionJson = """[".",".part",".part"," "]"""
-        }
-
-        val filename = " .file.part "
-        val result = AutoRename.rename(filename, capability)
-        val expectedFilename = "_file_part"
-        assert(result == expectedFilename) { "Expected $expectedFilename but got $result" }
-    }
-
     @Test
     fun testStartEndInvalidExtensions() {
         val filename = " .file.part "
@@ -75,18 +72,6 @@ class AutoRenameTests : AbstractOnServerIT() {
         assert(result == expectedFilename) { "Expected $expectedFilename but got $result" }
     }
 
-    @Test
-    fun testStartInvalidExtensionIfSpaceCharInTheEnd() {
-        capability = capability.apply {
-            forbiddenFilenameExtensionJson = """[".",".part",".part"," "]"""
-        }
-
-        val filename = " .file.part"
-        val result = AutoRename.rename(filename, capability)
-        val expectedFilename = "_file_part"
-        assert(result == expectedFilename) { "Expected $expectedFilename but got $result" }
-    }
-
     @Test
     fun testStartInvalidExtension() {
         val filename = " .file.part"
@@ -95,18 +80,6 @@ class AutoRenameTests : AbstractOnServerIT() {
         assert(result == expectedFilename) { "Expected $expectedFilename but got $result" }
     }
 
-    @Test
-    fun testEndInvalidExtensionIfSpaceCharInTheEnd() {
-        capability = capability.apply {
-            forbiddenFilenameExtensionJson = """[".",".part",".part"," "]"""
-        }
-
-        val filename = ".file.part "
-        val result = AutoRename.rename(filename, capability)
-        val expectedFilename = "_file_part"
-        assert(result == expectedFilename) { "Expected $expectedFilename but got $result" }
-    }
-
     @Test
     fun testEndInvalidExtension() {
         val filename = ".file.part "

+ 27 - 13
app/src/main/java/com/nextcloud/utils/autoRename/AutoRename.kt

@@ -28,44 +28,48 @@ object AutoRename {
         val pathSegments = filename.split(OCFile.PATH_SEPARATOR).toMutableList()
 
         capability.run {
-            forbiddenFilenameCharactersJson?.let {
+            if (forbiddenFilenameCharactersJson != null) {
                 var forbiddenFilenameCharacters = capability.forbiddenFilenameCharacters()
+
                 if (isFolderPath) {
                     forbiddenFilenameCharacters = forbiddenFilenameCharacters.filter { it != OCFile.PATH_SEPARATOR }
                 }
 
                 pathSegments.replaceAll { segment ->
                     var modifiedSegment = segment
+
                     forbiddenFilenameCharacters.forEach { forbiddenChar ->
                         if (modifiedSegment.contains(forbiddenChar)) {
                             modifiedSegment = modifiedSegment.replace(forbiddenChar, REPLACEMENT)
                         }
                     }
+
                     modifiedSegment
                 }
             }
 
-            forbiddenFilenameExtensionJson?.let {
-                // First handle if space char exist
-                forbiddenFilenameExtensions().find { it == StringConstants.SPACE }?.let {
+            if (forbiddenFilenameExtensionJson != null) {
+                val forbiddenFilenameExtensions = forbiddenFilenameExtensions()
+
+                forbiddenFilenameExtensions.find { it == StringConstants.SPACE }?.let {
                     pathSegments.replaceAll { segment ->
                         segment.trim()
                     }
                 }
 
-                forbiddenFilenameExtensions().forEach { forbiddenExtension ->
+                forbiddenFilenameExtensions.find { it == StringConstants.DOT }?.let { forbiddenExtension ->
                     pathSegments.replaceAll { segment ->
-                        var modifiedSegment = segment
+                        replacePathSegment(forbiddenExtension, segment)
+                    }
+                }
 
-                        if (modifiedSegment.endsWith(forbiddenExtension, ignoreCase = true) ||
-                            modifiedSegment.startsWith(forbiddenExtension, ignoreCase = true)
-                        ) {
-                            modifiedSegment = modifiedSegment.replace(forbiddenExtension, REPLACEMENT)
+                forbiddenFilenameExtensions
+                    .filter { it != StringConstants.SPACE && it != StringConstants.DOT }
+                    .forEach { forbiddenExtension ->
+                        pathSegments.replaceAll { segment ->
+                            replacePathSegment(forbiddenExtension, segment)
                         }
-
-                        modifiedSegment
                     }
-                }
             }
         }
 
@@ -78,6 +82,16 @@ object AutoRename {
         }
     }
 
+    private fun replacePathSegment(forbiddenExtension: String, segment: String): String {
+        return if (segment.endsWith(forbiddenExtension, ignoreCase = true) ||
+            segment.startsWith(forbiddenExtension, ignoreCase = true)
+        ) {
+            segment.replace(forbiddenExtension, REPLACEMENT)
+        } else {
+            segment
+        }
+    }
+
     private fun convertToUTF8(filename: String): String {
         return String(filename.toByteArray(), Charsets.UTF_8)
     }