From 8a042314736b37a1d143dbb7f6e92d7f205254cb Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 6 Oct 2020 14:24:15 +0200 Subject: [PATCH 01/18] move responses models into module folder --- .../lib/resources/status/GetRemoteCapabilitiesOperation.kt | 4 ++-- .../{response => status/responses}/CapabilityResponse.kt | 2 +- .../{response => status/responses}/CommonOcsResponse.kt | 2 +- .../android/lib/resources/users/GetRemoteUserInfoOperation.kt | 4 ++-- .../{response => users/responses}/UserInfoResponse.kt | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) rename owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/{response => status/responses}/CapabilityResponse.kt (99%) rename owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/{response => status/responses}/CommonOcsResponse.kt (96%) rename owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/{response => users/responses}/UserInfoResponse.kt (96%) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteCapabilitiesOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteCapabilitiesOperation.kt index f9f164eb..3117494b 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteCapabilitiesOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteCapabilitiesOperation.kt @@ -34,8 +34,8 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.GetMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK -import com.owncloud.android.lib.resources.response.CapabilityResponse -import com.owncloud.android.lib.resources.response.CommonOcsResponse +import com.owncloud.android.lib.resources.status.responses.CapabilityResponse +import com.owncloud.android.lib.resources.status.responses.CommonOcsResponse import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi import com.squareup.moshi.Types diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/CapabilityResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/responses/CapabilityResponse.kt similarity index 99% rename from owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/CapabilityResponse.kt rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/responses/CapabilityResponse.kt index 49efaea9..dea2431e 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/CapabilityResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/responses/CapabilityResponse.kt @@ -22,7 +22,7 @@ * THE SOFTWARE. * */ -package com.owncloud.android.lib.resources.response +package com.owncloud.android.lib.resources.status.responses import com.owncloud.android.lib.resources.status.RemoteCapability import com.owncloud.android.lib.resources.status.RemoteCapability.CapabilityBooleanType diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/CommonOcsResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/responses/CommonOcsResponse.kt similarity index 96% rename from owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/CommonOcsResponse.kt rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/responses/CommonOcsResponse.kt index d8402eb9..491db0d1 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/CommonOcsResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/responses/CommonOcsResponse.kt @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.owncloud.android.lib.resources.response +package com.owncloud.android.lib.resources.status.responses import com.squareup.moshi.JsonClass diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.kt index 53600d29..07e6c95c 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.kt @@ -29,8 +29,8 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.GetMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode -import com.owncloud.android.lib.resources.response.CommonOcsResponse -import com.owncloud.android.lib.resources.response.UserInfoResponse +import com.owncloud.android.lib.resources.status.responses.CommonOcsResponse +import com.owncloud.android.lib.resources.users.responses.UserInfoResponse import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi import com.squareup.moshi.Types diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/UserInfoResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/responses/UserInfoResponse.kt similarity index 96% rename from owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/UserInfoResponse.kt rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/responses/UserInfoResponse.kt index 1ff3b94e..0371e50f 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/response/UserInfoResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/responses/UserInfoResponse.kt @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.owncloud.android.lib.resources.response +package com.owncloud.android.lib.resources.users.responses import com.owncloud.android.lib.resources.users.RemoteUserInfo import com.squareup.moshi.Json From 4f72f93f8b7af0661fe3682b3e2bf62ff48a244e Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 6 Oct 2020 15:30:24 +0200 Subject: [PATCH 02/18] clean run method by braking down into small functions --- .../shares/GetRemoteShareesOperation.kt | 140 ++++++++++-------- 1 file changed, 79 insertions(+), 61 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt index e3432b5b..8033de0a 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt @@ -28,12 +28,14 @@ package com.owncloud.android.lib.resources.shares +import android.net.Uri import com.owncloud.android.lib.common.OwnCloudClient import com.owncloud.android.lib.common.http.HttpConstants import com.owncloud.android.lib.common.http.methods.nonwebdav.GetMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK +import org.json.JSONArray import org.json.JSONObject import timber.log.Timber import java.net.URL @@ -80,78 +82,94 @@ class GetRemoteShareesOperation (private val searchString: String, private val page: Int, private val perPage: Int) : RemoteOperation>() { + private fun buildRequestUri(baseUri: Uri) = + baseUri.buildUpon() + .appendEncodedPath(OCS_ROUTE) + .appendQueryParameter(PARAM_FORMAT, VALUE_FORMAT) + .appendQueryParameter(PARAM_ITEM_TYPE, VALUE_ITEM_TYPE) + .appendQueryParameter(PARAM_SEARCH, searchString) + .appendQueryParameter(PARAM_PAGE, page.toString()) + .appendQueryParameter(PARAM_PER_PAGE, perPage.toString()) + .build() + + private fun parseResponse(response: String): Array { + val respJSON = JSONObject(response) + val respOCS = respJSON.getJSONObject(NODE_OCS) + val respData = respOCS.getJSONObject(NODE_DATA) + val respExact = respData.getJSONObject(NODE_EXACT) + val respExactUsers = respExact.getJSONArray(NODE_USERS) + val respExactGroups = respExact.getJSONArray(NODE_GROUPS) + val respExactRemotes = respExact.getJSONArray(NODE_REMOTES) + val respPartialUsers = respData.getJSONArray(NODE_USERS) + val respPartialGroups = respData.getJSONArray(NODE_GROUPS) + val respPartialRemotes = respData.getJSONArray(NODE_REMOTES) + return arrayOf( + respExactUsers, + respExactGroups, + respExactRemotes, + respPartialUsers, + respPartialGroups, + respPartialRemotes + ) + } + + private fun onResultUnsuccessful( + method: GetMethod, + response: String?, + status: Int + ): RemoteOperationResult> { + Timber.e("Failed response while getting users/groups from the server ") + if (response != null) { + Timber.e("*** status code: $status; response message: $response") + } else { + Timber.e("*** status code: $status") + } + return RemoteOperationResult(method) + } + + private fun flattenResultData(jsonResults: Array):ArrayList { + val data = ArrayList() // For result data + for (i in 0..jsonResults.size) { + for (j in 0 until jsonResults[i].length()) { + val jsonResult = jsonResults[i].getJSONObject(j) + data.add(jsonResult) + Timber.d("*** Added item: ${jsonResult.getString(PROPERTY_LABEL)}") + } + } + return data + } + + private fun onRequestSuccessful(response: String?): RemoteOperationResult> { + Timber.d("Successful response: $response") + + // Parse the response + val jsonResults = parseResponse(response!!) + + Timber.d("*** Get Users or groups completed ") + val result = RemoteOperationResult>(OK) + result.data = flattenResultData(jsonResults) + return result + } + override fun run(client: OwnCloudClient): RemoteOperationResult> { - var result: RemoteOperationResult> + val requestUri = buildRequestUri(client.baseUri) - try { - val requestUri = client.baseUri - val uriBuilder = requestUri.buildUpon() - .appendEncodedPath(OCS_ROUTE) - .appendQueryParameter(PARAM_FORMAT, VALUE_FORMAT) - .appendQueryParameter(PARAM_ITEM_TYPE, VALUE_ITEM_TYPE) - .appendQueryParameter(PARAM_SEARCH, searchString) - .appendQueryParameter(PARAM_PAGE, page.toString()) - .appendQueryParameter(PARAM_PER_PAGE, perPage.toString()) - - val getMethod = GetMethod(URL(uriBuilder.build().toString())) - - getMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE) + val getMethod = GetMethod(URL(requestUri.toString())) + getMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE) + return try { val status = client.executeHttpMethod(getMethod) val response = getMethod.getResponseBodyAsString() - if (isSuccess(status)) { - Timber.d("Successful response: $response") - - // Parse the response - val respJSON = JSONObject(response) - val respOCS = respJSON.getJSONObject(NODE_OCS) - val respData = respOCS.getJSONObject(NODE_DATA) - val respExact = respData.getJSONObject(NODE_EXACT) - val respExactUsers = respExact.getJSONArray(NODE_USERS) - val respExactGroups = respExact.getJSONArray(NODE_GROUPS) - val respExactRemotes = respExact.getJSONArray(NODE_REMOTES) - val respPartialUsers = respData.getJSONArray(NODE_USERS) - val respPartialGroups = respData.getJSONArray(NODE_GROUPS) - val respPartialRemotes = respData.getJSONArray(NODE_REMOTES) - val jsonResults = arrayOf( - respExactUsers, - respExactGroups, - respExactRemotes, - respPartialUsers, - respPartialGroups, - respPartialRemotes - ) - - val data = ArrayList() // For result data - for (i in 0..5) { - for (j in 0 until jsonResults[i].length()) { - val jsonResult = jsonResults[i].getJSONObject(j) - data.add(jsonResult) - Timber.d("*** Added item: ${jsonResult.getString(PROPERTY_LABEL)}") - } - } - - result = RemoteOperationResult(OK) - result.data = data - - Timber.d("*** Get Users or groups completed ") - + if (!isSuccess(status)) { + onResultUnsuccessful(getMethod, response, status) } else { - result = RemoteOperationResult(getMethod) - Timber.e("Failed response while getting users/groups from the server ") - if (response != null) { - Timber.e("*** status code: $status; response message: $response") - } else { - Timber.e("*** status code: $status") - } + onRequestSuccessful(response) } } catch (e: Exception) { - result = RemoteOperationResult(e) Timber.e(e, "Exception while getting users/groups") + RemoteOperationResult(e) } - - return result } private fun isSuccess(status: Int) = status == HttpConstants.HTTP_OK From 9f1c20b418f416e449318f4c89d35f41b1b36e83 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Thu, 8 Oct 2020 15:17:28 +0200 Subject: [PATCH 03/18] add Sharee response model --- .../responses => }/CommonOcsResponse.kt | 2 +- .../shares/responses/ShareeResponse.kt | 91 +++++++++++++++++++ .../status/GetRemoteCapabilitiesOperation.kt | 2 +- .../users/GetRemoteUserInfoOperation.kt | 2 +- 4 files changed, 94 insertions(+), 3 deletions(-) rename owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/{status/responses => }/CommonOcsResponse.kt (96%) create mode 100644 owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/responses/CommonOcsResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/CommonOcsResponse.kt similarity index 96% rename from owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/responses/CommonOcsResponse.kt rename to owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/CommonOcsResponse.kt index 491db0d1..2cfbe2ed 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/responses/CommonOcsResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/CommonOcsResponse.kt @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package com.owncloud.android.lib.resources.status.responses +package com.owncloud.android.lib.resources import com.squareup.moshi.JsonClass diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt new file mode 100644 index 00000000..19f19728 --- /dev/null +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt @@ -0,0 +1,91 @@ +/* ownCloud Android Library is available under MIT license + * + * Copyright (C) 2020 ownCloud GmbH. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.owncloud.android.lib.resources.shares.responses + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +/** + * This was modeled according to the documentation: + * https://doc.owncloud.com/server/developer_manual/core/apis/ocs-recipient-api.html#get-shares-recipients + */ +@JsonClass(generateAdapter = true) +data class ShareeOcsResponse( + @Json(name = "data") + val data: ShareeResponseData?, + @Json(name = "meta") + val meta: ShareeMeta? +) + +@JsonClass(generateAdapter = true) +data class ShareeResponseData( + @Json(name = "exact") + val exact: ExactSharees?, + @Json(name = "groups") + val groups: List?, + @Json(name = "remotes") + val remotes: List?, + @Json(name = "users") + val users: List? +) + +@JsonClass(generateAdapter = true) +data class ExactSharees( + @Json(name = "groups") + val groups: List?, + @Json(name = "remotes") + val remotes: List?, + @Json(name = "users") + val users: List? +) + +@JsonClass(generateAdapter = true) +data class ShareeItem( + @Json(name = "label") + val label: String?, + @Json(name = "value") + val value: ShareeValue? +) + +@JsonClass(generateAdapter = true) +data class ShareeValue( + @Json(name = "shareType") + val shareType: Int?, + @Json(name = "shareWith") + val shareWith: String? +) + +@JsonClass(generateAdapter = true) +data class ShareeMeta( + @Json(name = "itemsperpage") + val itemsPerPage: Int?, + @Json(name = "message") + val message: String?, + @Json(name = "status") + val status: String?, + @Json(name = "statuscode") + val statusCode: Int?, + @Json(name = "totalitems") + val totalItems: Int? +) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteCapabilitiesOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteCapabilitiesOperation.kt index 3117494b..806440be 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteCapabilitiesOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/status/GetRemoteCapabilitiesOperation.kt @@ -35,7 +35,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK import com.owncloud.android.lib.resources.status.responses.CapabilityResponse -import com.owncloud.android.lib.resources.status.responses.CommonOcsResponse +import com.owncloud.android.lib.resources.CommonOcsResponse import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi import com.squareup.moshi.Types diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.kt index 07e6c95c..d1f2a43c 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/users/GetRemoteUserInfoOperation.kt @@ -29,7 +29,7 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.GetMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode -import com.owncloud.android.lib.resources.status.responses.CommonOcsResponse +import com.owncloud.android.lib.resources.CommonOcsResponse import com.owncloud.android.lib.resources.users.responses.UserInfoResponse import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi From 6bdb2badca6b5f6a7e5419f4abc91e4690a43176 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Thu, 24 Sep 2020 12:27:25 +0200 Subject: [PATCH 04/18] add support for tests --- gradle.properties | 3 ++- owncloudComLibrary/build.gradle | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 946d709d..5c0bd337 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,4 @@ android.enableJetifier=true android.useAndroidX=true -org.gradle.jvmargs=-Xmx1536M \ No newline at end of file +org.gradle.jvmargs=-Xmx1536M +android.enableUnitTestBinaryResources=true diff --git a/owncloudComLibrary/build.gradle b/owncloudComLibrary/build.gradle index 6db1f790..2ac7adea 100644 --- a/owncloudComLibrary/build.gradle +++ b/owncloudComLibrary/build.gradle @@ -14,6 +14,14 @@ dependencies { exclude module: "kotlin-reflect" } kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshiVersion" + + testImplementation 'junit:junit:4.13' + testImplementation 'org.robolectric:robolectric:4.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test:core:1.3.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test:rules:1.3.0' } android { @@ -40,4 +48,10 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + + testOptions { + unitTests { + includeAndroidResources = true + } + } } From 1c08a942d116c3ada6c41019f9b212c6a6c5ef80 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Thu, 8 Oct 2020 15:57:03 +0200 Subject: [PATCH 05/18] test model --- .../lib/resources/CommonOcsResponse.kt | 10 +- .../shares/responses/ShareeResponse.kt | 22 --- .../android/lib/ShareeResponseTest.kt | 134 ++++++++++++++++++ 3 files changed, 142 insertions(+), 24 deletions(-) create mode 100644 owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/CommonOcsResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/CommonOcsResponse.kt index 2cfbe2ed..7a37dc82 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/CommonOcsResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/CommonOcsResponse.kt @@ -23,6 +23,7 @@ */ package com.owncloud.android.lib.resources +import com.squareup.moshi.Json import com.squareup.moshi.JsonClass // Response retrieved by OCS Rest API, used to obtain capabilities, shares and user info among others. @@ -41,6 +42,11 @@ data class OCSResponse( @JsonClass(generateAdapter = true) data class MetaData( val status: String, - val statuscode: Int, - val message: String? + @Json(name = "statuscode") + val statusCode: Int, + val message: String?, + @Json(name = "itemsperpage") + val itemsPerPage: String?, + @Json(name = "totalitems") + val totalItems: String? ) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt index 19f19728..fe3ed67c 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt @@ -32,14 +32,6 @@ import com.squareup.moshi.JsonClass */ @JsonClass(generateAdapter = true) data class ShareeOcsResponse( - @Json(name = "data") - val data: ShareeResponseData?, - @Json(name = "meta") - val meta: ShareeMeta? -) - -@JsonClass(generateAdapter = true) -data class ShareeResponseData( @Json(name = "exact") val exact: ExactSharees?, @Json(name = "groups") @@ -75,17 +67,3 @@ data class ShareeValue( @Json(name = "shareWith") val shareWith: String? ) - -@JsonClass(generateAdapter = true) -data class ShareeMeta( - @Json(name = "itemsperpage") - val itemsPerPage: Int?, - @Json(name = "message") - val message: String?, - @Json(name = "status") - val status: String?, - @Json(name = "statuscode") - val statusCode: Int?, - @Json(name = "totalitems") - val totalItems: Int? -) diff --git a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt new file mode 100644 index 00000000..4248018a --- /dev/null +++ b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt @@ -0,0 +1,134 @@ +package com.owncloud.android.lib + +import com.owncloud.android.lib.resources.CommonOcsResponse +import com.owncloud.android.lib.resources.shares.responses.ShareeOcsResponse +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.Moshi +import com.squareup.moshi.Types +import junit.framework.Assert.assertEquals +import junit.framework.Assert.assertTrue +import org.junit.Assert.assertNotEquals +import org.junit.Before +import org.junit.Test +import java.lang.reflect.Type + +class ShareeResponseTest { + + var response: CommonOcsResponse? = null + + @Before + fun prepare() { + val moshi = Moshi.Builder().build() + val type: Type = Types.newParameterizedType(CommonOcsResponse::class.java, ShareeOcsResponse::class.java) + val adapter: JsonAdapter> = moshi.adapter(type) + response = adapter.fromJson(EXAMPLE_RESPONSE) + } + + @Test + fun `check structure - ok - contains meta`() { + assertEquals("OK", response?.ocs?.meta?.message!!) + assertEquals(200, response?.ocs?.meta?.statusCode!!) + assertEquals("ok", response?.ocs?.meta?.status!!) + assertTrue(response?.ocs?.meta?.itemsPerPage?.isEmpty()!!) + assertTrue(response?.ocs?.meta?.totalItems?.isEmpty()!!) + } + + @Test + fun `check structure - ok - contains exact`() { + assertNotEquals(null, response?.ocs?.data?.exact) + } + + @Test + fun `check structure - ok - contains groups`() { + assertNotEquals(null, response?.ocs?.data?.groups) + } + + @Test + fun `check structure - ok - contains remotes`() { + assertNotEquals(null, response?.ocs?.data?.remotes) + } + + @Test + fun `check structure - ok - contains users`() { + assertNotEquals(null, response?.ocs?.data?.users) + } + + @Test + fun `check structure - ok - groups contains two items`() { + assertEquals(2, response?.ocs?.data?.groups?.size) + } + + @Test + fun `check structure - ok - users contains two items`() { + assertEquals(2, response?.ocs?.data?.users?.size) + } + + @Test + fun `check structure - ok - exact_users contains one item`() { + assertEquals(1, response?.ocs?.data?.exact?.users?.size) + } + + companion object { + val EXAMPLE_RESPONSE = """ +{ + "ocs": { + "data": { + "exact": { + "groups": [], + "remotes": [], + "users": [ + { + "label": "admin", + "value": { + "shareType": 0, + "shareWith": "admin" + } + } + ] + }, + "groups": [ + { + "label": "group1", + "value": { + "shareType": 1, + "shareWith": "group1" + } + }, + { + "label": "group2", + "value": { + "shareType": 1, + "shareWith": "group2" + } + } + ], + "remotes": [], + "users": [ + { + "label": "user1", + "value": { + "shareType": 0, + "shareWith": "user1" + } + }, + { + "label": "user2", + "value": { + "shareType": 0, + "shareWith": "user2" + } + } + ] + }, + "meta": { + "itemsperpage": "", + "message": "OK", + "status": "ok", + "statuscode": 200, + "totalitems": "" + } + } +} + """ + } +} \ No newline at end of file From b86638412efe3e75cccd8bb6e3b02c31276ef375 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Thu, 8 Oct 2020 16:10:20 +0200 Subject: [PATCH 06/18] update GetRemoteShareesOperation to use moshi --- .../shares/GetRemoteShareesOperation.kt | 52 ++++++------------- 1 file changed, 17 insertions(+), 35 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt index 8033de0a..b91e4ef8 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt @@ -35,9 +35,15 @@ import com.owncloud.android.lib.common.http.methods.nonwebdav.GetMethod import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK +import com.owncloud.android.lib.resources.CommonOcsResponse +import com.owncloud.android.lib.resources.shares.responses.ShareeOcsResponse +import com.squareup.moshi.JsonAdapter +import com.squareup.moshi.Moshi +import com.squareup.moshi.Types import org.json.JSONArray import org.json.JSONObject import timber.log.Timber +import java.lang.reflect.Type import java.net.URL import java.util.ArrayList @@ -80,7 +86,7 @@ class GetRemoteShareesOperation * @param perPage maximum number of results in a single page */ (private val searchString: String, private val page: Int, private val perPage: Int) : - RemoteOperation>() { + RemoteOperation() { private fun buildRequestUri(baseUri: Uri) = baseUri.buildUpon() @@ -92,32 +98,18 @@ class GetRemoteShareesOperation .appendQueryParameter(PARAM_PER_PAGE, perPage.toString()) .build() - private fun parseResponse(response: String): Array { - val respJSON = JSONObject(response) - val respOCS = respJSON.getJSONObject(NODE_OCS) - val respData = respOCS.getJSONObject(NODE_DATA) - val respExact = respData.getJSONObject(NODE_EXACT) - val respExactUsers = respExact.getJSONArray(NODE_USERS) - val respExactGroups = respExact.getJSONArray(NODE_GROUPS) - val respExactRemotes = respExact.getJSONArray(NODE_REMOTES) - val respPartialUsers = respData.getJSONArray(NODE_USERS) - val respPartialGroups = respData.getJSONArray(NODE_GROUPS) - val respPartialRemotes = respData.getJSONArray(NODE_REMOTES) - return arrayOf( - respExactUsers, - respExactGroups, - respExactRemotes, - respPartialUsers, - respPartialGroups, - respPartialRemotes - ) + private fun parseResponse(response: String): ShareeOcsResponse? { + val moshi = Moshi.Builder().build() + val type: Type = Types.newParameterizedType(CommonOcsResponse::class.java, ShareeOcsResponse::class.java) + val adapter: JsonAdapter> = moshi.adapter(type) + return adapter.fromJson(response)!!.ocs.data } private fun onResultUnsuccessful( method: GetMethod, response: String?, status: Int - ): RemoteOperationResult> { + ): RemoteOperationResult { Timber.e("Failed response while getting users/groups from the server ") if (response != null) { Timber.e("*** status code: $status; response message: $response") @@ -139,19 +131,15 @@ class GetRemoteShareesOperation return data } - private fun onRequestSuccessful(response: String?): RemoteOperationResult> { + private fun onRequestSuccessful(response: String?): RemoteOperationResult { + val result = RemoteOperationResult(OK) Timber.d("Successful response: $response") - - // Parse the response - val jsonResults = parseResponse(response!!) - + result.data = parseResponse(response!!) Timber.d("*** Get Users or groups completed ") - val result = RemoteOperationResult>(OK) - result.data = flattenResultData(jsonResults) return result } - override fun run(client: OwnCloudClient): RemoteOperationResult> { + override fun run(client: OwnCloudClient): RemoteOperationResult { val requestUri = buildRequestUri(client.baseUri) val getMethod = GetMethod(URL(requestUri.toString())) @@ -191,12 +179,6 @@ class GetRemoteShareesOperation private const val VALUE_ITEM_TYPE = "file" // to get the server search for users / groups // JSON Node names - private const val NODE_OCS = "ocs" - private const val NODE_DATA = "data" - private const val NODE_EXACT = "exact" - private const val NODE_USERS = "users" - private const val NODE_GROUPS = "groups" - private const val NODE_REMOTES = "remotes" const val NODE_VALUE = "value" const val PROPERTY_LABEL = "label" const val PROPERTY_SHARE_TYPE = "shareType" From fe425c80836ad8bf34734108ecf3926871c7b380 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 13 Oct 2020 11:05:53 +0200 Subject: [PATCH 07/18] update shareeservice to use ShareeOcsResponse --- .../lib/resources/shares/GetRemoteShareesOperation.kt | 2 ++ .../android/lib/resources/shares/services/ShareeService.kt | 6 +++--- .../shares/services/implementation/OCShareeService.kt | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt index b91e4ef8..6fb57223 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt @@ -1,5 +1,6 @@ /* ownCloud Android Library is available under MIT license * + * @author Christian Schabesberger * @author masensio * @author David A. Velasco * @author David González Verdugo @@ -73,6 +74,7 @@ import java.util.ArrayList * Status codes: * 100 - successful * + * @author Christian Schabesberger * @author masensio * @author David A. Velasco * @author David González Verdugo diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/ShareeService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/ShareeService.kt index ab6d9e83..95983ec5 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/ShareeService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/ShareeService.kt @@ -1,6 +1,7 @@ /** * ownCloud Android client application * + * @author Christian Schabesberger * @author David González Verdugo * * Copyright (C) 2020 ownCloud GmbH. @@ -22,13 +23,12 @@ package com.owncloud.android.lib.resources.shares.services import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.resources.Service -import org.json.JSONObject -import java.util.ArrayList +import com.owncloud.android.lib.resources.shares.responses.ShareeOcsResponse interface ShareeService : Service { fun getSharees( searchString: String, page: Int, perPage: Int - ): RemoteOperationResult> + ): RemoteOperationResult } diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareeService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareeService.kt index 370ef34b..1ba7e0cb 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareeService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareeService.kt @@ -23,6 +23,7 @@ package com.owncloud.android.lib.resources.shares.services.implementation import com.owncloud.android.lib.common.OwnCloudClient import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.resources.shares.GetRemoteShareesOperation +import com.owncloud.android.lib.resources.shares.responses.ShareeOcsResponse import com.owncloud.android.lib.resources.shares.services.ShareeService import org.json.JSONObject import java.util.ArrayList @@ -33,7 +34,7 @@ class OCShareeService(override val client: OwnCloudClient) : searchString: String, page: Int, perPage: Int - ): RemoteOperationResult> = + ): RemoteOperationResult = GetRemoteShareesOperation( searchString, page, From 7402c89a18ae8f08401ffa5d9b65d98c4c178f8d Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 13 Oct 2020 11:21:37 +0200 Subject: [PATCH 08/18] get flat representation from ShareeOcsResponse --- .../shares/responses/ShareeResponse.kt | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt index fe3ed67c..ab779eac 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt @@ -40,7 +40,23 @@ data class ShareeOcsResponse( val remotes: List?, @Json(name = "users") val users: List? -) +) { + fun getFlatRepresentation() + = ArrayList().apply { + if(exact != null) { + addAll(exact.getFlatRepresentation()) + } + if(users != null) { + addAll(users) + } + if(remotes != null) { + addAll(remotes) + } + if(groups != null) { + addAll(groups) + } + } +} @JsonClass(generateAdapter = true) data class ExactSharees( @@ -50,7 +66,20 @@ data class ExactSharees( val remotes: List?, @Json(name = "users") val users: List? -) +) { + fun getFlatRepresentation() + = ArrayList().apply { + if(users != null) { + addAll(users) + } + if(remotes != null) { + addAll(remotes) + } + if(groups != null) { + addAll(groups) + } + } +} @JsonClass(generateAdapter = true) data class ShareeItem( From 26def4fbe254f7297de891d27a5c56049f4f9b28 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 13 Oct 2020 14:25:15 +0200 Subject: [PATCH 09/18] return sharees without exact match --- .../android/lib/resources/shares/responses/ShareeResponse.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt index ab779eac..b084b206 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt @@ -41,11 +41,8 @@ data class ShareeOcsResponse( @Json(name = "users") val users: List? ) { - fun getFlatRepresentation() + fun getFlatRepresentationWithoutExact() = ArrayList().apply { - if(exact != null) { - addAll(exact.getFlatRepresentation()) - } if(users != null) { addAll(users) } From 90b6ff52f2b175c461964a2e0103bc6122cce04c Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 13 Oct 2020 14:44:15 +0200 Subject: [PATCH 10/18] add aditional data field to ocs sharees --- .../resources/shares/responses/ShareeResponse.kt | 4 +++- .../com/owncloud/android/lib/ShareeResponseTest.kt | 13 ++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt index b084b206..ca7b8e67 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt @@ -91,5 +91,7 @@ data class ShareeValue( @Json(name = "shareType") val shareType: Int?, @Json(name = "shareWith") - val shareWith: String? + val shareWith: String?, + @Json(name ="shareWithAdditionalInfo") + val additionalInfo: String? ) diff --git a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt index 4248018a..a1646b67 100644 --- a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt +++ b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt @@ -68,6 +68,16 @@ class ShareeResponseTest { assertEquals(1, response?.ocs?.data?.exact?.users?.size) } + @Test + fun `check structure - ok - user1 contains additional data`() { + assertEquals("user1@user1.com", response?.ocs?.data?.users?.get(0)?.value?.additionalInfo) + } + + @Test + fun `check structure - ok - user2 does not contain additional data`() { + assertEquals(null, response!!.ocs.data.users!![1].value!!.additionalInfo) + } + companion object { val EXAMPLE_RESPONSE = """ { @@ -108,7 +118,8 @@ class ShareeResponseTest { "label": "user1", "value": { "shareType": 0, - "shareWith": "user1" + "shareWith": "user1", + "shareWithAdditionalInfo": "user1@user1.com" } }, { From 34bf83df30cc4311dfcfe0e6440ce4399db4384b Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 13 Oct 2020 15:23:59 +0200 Subject: [PATCH 11/18] make sharee parts non null that can't be null --- .../shares/responses/ShareeResponse.kt | 52 +++++++------------ 1 file changed, 19 insertions(+), 33 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt index ca7b8e67..f372747e 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt @@ -35,63 +35,49 @@ data class ShareeOcsResponse( @Json(name = "exact") val exact: ExactSharees?, @Json(name = "groups") - val groups: List?, + val groups: List, @Json(name = "remotes") - val remotes: List?, + val remotes: List, @Json(name = "users") - val users: List? + val users: List ) { - fun getFlatRepresentationWithoutExact() - = ArrayList().apply { - if(users != null) { - addAll(users) - } - if(remotes != null) { - addAll(remotes) - } - if(groups != null) { - addAll(groups) - } + fun getFlatRepresentationWithoutExact() = ArrayList().apply { + addAll(users) + addAll(remotes) + addAll(groups) } } @JsonClass(generateAdapter = true) data class ExactSharees( @Json(name = "groups") - val groups: List?, + val groups: List, @Json(name = "remotes") - val remotes: List?, + val remotes: List, @Json(name = "users") - val users: List? + val users: List ) { - fun getFlatRepresentation() - = ArrayList().apply { - if(users != null) { - addAll(users) - } - if(remotes != null) { - addAll(remotes) - } - if(groups != null) { - addAll(groups) - } + fun getFlatRepresentation() = ArrayList().apply { + addAll(users) + addAll(remotes) + addAll(groups) } } @JsonClass(generateAdapter = true) data class ShareeItem( @Json(name = "label") - val label: String?, + val label: String, @Json(name = "value") - val value: ShareeValue? + val value: ShareeValue ) @JsonClass(generateAdapter = true) data class ShareeValue( @Json(name = "shareType") - val shareType: Int?, + val shareType: Int, @Json(name = "shareWith") - val shareWith: String?, - @Json(name ="shareWithAdditionalInfo") + val shareWith: String, + @Json(name = "shareWithAdditionalInfo") val additionalInfo: String? ) From 29de5aba34267439806c6a445d6db00cac4123ec Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Wed, 14 Oct 2020 11:11:46 +0200 Subject: [PATCH 12/18] disable unitTestBinaryResource as its deprecated --- gradle.properties | 1 - 1 file changed, 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5c0bd337..53ae0ae4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,3 @@ android.enableJetifier=true android.useAndroidX=true org.gradle.jvmargs=-Xmx1536M -android.enableUnitTestBinaryResources=true From db478efedc6c9725c49d69cfdbc1be9ee204080f Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Wed, 14 Oct 2020 13:04:03 +0200 Subject: [PATCH 13/18] refactor ShareType --- .../android/lib/resources/shares/RemoteShare.kt | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt index 20bb1ae9..ac33ff81 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt @@ -106,17 +106,7 @@ enum class ShareType constructor(val value: Int) { FEDERATED(6); companion object { - fun fromValue(value: Int): ShareType? { - return when (value) { - -1 -> UNKNOWN - 0 -> USER - 1 -> GROUP - 3 -> PUBLIC_LINK - 4 -> EMAIL - 5 -> CONTACT - 6 -> FEDERATED - else -> null - } - } + private val values = values(); + fun fromValue(value: Int) = values.firstOrNull { it.value == value } } } From 76c55c9a9c6c140a156f0ba0184a8dda3ed52586 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Mon, 19 Oct 2020 15:10:41 +0200 Subject: [PATCH 14/18] add changes according to review --- owncloudComLibrary/build.gradle | 12 ------- .../shares/GetRemoteShareesOperation.kt | 12 ------- .../shares/responses/ShareeResponse.kt | 11 ------- .../shares/responses}/ShareeResponseTest.kt | 31 ++++++++++++++++--- 4 files changed, 27 insertions(+), 39 deletions(-) rename owncloudComLibrary/src/test/java/com/owncloud/android/lib/{ => resources/shares/responses}/ShareeResponseTest.kt (75%) diff --git a/owncloudComLibrary/build.gradle b/owncloudComLibrary/build.gradle index 2ac7adea..5537f94e 100644 --- a/owncloudComLibrary/build.gradle +++ b/owncloudComLibrary/build.gradle @@ -16,12 +16,6 @@ dependencies { kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshiVersion" testImplementation 'junit:junit:4.13' - testImplementation 'org.robolectric:robolectric:4.3' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - androidTestImplementation 'androidx.test:runner:1.3.0' - androidTestImplementation 'androidx.test:core:1.3.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.2' - androidTestImplementation 'androidx.test:rules:1.3.0' } android { @@ -48,10 +42,4 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } - - testOptions { - unitTests { - includeAndroidResources = true - } - } } diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt index 6fb57223..91271f0a 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt @@ -121,18 +121,6 @@ class GetRemoteShareesOperation return RemoteOperationResult(method) } - private fun flattenResultData(jsonResults: Array):ArrayList { - val data = ArrayList() // For result data - for (i in 0..jsonResults.size) { - for (j in 0 until jsonResults[i].length()) { - val jsonResult = jsonResults[i].getJSONObject(j) - data.add(jsonResult) - Timber.d("*** Added item: ${jsonResult.getString(PROPERTY_LABEL)}") - } - } - return data - } - private fun onRequestSuccessful(response: String?): RemoteOperationResult { val result = RemoteOperationResult(OK) Timber.d("Successful response: $response") diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt index f372747e..0cd0162a 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponse.kt @@ -32,13 +32,9 @@ import com.squareup.moshi.JsonClass */ @JsonClass(generateAdapter = true) data class ShareeOcsResponse( - @Json(name = "exact") val exact: ExactSharees?, - @Json(name = "groups") val groups: List, - @Json(name = "remotes") val remotes: List, - @Json(name = "users") val users: List ) { fun getFlatRepresentationWithoutExact() = ArrayList().apply { @@ -50,11 +46,8 @@ data class ShareeOcsResponse( @JsonClass(generateAdapter = true) data class ExactSharees( - @Json(name = "groups") val groups: List, - @Json(name = "remotes") val remotes: List, - @Json(name = "users") val users: List ) { fun getFlatRepresentation() = ArrayList().apply { @@ -66,17 +59,13 @@ data class ExactSharees( @JsonClass(generateAdapter = true) data class ShareeItem( - @Json(name = "label") val label: String, - @Json(name = "value") val value: ShareeValue ) @JsonClass(generateAdapter = true) data class ShareeValue( - @Json(name = "shareType") val shareType: Int, - @Json(name = "shareWith") val shareWith: String, @Json(name = "shareWithAdditionalInfo") val additionalInfo: String? diff --git a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt similarity index 75% rename from owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt rename to owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt index a1646b67..5c27f8ad 100644 --- a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/ShareeResponseTest.kt +++ b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt @@ -1,12 +1,35 @@ -package com.owncloud.android.lib +/* ownCloud Android Library is available under MIT license + * Copyright (C) 2020 ownCloud GmbH. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + */ + +package com.owncloud.android.lib.resources.shares.responses import com.owncloud.android.lib.resources.CommonOcsResponse -import com.owncloud.android.lib.resources.shares.responses.ShareeOcsResponse import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi import com.squareup.moshi.Types -import junit.framework.Assert.assertEquals -import junit.framework.Assert.assertTrue +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue import org.junit.Assert.assertNotEquals import org.junit.Before import org.junit.Test From 6ec1bd2bb278c2b39abbc5ef5797dbc6ff8ce05c Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 20 Oct 2020 14:08:39 +0200 Subject: [PATCH 15/18] move response json to resource folder --- .../shares/GetRemoteShareesOperation.kt | 3 - .../lib/resources/shares/RemoteShare.kt | 1 - .../implementation/OCShareeService.kt | 2 - .../shares/responses/ShareeResponseTest.kt | 112 ++++++------------ .../empty_sharee_response.json | 21 ++++ .../example_sharee_response.json | 60 ++++++++++ 6 files changed, 114 insertions(+), 85 deletions(-) create mode 100644 owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/empty_sharee_response.json create mode 100644 owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/example_sharee_response.json diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt index 91271f0a..29875361 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt @@ -41,12 +41,9 @@ import com.owncloud.android.lib.resources.shares.responses.ShareeOcsResponse import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi import com.squareup.moshi.Types -import org.json.JSONArray -import org.json.JSONObject import timber.log.Timber import java.lang.reflect.Type import java.net.URL -import java.util.ArrayList /** * Created by masensio on 08/10/2015. diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt index ac33ff81..f63f6503 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt @@ -24,7 +24,6 @@ package com.owncloud.android.lib.resources.shares -import com.owncloud.android.lib.resources.files.FileUtils import java.io.File /** diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareeService.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareeService.kt index 1ba7e0cb..9cb014f3 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareeService.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/services/implementation/OCShareeService.kt @@ -25,8 +25,6 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.resources.shares.GetRemoteShareesOperation import com.owncloud.android.lib.resources.shares.responses.ShareeOcsResponse import com.owncloud.android.lib.resources.shares.services.ShareeService -import org.json.JSONObject -import java.util.ArrayList class OCShareeService(override val client: OwnCloudClient) : ShareeService { diff --git a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt index 5c27f8ad..65afe4d9 100644 --- a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt +++ b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt @@ -29,140 +29,94 @@ import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi import com.squareup.moshi.Types import org.junit.Assert.assertEquals -import org.junit.Assert.assertTrue import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test +import java.io.File import java.lang.reflect.Type class ShareeResponseTest { - var response: CommonOcsResponse? = null + lateinit var response: CommonOcsResponse + + private fun loadResponses(fileName: String, adapter: JsonAdapter>) = + adapter.fromJson(File(fileName).readText()) @Before fun prepare() { val moshi = Moshi.Builder().build() val type: Type = Types.newParameterizedType(CommonOcsResponse::class.java, ShareeOcsResponse::class.java) val adapter: JsonAdapter> = moshi.adapter(type) - response = adapter.fromJson(EXAMPLE_RESPONSE) + response = loadResponses(EXAMPLE_RESPONSE_JSON, adapter)!! } @Test fun `check structure - ok - contains meta`() { - assertEquals("OK", response?.ocs?.meta?.message!!) - assertEquals(200, response?.ocs?.meta?.statusCode!!) - assertEquals("ok", response?.ocs?.meta?.status!!) - assertTrue(response?.ocs?.meta?.itemsPerPage?.isEmpty()!!) - assertTrue(response?.ocs?.meta?.totalItems?.isEmpty()!!) + assertEquals("OK", response.ocs.meta.message!!) + assertEquals(200, response.ocs.meta.statusCode!!) + assertEquals("ok", response.ocs.meta.status!!) + assertTrue(response.ocs.meta.itemsPerPage?.isEmpty()!!) + assertTrue(response.ocs.meta.totalItems?.isEmpty()!!) } @Test fun `check structure - ok - contains exact`() { - assertNotEquals(null, response?.ocs?.data?.exact) + assertNotEquals(null, response.ocs.data.exact) } @Test fun `check structure - ok - contains groups`() { - assertNotEquals(null, response?.ocs?.data?.groups) + assertNotEquals(null, response.ocs.data.groups) } @Test fun `check structure - ok - contains remotes`() { - assertNotEquals(null, response?.ocs?.data?.remotes) + assertNotEquals(null, response.ocs.data.remotes) } @Test fun `check structure - ok - contains users`() { - assertNotEquals(null, response?.ocs?.data?.users) + assertNotEquals(null, response.ocs.data.users) } @Test fun `check structure - ok - groups contains two items`() { - assertEquals(2, response?.ocs?.data?.groups?.size) + assertEquals(2, response.ocs.data.groups.size) } @Test fun `check structure - ok - users contains two items`() { - assertEquals(2, response?.ocs?.data?.users?.size) + assertEquals(2, response.ocs.data.users.size) } @Test fun `check structure - ok - exact_users contains one item`() { - assertEquals(1, response?.ocs?.data?.exact?.users?.size) + assertEquals(1, response.ocs.data.exact?.users?.size) } @Test fun `check structure - ok - user1 contains additional data`() { - assertEquals("user1@user1.com", response?.ocs?.data?.users?.get(0)?.value?.additionalInfo) + assertEquals("user1@user1.com", response.ocs.data.users.get(0).value.additionalInfo) } @Test fun `check structure - ok - user2 does not contain additional data`() { - assertEquals(null, response!!.ocs.data.users!![1].value!!.additionalInfo) + assertEquals(null, response.ocs.data.users[1].value.additionalInfo) + } + + @Test + fun `check empty response - ok - parsing ok`() { + val moshi = Moshi.Builder().build() + val type: Type = Types.newParameterizedType(CommonOcsResponse::class.java, ShareeOcsResponse::class.java) + val adapter: JsonAdapter> = moshi.adapter(type) + loadResponses(EMPTY_RESPONSE_JSON, adapter)!! } companion object { - val EXAMPLE_RESPONSE = """ -{ - "ocs": { - "data": { - "exact": { - "groups": [], - "remotes": [], - "users": [ - { - "label": "admin", - "value": { - "shareType": 0, - "shareWith": "admin" - } - } - ] - }, - "groups": [ - { - "label": "group1", - "value": { - "shareType": 1, - "shareWith": "group1" - } - }, - { - "label": "group2", - "value": { - "shareType": 1, - "shareWith": "group2" - } - } - ], - "remotes": [], - "users": [ - { - "label": "user1", - "value": { - "shareType": 0, - "shareWith": "user1", - "shareWithAdditionalInfo": "user1@user1.com" - } - }, - { - "label": "user2", - "value": { - "shareType": 0, - "shareWith": "user2" - } - } - ] - }, - "meta": { - "itemsperpage": "", - "message": "OK", - "status": "ok", - "statuscode": 200, - "totalitems": "" - } - } -} - """ + val RESOURCES_PATH = + "/home/schabi/Projects/owncloud-android/owncloud-android-library/owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses" + val EXAMPLE_RESPONSE_JSON = "$RESOURCES_PATH/example_sharee_response.json" + val EMPTY_RESPONSE_JSON = "$RESOURCES_PATH/empty_sharee_response.json" } } \ No newline at end of file diff --git a/owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/empty_sharee_response.json b/owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/empty_sharee_response.json new file mode 100644 index 00000000..b74338d2 --- /dev/null +++ b/owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/empty_sharee_response.json @@ -0,0 +1,21 @@ +{ + "ocs": { + "meta": { + "status": "ok", + "statuscode": 100, + "message": "OK", + "totalitems": "", + "itemsperpage": "" + }, + "data": { + "exact": { + "users": [], + "groups": [], + "remotes": [] + }, + "users": [], + "groups": [], + "remotes": [] + } + } +} \ No newline at end of file diff --git a/owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/example_sharee_response.json b/owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/example_sharee_response.json new file mode 100644 index 00000000..fe988811 --- /dev/null +++ b/owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/example_sharee_response.json @@ -0,0 +1,60 @@ +{ + "ocs": { + "data": { + "exact": { + "groups": [], + "remotes": [], + "users": [ + { + "label": "admin", + "value": { + "shareType": 0, + "shareWith": "admin" + } + } + ] + }, + "groups": [ + { + "label": "group1", + "value": { + "shareType": 1, + "shareWith": "group1" + } + }, + { + "label": "group2", + "value": { + "shareType": 1, + "shareWith": "group2" + } + } + ], + "remotes": [], + "users": [ + { + "label": "user1", + "value": { + "shareType": 0, + "shareWith": "user1", + "shareWithAdditionalInfo": "user1@user1.com" + } + }, + { + "label": "user2", + "value": { + "shareType": 0, + "shareWith": "user2" + } + } + ] + }, + "meta": { + "itemsperpage": "", + "message": "OK", + "status": "ok", + "statuscode": 200, + "totalitems": "" + } + } +} \ No newline at end of file From 257494a9dcebb131c9b598db1cb4b0e716dc006c Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Wed, 21 Oct 2020 14:11:32 +0200 Subject: [PATCH 16/18] apply suggested changes delete unused const values bla --- .../lib/resources/shares/GetRemoteShareesOperation.kt | 7 ------- .../owncloud/android/lib/resources/shares/RemoteShare.kt | 3 +-- .../lib/resources/shares/responses/ShareeResponseTest.kt | 8 +++++++- .../empty_sharee_response.json | 0 .../example_sharee_response.json | 0 5 files changed, 8 insertions(+), 10 deletions(-) rename owncloudComLibrary/src/test/{resources => responses}/com.owncloud.android.lib.resources.sharees.responses/empty_sharee_response.json (100%) rename owncloudComLibrary/src/test/{resources => responses}/com.owncloud.android.lib.resources.sharees.responses/example_sharee_response.json (100%) diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt index 29875361..546bf05b 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.kt @@ -164,12 +164,5 @@ class GetRemoteShareesOperation // Arguments - constant values private const val VALUE_FORMAT = "json" private const val VALUE_ITEM_TYPE = "file" // to get the server search for users / groups - - // JSON Node names - const val NODE_VALUE = "value" - const val PROPERTY_LABEL = "label" - const val PROPERTY_SHARE_TYPE = "shareType" - const val PROPERTY_SHARE_WITH = "shareWith" - const val PROPERTY_SHARE_WITH_ADDITIONAL_INFO = "shareWithAdditionalInfo" } } diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt index f63f6503..21e3835b 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/RemoteShare.kt @@ -105,7 +105,6 @@ enum class ShareType constructor(val value: Int) { FEDERATED(6); companion object { - private val values = values(); - fun fromValue(value: Int) = values.firstOrNull { it.value == value } + fun fromValue(value: Int) = values().firstOrNull { it.value == value } } } diff --git a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt index 65afe4d9..5bd48cf0 100644 --- a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt +++ b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt @@ -51,6 +51,12 @@ class ShareeResponseTest { response = loadResponses(EXAMPLE_RESPONSE_JSON, adapter)!! } + @Test + fun `check structure - ok - example response files exist`() { + val file = File(EXAMPLE_RESPONSE_JSON) + assertTrue(file.exists()) + } + @Test fun `check structure - ok - contains meta`() { assertEquals("OK", response.ocs.meta.message!!) @@ -115,7 +121,7 @@ class ShareeResponseTest { companion object { val RESOURCES_PATH = - "/home/schabi/Projects/owncloud-android/owncloud-android-library/owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses" + "src/test/responses/com.owncloud.android.lib.resources.sharees.responses" val EXAMPLE_RESPONSE_JSON = "$RESOURCES_PATH/example_sharee_response.json" val EMPTY_RESPONSE_JSON = "$RESOURCES_PATH/empty_sharee_response.json" } diff --git a/owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/empty_sharee_response.json b/owncloudComLibrary/src/test/responses/com.owncloud.android.lib.resources.sharees.responses/empty_sharee_response.json similarity index 100% rename from owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/empty_sharee_response.json rename to owncloudComLibrary/src/test/responses/com.owncloud.android.lib.resources.sharees.responses/empty_sharee_response.json diff --git a/owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/example_sharee_response.json b/owncloudComLibrary/src/test/responses/com.owncloud.android.lib.resources.sharees.responses/example_sharee_response.json similarity index 100% rename from owncloudComLibrary/src/test/resources/com.owncloud.android.lib.resources.sharees.responses/example_sharee_response.json rename to owncloudComLibrary/src/test/responses/com.owncloud.android.lib.resources.sharees.responses/example_sharee_response.json From ce9fc3f189f4f50e99a9224dd9ef914f5a49fc64 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Thu, 22 Oct 2020 12:40:48 +0200 Subject: [PATCH 17/18] apply changes acording to review --- .../shares/responses/ShareeResponseTest.kt | 51 +++++++++++-------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt index 5bd48cf0..7640e5f5 100644 --- a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt +++ b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt @@ -28,8 +28,9 @@ import com.owncloud.android.lib.resources.CommonOcsResponse import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi import com.squareup.moshi.Types +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertNull import org.junit.Assert.assertEquals -import org.junit.Assert.assertNotEquals import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test @@ -38,85 +39,91 @@ import java.lang.reflect.Type class ShareeResponseTest { - lateinit var response: CommonOcsResponse + lateinit var adapter: JsonAdapter> - private fun loadResponses(fileName: String, adapter: JsonAdapter>) = + private fun loadResponses(fileName: String) = adapter.fromJson(File(fileName).readText()) @Before fun prepare() { val moshi = Moshi.Builder().build() val type: Type = Types.newParameterizedType(CommonOcsResponse::class.java, ShareeOcsResponse::class.java) - val adapter: JsonAdapter> = moshi.adapter(type) - response = loadResponses(EXAMPLE_RESPONSE_JSON, adapter)!! - } - - @Test - fun `check structure - ok - example response files exist`() { - val file = File(EXAMPLE_RESPONSE_JSON) - assertTrue(file.exists()) + adapter = moshi.adapter(type) } @Test fun `check structure - ok - contains meta`() { + val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! assertEquals("OK", response.ocs.meta.message!!) - assertEquals(200, response.ocs.meta.statusCode!!) - assertEquals("ok", response.ocs.meta.status!!) + assertEquals(200, response.ocs.meta.statusCode) + assertEquals("ok", response.ocs.meta.status) assertTrue(response.ocs.meta.itemsPerPage?.isEmpty()!!) assertTrue(response.ocs.meta.totalItems?.isEmpty()!!) } @Test fun `check structure - ok - contains exact`() { - assertNotEquals(null, response.ocs.data.exact) + val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! + assertNotNull(response.ocs.data.exact) } @Test fun `check structure - ok - contains groups`() { - assertNotEquals(null, response.ocs.data.groups) + val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! + assertNotNull(response.ocs.data.groups) } @Test fun `check structure - ok - contains remotes`() { - assertNotEquals(null, response.ocs.data.remotes) + val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! + assertNotNull(response.ocs.data.remotes) } @Test fun `check structure - ok - contains users`() { - assertNotEquals(null, response.ocs.data.users) + val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! + assertNotNull(response.ocs.data.users) } @Test fun `check structure - ok - groups contains two items`() { + val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! assertEquals(2, response.ocs.data.groups.size) } @Test fun `check structure - ok - users contains two items`() { + val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! assertEquals(2, response.ocs.data.users.size) } @Test fun `check structure - ok - exact_users contains one item`() { + val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! assertEquals(1, response.ocs.data.exact?.users?.size) } @Test fun `check structure - ok - user1 contains additional data`() { + val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! assertEquals("user1@user1.com", response.ocs.data.users.get(0).value.additionalInfo) } @Test fun `check structure - ok - user2 does not contain additional data`() { - assertEquals(null, response.ocs.data.users[1].value.additionalInfo) + val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! + assertNull(response.ocs.data.users[1].value.additionalInfo) } @Test fun `check empty response - ok - parsing ok`() { - val moshi = Moshi.Builder().build() - val type: Type = Types.newParameterizedType(CommonOcsResponse::class.java, ShareeOcsResponse::class.java) - val adapter: JsonAdapter> = moshi.adapter(type) - loadResponses(EMPTY_RESPONSE_JSON, adapter)!! + val response = loadResponses(EMPTY_RESPONSE_JSON)!! + assertTrue(response.ocs.data.exact?.groups?.isEmpty()!!) + assertTrue(response.ocs.data.exact?.remotes?.isEmpty()!!) + assertTrue(response.ocs.data.exact?.users?.isEmpty()!!) + assertTrue(response.ocs.data.groups.isEmpty()) + assertTrue(response.ocs.data.remotes.isEmpty()) + assertTrue(response.ocs.data.users.isEmpty()) } companion object { From 68b88775e6e844e150a8f4ec35c616a657c0a354 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Thu, 22 Oct 2020 13:05:50 +0200 Subject: [PATCH 18/18] apply changes acording to review --- .../shares/responses/ShareeResponseTest.kt | 50 ++----------------- 1 file changed, 4 insertions(+), 46 deletions(-) diff --git a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt index 7640e5f5..ee88839d 100644 --- a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt +++ b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/resources/shares/responses/ShareeResponseTest.kt @@ -28,7 +28,6 @@ import com.owncloud.android.lib.resources.CommonOcsResponse import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi import com.squareup.moshi.Types -import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue @@ -62,56 +61,15 @@ class ShareeResponseTest { } @Test - fun `check structure - ok - contains exact`() { - val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! - assertNotNull(response.ocs.data.exact) - } - - @Test - fun `check structure - ok - contains groups`() { - val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! - assertNotNull(response.ocs.data.groups) - } - - @Test - fun `check structure - ok - contains remotes`() { - val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! - assertNotNull(response.ocs.data.remotes) - } - - @Test - fun `check structure - ok - contains users`() { - val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! - assertNotNull(response.ocs.data.users) - } - - @Test - fun `check structure - ok - groups contains two items`() { + fun `example response - ok - correct sturcture`() { val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! assertEquals(2, response.ocs.data.groups.size) - } - - @Test - fun `check structure - ok - users contains two items`() { - val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! + assertEquals(0, response.ocs.data.remotes.size) assertEquals(2, response.ocs.data.users.size) - } - - @Test - fun `check structure - ok - exact_users contains one item`() { - val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! + assertEquals(0, response.ocs.data.exact?.groups?.size) + assertEquals(0, response.ocs.data.exact?.remotes?.size) assertEquals(1, response.ocs.data.exact?.users?.size) - } - - @Test - fun `check structure - ok - user1 contains additional data`() { - val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! assertEquals("user1@user1.com", response.ocs.data.users.get(0).value.additionalInfo) - } - - @Test - fun `check structure - ok - user2 does not contain additional data`() { - val response = loadResponses(EXAMPLE_RESPONSE_JSON)!! assertNull(response.ocs.data.users[1].value.additionalInfo) }