public AccessToken authenticate(String username) { return tokenByUser.computeIfAbsent(username, (user) -> { String password = passwordByUser.get(user); Preconditions.checkState(password != null, "unknown user " + user); return authenticateJamesUser(baseUri(mainStepdefs.jmapServer), user, password); }); }
default AccessToken accessTokenFor(GuiceJamesServer james, String user, String password) { return authenticateJamesUser(baseUri(james), user, password); }
@Test public void provisionMailboxesShouldSubscribeToThem() throws Exception { String token = authenticateJamesUser(baseUri(jmapServer), USER, PASSWORD).serialize(); with() .header("Authorization", token) .body("[[\"getMailboxes\", {}, \"#0\"]]") .post("/jmap"); assertThat(jmapServer.getProbe(MailboxProbeImpl.class) .listSubscriptions(USER)) .containsAll(DefaultMailboxes.DEFAULT_MAILBOXES); } }
@Test public void jmapVacationShouldHaveSupportForHtmlMail() throws Exception { // Given AccessToken user1AccessToken = authenticateJamesUser(baseUri(guiceJamesServer), USER_1, PASSWORD); AccessToken user2AccessToken = authenticateJamesUser(baseUri(guiceJamesServer), USER_2, PASSWORD); setHtmlVacationResponse(user1AccessToken); // When String user2OutboxId = getOutboxId(user2AccessToken); sendMail(user2AccessToken, user2OutboxId, "user|inbox|1"); // Then calmlyAwait.atMost(10, TimeUnit.SECONDS) .until(() -> isTextMessageReceived(user1AccessToken, getInboxId(user1AccessToken), ORIGINAL_MESSAGE_TEXT_BODY, USER_2, USER_1)); calmlyAwait.atMost(10, TimeUnit.SECONDS) .until(() -> assertOneMessageWithHtmlBodyReceived(user2AccessToken, getInboxId(user2AccessToken), HTML_REASON, USER_1, USER_2)); }
@Test public void jmapVacationShouldNotSendNotificationTwice() throws Exception { /* Test scenario : - User 1 benw@mydomain.tld sets a Vacation on its account - User 2 matthieu@mydomain.tld sends User 1 a mail - User 2 matthieu@mydomain.tld sends User 1 a second mail - User 1 should well receive this mail - User 2 should well receive only one notification about user 1 vacation */ // Given AccessToken user1AccessToken = authenticateJamesUser(baseUri(guiceJamesServer), USER_1, PASSWORD); AccessToken user2AccessToken = authenticateJamesUser(baseUri(guiceJamesServer), USER_2, PASSWORD); // User 1 benw@mydomain.tld sets a Vacation on its account setVacationResponse(user1AccessToken); // When // User 2 matthieu@mydomain.tld sends User 1 a mail String user2OutboxId = getOutboxId(user2AccessToken); sendMail(user2AccessToken, user2OutboxId, "user|inbox|1"); sendMail(user2AccessToken, user2OutboxId, "user|inbox|2"); // Then // User 2 should well receive a notification about user 1 vacation calmlyAwait.atMost(30, TimeUnit.SECONDS) .until(() -> isTextMessageReceived(user2AccessToken, getInboxId(user2AccessToken), REASON, USER_1, USER_2)); // User 2 should not receive another notification Thread.sleep(1000L); assertOneMessageReceived(user2AccessToken, getInboxId(user2AccessToken), REASON, USER_1, USER_2); }
@Before public void setup() throws Throwable { jmapServer = createJmapServer(); jmapServer.start(); mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class); dataProbe = jmapServer.getProbe(DataProbeImpl.class); aclProbe = jmapServer.getProbe(ACLProbeImpl.class); RestAssured.requestSpecification = jmapRequestSpecBuilder .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); dataProbe.addDomain(DOMAIN); dataProbe.addUser(ALICE, ALICE_PASSWORD); this.aliceAccessToken = authenticateJamesUser(baseUri(jmapServer), ALICE, ALICE_PASSWORD); dataProbe.addUser(BOB, BOB_PASSWORD); this.bobAccessToken = authenticateJamesUser(baseUri(jmapServer), BOB, BOB_PASSWORD); }
@Before public void setup() throws Throwable { jmapServer = createJmapServer(); jmapServer.start(); MailboxProbe mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class); DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class); RestAssured.requestSpecification = jmapRequestSpecBuilder .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); RestAssured.defaultParser = Parser.JSON; dataProbe.addDomain(DOMAIN); dataProbe.addUser(HOMER, PASSWORD); dataProbe.addUser(BART, BOB_PASSWORD); mailboxProbe.createMailbox("#private", HOMER, DefaultMailboxes.INBOX); homerAccessToken = authenticateJamesUser(baseUri(jmapServer), HOMER, PASSWORD); bartAccessToken = authenticateJamesUser(baseUri(jmapServer), BART, BOB_PASSWORD); }
@Before public void setup() throws Throwable { jmapServer = createJmapServer(); jmapServer.start(); MailboxProbe mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class); DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class); RestAssured.requestSpecification = jmapRequestSpecBuilder .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); RestAssured.defaultParser = Parser.JSON; dataProbe.addDomain(DOMAIN); dataProbe.addUser(HOMER, PASSWORD); dataProbe.addUser(BART, BOB_PASSWORD); mailboxProbe.createMailbox("#private", HOMER, DefaultMailboxes.INBOX); homerAccessToken = authenticateJamesUser(baseUri(jmapServer), HOMER, PASSWORD); bartAccessToken = authenticateJamesUser(baseUri(jmapServer), BART, BOB_PASSWORD); }
@Test public void jmapVacationShouldGenerateAReplyWhenActive() throws Exception { /* Test scenario : - User 1 benw@mydomain.tld sets a Vacation on its account - User 2 matthieu@mydomain.tld sends User 1 a mail - User 1 should well receive this mail - User 2 should well receive a notification about user 1 vacation */ // Given AccessToken user1AccessToken = authenticateJamesUser(baseUri(guiceJamesServer), USER_1, PASSWORD); AccessToken user2AccessToken = authenticateJamesUser(baseUri(guiceJamesServer), USER_2, PASSWORD); // User 1 benw@mydomain.tld sets a Vacation on its account setVacationResponse(user1AccessToken); // When // User 2 matthieu@mydomain.tld sends User 1 a mail String user2OutboxId = getOutboxId(user2AccessToken); sendMail(user2AccessToken, user2OutboxId, "user|inbox|1"); // Then // User 1 should well receive this mail calmlyAwait.atMost(30, TimeUnit.SECONDS) .until(() -> isTextMessageReceived(user1AccessToken, getInboxId(user1AccessToken), ORIGINAL_MESSAGE_TEXT_BODY, USER_2, USER_1)); // User 2 should well receive a notification about user 1 vacation calmlyAwait.atMost(30, TimeUnit.SECONDS) .until(() -> isTextMessageReceived(user2AccessToken, getInboxId(user2AccessToken), REASON, USER_1, USER_2)); }
@Test public void provisionMailboxesShouldNotDuplicateMailboxByName() throws Exception { String token = authenticateJamesUser(baseUri(jmapServer), USER, PASSWORD).serialize(); ConcurrentTestRunner.builder() .operation((a, b) -> with() .header("Authorization", token) .body("[[\"getMailboxes\", {}, \"#0\"]]") .post("/jmap")) .threadCount(10) .runSuccessfullyWithin(Duration.ofMinutes(1)); given() .header("Authorization", token) .body("[[\"getMailboxes\", {}, \"#0\"]]") .when() .post("/jmap") .then() .statusCode(200) .body(NAME, equalTo("mailboxes")) .body(ARGUMENTS + ".list", hasSize(6)) .body(ARGUMENTS + ".list.name", hasItems(DefaultMailboxes.DEFAULT_MAILBOXES.toArray())); }
@Before public void setup() throws Throwable { jmapServer = createJmapServer(); jmapServer.start(); RestAssured.requestSpecification = jmapRequestSpecBuilder .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class); dataProbe.addDomain(DOMAIN); dataProbe.addUser(ALICE, ALICE_PASSWORD); dataProbe.addUser(BOB, BOB_PASSWORD); accessToken = authenticateJamesUser(baseUri(jmapServer), ALICE, ALICE_PASSWORD); bobAccessToken = authenticateJamesUser(baseUri(jmapServer), BOB, BOB_PASSWORD); MailboxProbeImpl mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class); matchedMailbox = mailboxProbe.createMailbox(MailboxPath.forUser(ALICE, "matched")); inbox = mailboxProbe.createMailbox(MailboxPath.forUser(ALICE, INBOX)); }
@Test public void jmapVacationShouldGenerateAReplyEvenWhenNoText() throws Exception { // Given AccessToken user1AccessToken = authenticateJamesUser(baseUri(guiceJamesServer), USER_1, PASSWORD); AccessToken user2AccessToken = authenticateJamesUser(baseUri(guiceJamesServer), USER_2, PASSWORD); jmapGuiceProbe.modifyVacation( AccountId.fromString(USER_1), VacationPatch.builder() .isEnabled(true) .build()); // When String user2OutboxId = getOutboxId(user2AccessToken); sendMail(user2AccessToken, user2OutboxId, "user|inbox|1"); // Then // User 1 should well receive this mail calmlyAwait.atMost(30, TimeUnit.SECONDS) .until(() -> isTextMessageReceived(user1AccessToken, getInboxId(user1AccessToken), ORIGINAL_MESSAGE_TEXT_BODY, USER_2, USER_1)); // User 2 should well receive a notification about user 1 vacation calmlyAwait.atMost(30, TimeUnit.SECONDS) .until(() -> isTextMessageReceived(user2AccessToken, getInboxId(user2AccessToken), "", USER_1, USER_2)); }
@Before public void setup() throws Throwable { jmapServer = createJmapServer(); jmapServer.start(); jmapGuiceProbe = jmapServer.getProbe(JmapGuiceProbe.class); RestAssured.requestSpecification = jmapRequestSpecBuilder .setPort(jmapGuiceProbe.getJmapPort()) .build(); jmapServer.getProbe(DataProbeImpl.class) .fluent() .addDomain(DOMAIN) .addUser(USER, PASSWORD); accessToken = authenticateJamesUser(baseUri(jmapServer), USER, PASSWORD); }
@BeforeEach void setup(GuiceJamesServer server) throws Exception { server.getProbe(DataProbeImpl.class) .fluent() .addDomain(DOMAIN) .addUser(USERNAME, PASSWORD); RestAssured.requestSpecification = new RequestSpecBuilder() .setContentType(ContentType.JSON) .setAccept(ContentType.JSON) .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8))) .setPort(server.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); accessToken = authenticateJamesUser(baseUri(server), USERNAME, PASSWORD); timer = new Timer(); }
@Before public void setup() throws Throwable { fixedDateZonedDateTimeProvider = new FixedDateZonedDateTimeProvider(); fixedDateZonedDateTimeProvider.setFixedDateTime(DATE_2015); jmapServer = createJmapServer(fixedDateZonedDateTimeProvider); jmapServer.start(); jmapGuiceProbe = jmapServer.getProbe(JmapGuiceProbe.class); RestAssured.requestSpecification = jmapRequestSpecBuilder .setPort(jmapGuiceProbe.getJmapPort()) .build(); DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class); dataProbe.addDomain(DOMAIN); dataProbe.addUser(ALICE, ALICE_PASSWORD); accessToken = authenticateJamesUser(baseUri(jmapServer), ALICE, ALICE_PASSWORD); }
@Before public void setup() throws Throwable { jmapServer = createJmapServer(); jmapServer.start(); mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class); DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class); RestAssured.requestSpecification = jmapRequestSpecBuilder .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); username = "username@" + DOMAIN; String password = "password"; dataProbe.addDomain(DOMAIN); dataProbe.addUser(username, password); inboxId = mailboxProbe.createMailbox("#private", username, DefaultMailboxes.INBOX); accessToken = authenticateJamesUser(baseUri(jmapServer), username, password); }
@Before public void setup() throws Throwable { jmapServer = createJmapServer(); jmapServer.start(); mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class); dataProbe = jmapServer.getProbe(DataProbeImpl.class); messageProbe = jmapServer.getProbe(MessageIdProbe.class); aclProbe = jmapServer.getProbe(ACLProbeImpl.class); RestAssured.requestSpecification = new RequestSpecBuilder() .setContentType(ContentType.JSON) .setAccept(ContentType.JSON) .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8))) .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); RestAssured.defaultParser = Parser.JSON; dataProbe.addDomain(DOMAIN); dataProbe.addUser(USERNAME, PASSWORD); dataProbe.addUser(BOB, BOB_PASSWORD); mailboxProbe.createMailbox("#private", USERNAME, DefaultMailboxes.INBOX); accessToken = HttpJmapAuthentication.authenticateJamesUser(baseUri(jmapServer), USERNAME, PASSWORD); bobAccessToken = HttpJmapAuthentication.authenticateJamesUser(baseUri(jmapServer), BOB, BOB_PASSWORD); }
@Before public void setup() throws Throwable { jmapServer = createJmapServer(); jmapServer.start(); mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class); aclProbe = jmapServer.getProbe(ACLProbeImpl.class); quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class); RestAssured.requestSpecification = jmapRequestSpecBuilder .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class); dataProbe.addDomain(DOMAIN); dataProbe.addUser(ALICE, ALICE_PASSWORD); dataProbe.addUser(BOB, BOB_PASSWORD); accessToken = authenticateJamesUser(baseUri(jmapServer), ALICE, ALICE_PASSWORD); message = Message.Builder.of() .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build(); }
@Before public void setup() throws Throwable { jmapServer = createJmapServer(); jmapServer.start(); MailboxProbe mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class); DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class); RestAssured.requestSpecification = new RequestSpecBuilder() .setContentType(ContentType.JSON) .setAccept(ContentType.JSON) .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8))) .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); RestAssured.defaultParser = Parser.JSON; dataProbe.addDomain(DOMAIN); dataProbe.addUser(USERNAME, PASSWORD); dataProbe.addUser(BOB, BOB_PASSWORD); mailboxProbe.createMailbox("#private", USERNAME, DefaultMailboxes.INBOX); accessToken = HttpJmapAuthentication.authenticateJamesUser(baseUri(jmapServer), USERNAME, PASSWORD); }
@BeforeEach void setup(GuiceJamesServer server) throws Throwable { WebAdminGuiceProbe webAdminProbe = server.getProbe(WebAdminGuiceProbe.class); mailboxProbe = server.getProbe(MailboxProbeImpl.class); aclProbe = server.getProbe(ACLProbeImpl.class); RestAssured.requestSpecification = new RequestSpecBuilder() .setContentType(ContentType.JSON) .setAccept(ContentType.JSON) .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(StandardCharsets.UTF_8))) .setPort(server.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); webadminSpecification = WebAdminUtils.buildRequestSpecification(webAdminProbe.getWebAdminPort()) .build(); server.getProbe(DataProbeImpl.class).fluent() .addDomain(DOMAIN) .addUser(ALICE, ALICE_SECRET) .addUser(BOB, BOB_SECRET); accessToken = authenticateJamesUser(baseUri(server), ALICE, ALICE_SECRET); session = Cluster.builder() .addContactPoint(cassandra.getIp()) .withPort(cassandra.getMappedPort(9042)) .build() .connect(server.getProbe(CassandraProbe.class).getKeyspace()); simulateGhostMailboxBug(); }