Skip to content

Commit 7736bb5

Browse files
committed
Code refactoring and unit test for PhotoAlbumEntry
1 parent 1f6de6f commit 7736bb5

4 files changed

Lines changed: 85 additions & 37 deletions

File tree

library/src/main/java/com/owncloud/android/lib/common/utils/WebDavFileUtils.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import org.apache.jackrabbit.webdav.MultiStatusResponse;
1919

2020
import java.util.ArrayList;
21+
import java.util.Collections;
22+
import java.util.List;
2123

2224
/**
2325
* WebDav helper.
@@ -72,19 +74,23 @@ public ArrayList<RemoteFile> readData(MultiStatus remoteData,
7274
* retrieved.
7375
* @return
7476
*/
75-
public ArrayList<RemoteFile> readAlbumData(MultiStatus remoteData, OwnCloudClient client) {
76-
String url = client.getBaseUri() + "/remote.php/dav/photos/" + client.getUserId();
77+
public List<RemoteFile> readAlbumData(MultiStatus remoteData, OwnCloudClient client) {
78+
String baseUrl = client.getBaseUri() + "/remote.php/dav/photos/" + client.getUserId();
79+
String encodedPath = Uri.parse(baseUrl).getEncodedPath();
80+
if (encodedPath == null) {
81+
return Collections.emptyList();
82+
}
7783

78-
ArrayList<RemoteFile> mFolderAndFiles = new ArrayList<>();
84+
List<RemoteFile> files = new ArrayList<>();
85+
final var responses = remoteData.getResponses();
7986

80-
// loop to update every child
8187
// reading from 1 as 0th item will be just the root album path
82-
for (int i = 1; i < remoteData.getResponses().length; ++i) {
83-
/// new OCFile instance with the data from the server
84-
WebdavEntry we = new WebdavEntry(remoteData.getResponses()[i], Uri.parse(url).getEncodedPath());
85-
RemoteFile remoteFile = new RemoteFile(we);
86-
mFolderAndFiles.add(remoteFile);
88+
for (int i = 1; i < responses.length; i++) {
89+
WebdavEntry entry = new WebdavEntry(responses[i], encodedPath);
90+
RemoteFile remoteFile = new RemoteFile(entry);
91+
files.add(remoteFile);
8792
}
88-
return mFolderAndFiles;
93+
94+
return files;
8995
}
9096
}

library/src/main/java/com/owncloud/android/lib/resources/albums/PhotoAlbumEntry.kt

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -66,41 +66,26 @@ class PhotoAlbumEntry(response: MultiStatusResponse) {
6666

6767
val albumName: String
6868
get() {
69-
var href = href
70-
if (href.isEmpty()) {
71-
return ""
72-
}
73-
74-
// Remove trailing slash if present
75-
if (href.endsWith("/")) {
76-
href = href.substring(0, href.length - 1)
77-
}
78-
79-
// Split and return last part
80-
val parts = href.split("/".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
81-
return if (parts.isNotEmpty()) parts[parts.size - 1] else ""
69+
return href
70+
.removeSuffix("/")
71+
.substringAfterLast("/")
72+
.takeIf { it.isNotEmpty() } ?: ""
8273
}
8374

8475
val createdDate: String
8576
get() {
86-
val jsonRange = dateRange
8777
val currentDate = Date(System.currentTimeMillis())
88-
if (jsonRange.isNullOrEmpty()) {
89-
return dateFormat.format(currentDate)
90-
}
9178

92-
try {
93-
val obj = JSONObject(jsonRange)
79+
return try {
80+
val obj = JSONObject(dateRange ?: return dateFormat.format(currentDate))
9481
val startTimestamp = obj.optLong("start", 0)
95-
96-
if (startTimestamp > 0) {
97-
val date = Date(startTimestamp * 1000L) // Convert to milliseconds
98-
return dateFormat.format(date)
99-
}
82+
if (startTimestamp > 0)
83+
dateFormat.format(Date(startTimestamp * 1000L))
84+
else
85+
dateFormat.format(currentDate)
10086
} catch (e: JSONException) {
10187
e.printStackTrace()
102-
return dateFormat.format(currentDate)
88+
dateFormat.format(currentDate)
10389
}
104-
return dateFormat.format(currentDate)
10590
}
10691
}

library/src/main/java/com/owncloud/android/lib/resources/albums/ReadAlbumItemsRemoteOperation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ protected RemoteOperationResult<List<RemoteFile>> run(OwnCloudClient client) {
5757
if (isSuccess) {
5858
// get data from remote folder
5959
MultiStatus dataInServer = query.getResponseBodyAsMultiStatus();
60-
ArrayList<RemoteFile> mFolderAndFiles = new WebDavFileUtils().readAlbumData(dataInServer, client);
60+
List<RemoteFile> mFolderAndFiles = new WebDavFileUtils().readAlbumData(dataInServer, client);
6161

6262
// Result of the operation
6363
result = new RemoteOperationResult<>(true, query);
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Nextcloud Android Library
3+
*
4+
* SPDX-FileCopyrightText: 2025 TSI-mc <surinder.kumar@t-systems.com>
5+
* SPDX-License-Identifier: AGPL-3.0-or-later
6+
*/
7+
8+
package com.owncloud.android.lib.resources.albums
9+
10+
import org.apache.jackrabbit.webdav.MultiStatusResponse
11+
import org.junit.Assert.assertEquals
12+
import org.junit.Test
13+
14+
class PhotoAlbumEntryTest {
15+
16+
@Test
17+
fun testAlbumName_withTrailingSlash() {
18+
val entry = createTestEntry("/remote.php/dav/photos/user_id/albums/vacation2024/")
19+
assertEquals("vacation2024", entry.albumName)
20+
}
21+
22+
@Test
23+
fun testAlbumName_withoutTrailingSlash() {
24+
val entry = createTestEntry("/remote.php/dav/photos/user_id/albums/vacation2024")
25+
assertEquals("vacation2024", entry.albumName)
26+
}
27+
28+
@Test
29+
fun testAlbumName_nestedPath() {
30+
val entry = createTestEntry("/remote.php/dav/photos/user_id/albums/travel/europe/")
31+
assertEquals("europe", entry.albumName)
32+
}
33+
34+
@Test
35+
fun testAlbumName_singleSlash() {
36+
val entry = createTestEntry("/")
37+
assertEquals("", entry.albumName)
38+
}
39+
40+
@Test
41+
fun testAlbumName_onlySlashes() {
42+
val entry = createTestEntry("///")
43+
assertEquals("", entry.albumName)
44+
}
45+
46+
@Test
47+
fun testAlbumName_noSlash() {
48+
val entry = createTestEntry("holiday")
49+
assertEquals("holiday", entry.albumName)
50+
}
51+
52+
// Helper method to create a stub entry
53+
private fun createTestEntry(href: String): PhotoAlbumEntry {
54+
val response = MultiStatusResponse(href, 200)
55+
return PhotoAlbumEntry(response)
56+
}
57+
}

0 commit comments

Comments
 (0)