You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2021/01/05 04:55:44 UTC
[james-project] 05/24: JAMES-3486 MemoryMailboxChangeRepository
getSinceState should not include delegated changes
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 47ee6467ebb525d9b80d5bb3dea83ac642e7e80a
Author: LanKhuat <dl...@linagora.com>
AuthorDate: Mon Dec 28 11:00:11 2020 +0700
JAMES-3486 MemoryMailboxChangeRepository getSinceState should not include delegated changes
---
.../change/MemoryMailboxChangeRepository.java | 1 +
.../change/MailboxChangeRepositoryContract.java | 48 ++++++++++++++++++++++
.../memory/MemoryMailboxChangesMethodTest.java | 7 ----
3 files changed, 49 insertions(+), 7 deletions(-)
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
index 6dc9105..efcc22a 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
@@ -61,6 +61,7 @@ public class MemoryMailboxChangeRepository implements MailboxChangeRepository {
if (state.equals(State.INITIAL)) {
return Flux.fromIterable(mailboxChangeMap.get(accountId))
+ .filter(Predicate.not(MailboxChange::isDelegated))
.sort(Comparator.comparing(MailboxChange::getDate))
.collect(new MailboxChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
}
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
index 4034849..fc895a8 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
@@ -281,6 +281,54 @@ public interface MailboxChangeRepositoryContract {
}
@Test
+ default void getSinceStateFromInitialShouldNotIncludeDeletegatedChanges() {
+ MailboxChangeRepository repository = mailboxChangeRepository();
+ State.Factory stateFactory = stateFactory();
+ State referenceState = stateFactory.generate();
+
+ MailboxId id1 = generateNewMailboxId();
+ MailboxId id2 = generateNewMailboxId();
+ MailboxId id3 = generateNewMailboxId();
+ MailboxId id4 = generateNewMailboxId();
+
+ MailboxChange change1 = MailboxChange.builder().accountId(ACCOUNT_ID).state(referenceState).date(DATE.minusHours(3)).isCountChange(false).created(ImmutableList.of(id1)).build();
+ MailboxChange change2 = MailboxChange.builder().accountId(ACCOUNT_ID).state(stateFactory.generate()).date(DATE.minusHours(2)).isCountChange(false).created(ImmutableList.of(id2)).build();
+ MailboxChange change3 = MailboxChange.builder().accountId(ACCOUNT_ID).state(stateFactory.generate()).date(DATE.minusHours(1)).isCountChange(false).delegated(true).created(ImmutableList.of(id3)).build();
+ MailboxChange change4 = MailboxChange.builder().accountId(ACCOUNT_ID).state(stateFactory.generate()).date(DATE).isCountChange(false).delegated(true).created(ImmutableList.of(id4)).build();
+ repository.save(change1).block();
+ repository.save(change2).block();
+ repository.save(change3).block();
+ repository.save(change4).block();
+
+ assertThat(repository.getSinceState(ACCOUNT_ID, State.INITIAL, Optional.empty()).block().getCreated())
+ .containsExactlyInAnyOrder(id1, id2);
+ }
+
+ @Test
+ default void getSinceStateWithDelegationFromInitialShouldIncludeDeletegatedChanges() {
+ MailboxChangeRepository repository = mailboxChangeRepository();
+ State.Factory stateFactory = stateFactory();
+ State referenceState = stateFactory.generate();
+
+ MailboxId id1 = generateNewMailboxId();
+ MailboxId id2 = generateNewMailboxId();
+ MailboxId id3 = generateNewMailboxId();
+ MailboxId id4 = generateNewMailboxId();
+
+ MailboxChange change1 = MailboxChange.builder().accountId(ACCOUNT_ID).state(referenceState).date(DATE.minusHours(3)).isCountChange(false).created(ImmutableList.of(id1)).build();
+ MailboxChange change2 = MailboxChange.builder().accountId(ACCOUNT_ID).state(stateFactory.generate()).date(DATE.minusHours(2)).isCountChange(false).created(ImmutableList.of(id2)).build();
+ MailboxChange change3 = MailboxChange.builder().accountId(ACCOUNT_ID).state(stateFactory.generate()).date(DATE.minusHours(1)).isCountChange(false).delegated(true).created(ImmutableList.of(id3)).build();
+ MailboxChange change4 = MailboxChange.builder().accountId(ACCOUNT_ID).state(stateFactory.generate()).date(DATE).isCountChange(false).delegated(true).created(ImmutableList.of(id4)).build();
+ repository.save(change1).block();
+ repository.save(change2).block();
+ repository.save(change3).block();
+ repository.save(change4).block();
+
+ assertThat(repository.getSinceStateWithDelegation(ACCOUNT_ID, State.INITIAL, Optional.empty()).block().getCreated())
+ .containsExactlyInAnyOrder(id1, id2, id3, id4);
+ }
+
+ @Test
default void getChangesShouldLimitChangesWhenMaxChangesOmitted() {
MailboxChangeRepository repository = mailboxChangeRepository();
State.Factory stateFactory = stateFactory();
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
index df68a52..b01641a 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
@@ -26,8 +26,6 @@ import org.apache.james.JamesServerBuilder;
import org.apache.james.JamesServerExtension;
import org.apache.james.jmap.api.change.State;
import org.apache.james.jmap.rfc8621.contract.MailboxChangesMethodContract;
-import org.apache.james.mailbox.inmemory.InMemoryId;
-import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.modules.TestJMAPServerModule;
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -44,9 +42,4 @@ public class MemoryMailboxChangesMethodTest implements MailboxChangesMethodContr
public State.Factory stateFactory() {
return new State.DefaultFactory();
}
-
- @Override
- public MailboxId generateMailboxId() {
- return InMemoryId.of(0);
- }
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org