mirror of
https://github.com/moparisthebest/davmail
synced 2024-12-14 03:32:22 -05:00
DAV: add unit tests, move buildCalendarPath logic to getFolderPath
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1099 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
d552bc2993
commit
878f30818e
@ -89,7 +89,9 @@ public abstract class ExchangeSession {
|
|||||||
protected static final String PUBLIC_ROOT = "/public";
|
protected static final String PUBLIC_ROOT = "/public";
|
||||||
protected static final String CALENDAR = "calendar";
|
protected static final String CALENDAR = "calendar";
|
||||||
protected static final String CONTACTS = "contacts";
|
protected static final String CONTACTS = "contacts";
|
||||||
|
protected static final String ADDRESSBOOK = "addressbook";
|
||||||
protected static final String INBOX = "INBOX";
|
protected static final String INBOX = "INBOX";
|
||||||
|
protected static final String LOWER_CASE_INBOX = "inbox";
|
||||||
protected static final String SENT = "Sent";
|
protected static final String SENT = "Sent";
|
||||||
protected static final String DRAFTS = "Drafts";
|
protected static final String DRAFTS = "Drafts";
|
||||||
protected static final String TRASH = "Trash";
|
protected static final String TRASH = "Trash";
|
||||||
@ -102,6 +104,7 @@ public abstract class ExchangeSession {
|
|||||||
* Base user mailboxes path (used to select folder)
|
* Base user mailboxes path (used to select folder)
|
||||||
*/
|
*/
|
||||||
protected String mailPath;
|
protected String mailPath;
|
||||||
|
protected String rootPath;
|
||||||
protected String email;
|
protected String email;
|
||||||
protected String alias;
|
protected String alias;
|
||||||
protected final HttpClient httpClient;
|
protected final HttpClient httpClient;
|
||||||
|
@ -86,6 +86,16 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
protected String contactsUrl;
|
protected String contactsUrl;
|
||||||
protected String outboxUrl;
|
protected String outboxUrl;
|
||||||
|
|
||||||
|
protected String inboxName;
|
||||||
|
protected String deleteditemsName;
|
||||||
|
protected String sentitemsName;
|
||||||
|
protected String draftsName;
|
||||||
|
protected String calendarName;
|
||||||
|
protected String contactsName;
|
||||||
|
protected String outboxName;
|
||||||
|
|
||||||
|
protected static final String USERS = "/users/";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert logical or relative folder path to absolute folder path.
|
* Convert logical or relative folder path to absolute folder path.
|
||||||
*
|
*
|
||||||
@ -94,20 +104,49 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
*/
|
*/
|
||||||
public String getFolderPath(String folderName) {
|
public String getFolderPath(String folderName) {
|
||||||
String folderPath;
|
String folderPath;
|
||||||
|
// IMAP path
|
||||||
if (folderName.startsWith(INBOX)) {
|
if (folderName.startsWith(INBOX)) {
|
||||||
folderPath = folderName.replaceFirst(INBOX, inboxUrl);
|
folderPath = mailPath + inboxName + folderName.substring(INBOX.length());
|
||||||
} else if (folderName.startsWith(TRASH)) {
|
} else if (folderName.startsWith(TRASH)) {
|
||||||
folderPath = folderName.replaceFirst(TRASH, deleteditemsUrl);
|
folderPath = mailPath + deleteditemsName + folderName.substring(TRASH.length());
|
||||||
} else if (folderName.startsWith(DRAFTS)) {
|
} else if (folderName.startsWith(DRAFTS)) {
|
||||||
folderPath = folderName.replaceFirst(DRAFTS, draftsUrl);
|
folderPath = mailPath + draftsName + folderName.substring(DRAFTS.length());
|
||||||
} else if (folderName.startsWith(SENT)) {
|
} else if (folderName.startsWith(SENT)) {
|
||||||
folderPath = folderName.replaceFirst(SENT, sentitemsUrl);
|
folderPath = mailPath + sentitemsName + folderName.substring(SENT.length());
|
||||||
} else if (folderName.startsWith(CALENDAR)) {
|
|
||||||
folderPath = folderName.replaceFirst(CALENDAR, calendarUrl);
|
|
||||||
} else if (folderName.startsWith(CONTACTS)) {
|
|
||||||
folderPath = folderName.replaceFirst(CONTACTS, contactsUrl);
|
|
||||||
} else if (folderName.startsWith("public")) {
|
} else if (folderName.startsWith("public")) {
|
||||||
folderPath = publicFolderUrl + folderName.substring("public".length());
|
folderPath = publicFolderUrl + folderName.substring("public".length());
|
||||||
|
|
||||||
|
// caldav path
|
||||||
|
} else if (folderName.startsWith(USERS)) {
|
||||||
|
// get requested principal
|
||||||
|
String principal = null;
|
||||||
|
String localPath;
|
||||||
|
int principalIndex = folderName.indexOf('/', USERS.length());
|
||||||
|
if (principalIndex >= 0) {
|
||||||
|
principal = folderName.substring(USERS.length(), principalIndex);
|
||||||
|
localPath = folderName.substring(USERS.length() + principal.length() + 1);
|
||||||
|
if (localPath.startsWith(LOWER_CASE_INBOX)) {
|
||||||
|
localPath = inboxName + localPath.substring(LOWER_CASE_INBOX.length());
|
||||||
|
} else if (localPath.startsWith(CALENDAR)) {
|
||||||
|
localPath = calendarName + localPath.substring(CALENDAR.length());
|
||||||
|
} else if (localPath.startsWith(CONTACTS) ) {
|
||||||
|
localPath = contactsName + localPath.substring(CONTACTS.length());
|
||||||
|
} else if (localPath.startsWith(ADDRESSBOOK) ) {
|
||||||
|
localPath = contactsName + localPath.substring(ADDRESSBOOK.length());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
principal = folderName.substring(USERS.length());
|
||||||
|
localPath = "";
|
||||||
|
}
|
||||||
|
if (principal.length() == 0) {
|
||||||
|
folderPath = rootPath;
|
||||||
|
} else if (alias.equalsIgnoreCase(principal) || email.equalsIgnoreCase(principal)) {
|
||||||
|
folderPath = mailPath + localPath;
|
||||||
|
} else {
|
||||||
|
LOGGER.debug("Detected shared path for principal " + principal + ", user principal is " + email);
|
||||||
|
folderPath = rootPath + principal + '/' + localPath;
|
||||||
|
}
|
||||||
|
|
||||||
// absolute folder path
|
// absolute folder path
|
||||||
} else if (folderName.startsWith("/")) {
|
} else if (folderName.startsWith("/")) {
|
||||||
folderPath = folderName;
|
folderPath = folderName;
|
||||||
@ -127,6 +166,7 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
* @param folderName requested folder name
|
* @param folderName requested folder name
|
||||||
* @return Exchange folder path
|
* @return Exchange folder path
|
||||||
* @throws IOException on error
|
* @throws IOException on error
|
||||||
|
* @deprecated user getFolderPath instead
|
||||||
*/
|
*/
|
||||||
public String buildCalendarPath(String principal, String folderName) throws IOException {
|
public String buildCalendarPath(String principal, String folderName) throws IOException {
|
||||||
StringBuilder buffer = new StringBuilder();
|
StringBuilder buffer = new StringBuilder();
|
||||||
@ -213,6 +253,7 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
mailPath = "/exchange/" + email + '/';
|
mailPath = "/exchange/" + email + '/';
|
||||||
LOGGER.debug("Current user email is " + email + ", mailPath is " + mailPath);
|
LOGGER.debug("Current user email is " + email + ", mailPath is " + mailPath);
|
||||||
}
|
}
|
||||||
|
rootPath = mailPath.substring(0, mailPath.lastIndexOf('/', mailPath.length() - 2) + 1);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
LOGGER.error("Error parsing main page at " + method.getPath(), e);
|
LOGGER.error("Error parsing main page at " + method.getPath(), e);
|
||||||
} finally {
|
} finally {
|
||||||
@ -241,6 +282,22 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// return last folder name from url
|
||||||
|
|
||||||
|
protected String getFolderName(String url) {
|
||||||
|
if (url != null) {
|
||||||
|
if (url.endsWith("/")) {
|
||||||
|
return url.substring(url.lastIndexOf('/', url.length() - 2) + 1);
|
||||||
|
} else if (url.indexOf('/') > 0) {
|
||||||
|
return url.substring(url.lastIndexOf('/') + 1);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void getWellKnownFolders() throws DavMailException {
|
protected void getWellKnownFolders() throws DavMailException {
|
||||||
// Retrieve well known URLs
|
// Retrieve well known URLs
|
||||||
MultiStatusResponse[] responses;
|
MultiStatusResponse[] responses;
|
||||||
@ -252,13 +309,20 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
}
|
}
|
||||||
DavPropertySet properties = responses[0].getProperties(HttpStatus.SC_OK);
|
DavPropertySet properties = responses[0].getProperties(HttpStatus.SC_OK);
|
||||||
inboxUrl = getURIPropertyIfExists(properties, "inbox");
|
inboxUrl = getURIPropertyIfExists(properties, "inbox");
|
||||||
|
inboxName = getFolderName(inboxUrl);
|
||||||
deleteditemsUrl = getURIPropertyIfExists(properties, "deleteditems");
|
deleteditemsUrl = getURIPropertyIfExists(properties, "deleteditems");
|
||||||
|
deleteditemsName = getFolderName(deleteditemsUrl);
|
||||||
sentitemsUrl = getURIPropertyIfExists(properties, "sentitems");
|
sentitemsUrl = getURIPropertyIfExists(properties, "sentitems");
|
||||||
|
sentitemsName = getFolderName(sentitemsUrl);
|
||||||
sendmsgUrl = getURIPropertyIfExists(properties, "sendmsg");
|
sendmsgUrl = getURIPropertyIfExists(properties, "sendmsg");
|
||||||
draftsUrl = getURIPropertyIfExists(properties, "drafts");
|
draftsUrl = getURIPropertyIfExists(properties, "drafts");
|
||||||
|
draftsName = getFolderName(draftsUrl);
|
||||||
calendarUrl = getURIPropertyIfExists(properties, "calendar");
|
calendarUrl = getURIPropertyIfExists(properties, "calendar");
|
||||||
|
calendarName = getFolderName(calendarUrl);
|
||||||
contactsUrl = getURIPropertyIfExists(properties, "contacts");
|
contactsUrl = getURIPropertyIfExists(properties, "contacts");
|
||||||
|
contactsName = getFolderName(contactsUrl);
|
||||||
outboxUrl = getURIPropertyIfExists(properties, "outbox");
|
outboxUrl = getURIPropertyIfExists(properties, "outbox");
|
||||||
|
outboxName = getFolderName(outboxUrl);
|
||||||
// junk folder not available over webdav
|
// junk folder not available over webdav
|
||||||
|
|
||||||
// default public folder path
|
// default public folder path
|
||||||
|
@ -19,8 +19,10 @@
|
|||||||
package davmail.exchange;
|
package davmail.exchange;
|
||||||
|
|
||||||
import davmail.exchange.dav.DavExchangeSession;
|
import davmail.exchange.dav.DavExchangeSession;
|
||||||
|
import davmail.exchange.ews.EwsExchangeSession;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import davmail.Settings;
|
import davmail.Settings;
|
||||||
@ -41,8 +43,13 @@ public class AbstractExchangeSessionTestCase extends TestCase {
|
|||||||
@Override
|
@Override
|
||||||
public void setUp() throws IOException {
|
public void setUp() throws IOException {
|
||||||
if (session == null) {
|
if (session == null) {
|
||||||
// Load current user settings
|
|
||||||
if (url == null) {
|
if (url == null) {
|
||||||
|
// try to load settings from current folder davmail.properties
|
||||||
|
File file = new File("davmail.properties");
|
||||||
|
if (file.exists()) {
|
||||||
|
Settings.setConfigFilePath("davmail.properties");
|
||||||
|
}
|
||||||
|
// Load current settings
|
||||||
Settings.load();
|
Settings.load();
|
||||||
} else {
|
} else {
|
||||||
Settings.setDefaultSettings();
|
Settings.setDefaultSettings();
|
||||||
@ -60,9 +67,13 @@ public class AbstractExchangeSessionTestCase extends TestCase {
|
|||||||
// open session, get username and password from davmail.properties
|
// open session, get username and password from davmail.properties
|
||||||
// Note: those properties should *not* exist in normal production mode,
|
// Note: those properties should *not* exist in normal production mode,
|
||||||
// they are not used by DavMail, just by this test case
|
// they are not used by DavMail, just by this test case
|
||||||
|
if (Settings.getBooleanProperty("davmail.enableEws")) {
|
||||||
|
session = new EwsExchangeSession(Settings.getProperty("davmail.url"), Settings.getProperty("davmail.username"), Settings.getProperty("davmail.password"));
|
||||||
|
} else {
|
||||||
session = new DavExchangeSession(Settings.getProperty("davmail.url"), Settings.getProperty("davmail.username"), Settings.getProperty("davmail.password"));
|
session = new DavExchangeSession(Settings.getProperty("davmail.url"), Settings.getProperty("davmail.username"), Settings.getProperty("davmail.password"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
88
src/test/davmail/exchange/dav/TestDavExchangeSession.java
Normal file
88
src/test/davmail/exchange/dav/TestDavExchangeSession.java
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* DavMail POP/IMAP/SMTP/CalDav/LDAP Exchange Gateway
|
||||||
|
* Copyright (C) 2010 Mickael Guessant
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
package davmail.exchange.dav;
|
||||||
|
|
||||||
|
import davmail.exchange.AbstractExchangeSessionTestCase;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Webdav specific unit tests
|
||||||
|
*/
|
||||||
|
public class TestDavExchangeSession extends AbstractExchangeSessionTestCase {
|
||||||
|
DavExchangeSession davSession;
|
||||||
|
|
||||||
|
public void setUp() throws IOException {
|
||||||
|
super.setUp();
|
||||||
|
davSession = ((DavExchangeSession) session);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testGetFolderPath() {
|
||||||
|
String mailPath = davSession.getFolderPath("");
|
||||||
|
String rootPath = davSession.getFolderPath("/users/");
|
||||||
|
|
||||||
|
assertEquals(mailPath + davSession.inboxName, davSession.getFolderPath("INBOX"));
|
||||||
|
assertEquals(mailPath + davSession.deleteditemsName, davSession.getFolderPath("Trash"));
|
||||||
|
assertEquals(mailPath + davSession.sentitemsName, davSession.getFolderPath("Sent"));
|
||||||
|
assertEquals(mailPath + davSession.draftsName, davSession.getFolderPath("Drafts"));
|
||||||
|
|
||||||
|
assertEquals(mailPath + davSession.inboxName + "/test", davSession.getFolderPath("INBOX/test"));
|
||||||
|
assertEquals(mailPath + davSession.deleteditemsName + "/test", davSession.getFolderPath("Trash/test"));
|
||||||
|
assertEquals(mailPath + davSession.sentitemsName + "/test", davSession.getFolderPath("Sent/test"));
|
||||||
|
assertEquals(mailPath + davSession.draftsName + "/test", davSession.getFolderPath("Drafts/test"));
|
||||||
|
|
||||||
|
// TODO: may be wrong, should return full url, public folders may be located on another server
|
||||||
|
assertEquals("/public", davSession.getFolderPath("/public"));
|
||||||
|
assertEquals("/public/test", davSession.getFolderPath("/public/test"));
|
||||||
|
|
||||||
|
// caldav folder paths
|
||||||
|
assertEquals(mailPath, davSession.getFolderPath("/users/"+davSession.getEmail()));
|
||||||
|
assertEquals(mailPath, davSession.getFolderPath("/users/"+davSession.getEmail()+ '/'));
|
||||||
|
assertEquals(mailPath, davSession.getFolderPath("/users/"+davSession.getAlias()));
|
||||||
|
assertEquals(mailPath, davSession.getFolderPath("/users/"+davSession.getAlias()+ '/'));
|
||||||
|
|
||||||
|
assertEquals(mailPath, davSession.getFolderPath("/users/"+davSession.getEmail().toUpperCase()));
|
||||||
|
assertEquals(mailPath, davSession.getFolderPath("/users/"+davSession.getEmail().toLowerCase()));
|
||||||
|
assertEquals(mailPath, davSession.getFolderPath("/users/"+davSession.getAlias().toUpperCase()));
|
||||||
|
assertEquals(mailPath, davSession.getFolderPath("/users/"+davSession.getAlias().toLowerCase()));
|
||||||
|
|
||||||
|
|
||||||
|
assertEquals(mailPath+"subfolder", davSession.getFolderPath("/users/"+davSession.getAlias()+ "/subfolder"));
|
||||||
|
assertEquals(mailPath+"subfolder/", davSession.getFolderPath("/users/"+davSession.getAlias()+ "/subfolder/"));
|
||||||
|
|
||||||
|
assertEquals(rootPath+"anotheruser/", davSession.getFolderPath("/users/anotheruser"));
|
||||||
|
assertEquals(rootPath+"anotheruser/subfolder", davSession.getFolderPath("/users/anotheruser/subfolder"));
|
||||||
|
|
||||||
|
assertEquals(mailPath+davSession.inboxName, davSession.getFolderPath("/users/"+davSession.getEmail()+"/inbox"));
|
||||||
|
assertEquals(mailPath+davSession.inboxName+"/subfolder", davSession.getFolderPath("/users/"+davSession.getEmail()+"/inbox/subfolder"));
|
||||||
|
|
||||||
|
assertEquals(mailPath+davSession.calendarName, davSession.getFolderPath("/users/"+davSession.getEmail()+"/calendar"));
|
||||||
|
assertEquals(mailPath+davSession.contactsName, davSession.getFolderPath("/users/"+davSession.getEmail()+"/contacts"));
|
||||||
|
assertEquals(mailPath+davSession.contactsName, davSession.getFolderPath("/users/"+davSession.getEmail()+"/addressbook"));
|
||||||
|
|
||||||
|
assertEquals(rootPath+"anotherUser/"+davSession.inboxName, davSession.getFolderPath("/users/anotherUser/inbox"));
|
||||||
|
assertEquals(rootPath+"anotherUser/"+davSession.calendarName, davSession.getFolderPath("/users/anotherUser/calendar"));
|
||||||
|
assertEquals(rootPath+"anotherUser/"+davSession.contactsName, davSession.getFolderPath("/users/anotherUser/contacts"));
|
||||||
|
|
||||||
|
// do not replace i18n names
|
||||||
|
assertEquals(mailPath+"Inbox", davSession.getFolderPath("/users/"+davSession.getEmail()+"/Inbox"));
|
||||||
|
assertEquals(mailPath+"Calendar", davSession.getFolderPath("/users/"+davSession.getEmail()+"/Calendar"));
|
||||||
|
assertEquals(mailPath+"Contacts", davSession.getFolderPath("/users/"+davSession.getEmail()+"/Contacts"));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user