You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/11/07 09:42:03 UTC
[james-project] branch master updated: JAMES-3830 Quota/get should support unlimited quotas (#1296)
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push:
new 895277f107 JAMES-3830 Quota/get should support unlimited quotas (#1296)
895277f107 is described below
commit 895277f1075c15581292b3e2a16846eba7560b0b
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Mon Nov 7 16:41:57 2022 +0700
JAMES-3830 Quota/get should support unlimited quotas (#1296)
---
.../rfc8621/contract/QuotaGetMethodContract.scala | 64 ++++++++++++++++++++++
.../scala/org/apache/james/jmap/mail/Quotas.scala | 2 +
2 files changed, 66 insertions(+)
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaGetMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaGetMethodContract.scala
index 3d0687a5f8..c567979687 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaGetMethodContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaGetMethodContract.scala
@@ -185,6 +185,70 @@ trait QuotaGetMethodContract {
|""".stripMargin)
}
+ @Test
+ def quotaGetShouldFilterOutUnlimitedQuota(server: GuiceJamesServer): Unit = {
+ val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
+ val bobQuotaRoot = quotaProbe.getQuotaRoot(MailboxPath.inbox(BOB))
+ quotaProbe.setMaxMessageCount(bobQuotaRoot, QuotaCountLimit.count(100L))
+ quotaProbe.setMaxStorage(bobQuotaRoot, QuotaSizeLimit.unlimited())
+
+ val response = `given`
+ .body(
+ s"""{
+ | "using": [
+ | "urn:ietf:params:jmap:core",
+ | "urn:ietf:params:jmap:quota"],
+ | "methodCalls": [[
+ | "Quota/get",
+ | {
+ | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "ids": null
+ | },
+ | "c1"]]
+ |}""".stripMargin)
+ .when
+ .post
+ .`then`
+ .statusCode(SC_OK)
+ .contentType(JSON)
+ .extract
+ .body
+ .asString
+
+ assertThatJson(response)
+ .withOptions(new Options(IGNORING_ARRAY_ORDER))
+ .isEqualTo(
+ s"""{
+ | "sessionState": "${SESSION_STATE.value}",
+ | "methodResponses": [
+ | [
+ | "Quota/get",
+ | {
+ | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "notFound": [],
+ | "state": "84c40a2e-76a1-3f84-a1e8-862104c7a697",
+ | "list": [
+ | {
+ | "used": 0,
+ | "name": "#private&bob@domain.tld@domain.tld:account:count:Mail",
+ | "id": "08417be420b6dd6fa77d48fb2438e0d19108cd29424844bb109b52d356fab528",
+ | "dataTypes": [
+ | "Mail"
+ | ],
+ | "limit": 100,
+ | "warnLimit": 90,
+ | "resourceType": "count",
+ | "scope": "account"
+ | }
+ | ]
+ | },
+ | "c1"
+ | ]
+ | ]
+ |}
+ |""".stripMargin)
+ }
+
@Test
def quotaGetShouldReturnEmptyListWhenIdsAreEmpty(server: GuiceJamesServer): Unit = {
val quotaProbe = server.getProbe(classOf[QuotaProbesImpl])
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Quotas.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Quotas.scala
index f085bbd785..0442f37cdb 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Quotas.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Quotas.scala
@@ -90,6 +90,7 @@ object JmapQuota {
def extractUserMessageCountQuota(quota: ModelQuota[QuotaCountLimit, QuotaCountUsage], countQuotaIdPlaceHolder: Id, quotaRoot: ModelQuotaRoot): Option[JmapQuota] =
Option(quota.getLimitByScope.get(ModelQuota.Scope.User))
+ .filter(_.isLimited)
.map(limit => JmapQuota(
id = countQuotaIdPlaceHolder,
resourceType = CountResourceType,
@@ -102,6 +103,7 @@ object JmapQuota {
def extractUserMessageSizeQuota(quota: ModelQuota[QuotaSizeLimit, QuotaSizeUsage], sizeQuotaIdPlaceHolder: Id, quotaRoot: ModelQuotaRoot): Option[JmapQuota] =
Option(quota.getLimitByScope.get(ModelQuota.Scope.User))
+ .filter(_.isLimited)
.map(limit => JmapQuota(
id = sizeQuotaIdPlaceHolder,
resourceType = OctetsResourceType,
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org