Author: tchemit Date: 2012-07-12 16:04:57 +0200 (Thu, 12 Jul 2012) New Revision: 269 Url: http://nuiton.org/repositories/revision/jredmine/269 Log: commit old jredmine client to keep his implementation (but will be removed soon) Added: trunk/jredmine-client/src/main/java/org/nuiton/jredmine/request/RedmineRequestFactoryImpl.java trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineFixtures.java trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineServiceJerseyTest.java Modified: trunk/jredmine-client/pom.xml trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineAnonymousService.java trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineService.java trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineServiceImplementor.java trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineAnonymousServiceJersey.java trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineServiceImplementorJersey.java trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineServiceJersey.java trunk/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRestClient.java trunk/jredmine-client/src/test/java/org/nuiton/jredmine/AbstractRedmineServiceTest.java trunk/jredmine-client/src/test/java/org/nuiton/jredmine/DefaultRedmineServiceTest.java trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineAnonymousServiceJerseyTest.java trunk/jredmine-client/src/test/java/org/nuiton/jredmine/TestHelper.java trunk/jredmine-client/src/test/java/org/nuiton/jredmine/rest/RedmineRestClientTest.java trunk/jredmine-client/src/test/resources/test-config.properties Modified: trunk/jredmine-client/pom.xml =================================================================== --- trunk/jredmine-client/pom.xml 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/pom.xml 2012-07-12 14:04:57 UTC (rev 269) @@ -23,7 +23,9 @@ #L% --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> @@ -43,11 +45,27 @@ <dependencies> <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>jredmine-domain</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> </dependency> <dependency> + <groupId>com.sun.jersey.contribs</groupId> + <artifactId>jersey-apache-client4</artifactId> + </dependency> + + <dependency> + <groupId>com.sun.jersey.contribs</groupId> + <artifactId>jersey-multipart</artifactId> + </dependency> + + <dependency> <groupId>org.nuiton</groupId> <artifactId>helper-maven-plugin</artifactId> <scope>compile</scope> @@ -81,6 +99,11 @@ </dependency> <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + </dependency> + + <dependency> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-utils</artifactId> </dependency> @@ -98,19 +121,9 @@ </dependencies> - <!-- ************************************************************* --> - <!-- *** Project Information ************************************* --> - <!-- ************************************************************* --> <name>JRedmine :: Client</name> - <description>The JRedmine client</description> - <!-- ************************************************************* --> - <!-- *** Build Settings ****************************************** --> - <!-- ************************************************************* --> - - <packaging>jar</packaging> - <properties> <!-- extra files to include in release --> <redmine.releaseFiles> @@ -134,18 +147,6 @@ </execution> </executions> </plugin> - <!-- expose tests --> - <plugin> - <artifactId>maven-jar-plugin</artifactId> - <executions> - <execution> - <id>attach-test</id> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> </plugins> </build> @@ -153,58 +154,9 @@ <reporting> <excludeDefaults>true</excludeDefaults> </reporting> - <!-- ************************************************************* --> - <!-- *** Build Environment ************************************** --> - <!-- ************************************************************* --> - <!-- Build Environment : Environment Information --> - - <!-- Maven Environment : profiles --> - <profiles> - <profile> - <id>release-profile</id> - <activation> - <property> - <name>performRelease</name> - <value>true</value> - </property> - </activation> - <build> - <plugins> - <!-- always compute tests-sources jar --> - <plugin> - <artifactId>maven-source-plugin</artifactId> - <executions> - <execution> - <id>attach-sources</id> - <goals> - <!--<goal>jar</goal>--> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - - <!-- always compute test-javadoc jar --> - <plugin> - <artifactId>maven-javadoc-plugin</artifactId> - <executions> - <execution> - <id>attach-javadocs</id> - <goals> - <!--<goal>jar</goal>--> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - - </build> - </profile> - <profile> <id>reporting</id> <activation> @@ -219,18 +171,18 @@ <plugin> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-maven-plugin</artifactId> - <version>1.3.8</version> + <version>${plexusPluginVersion}</version> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> - <version>2.3</version> + <version>${coberturaPluginVersion}</version> </plugin> </plugins> </reporting> - + </profile> <profile> <id>release-assembly-profile</id> Modified: trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineAnonymousService.java =================================================================== --- trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineAnonymousService.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineAnonymousService.java 2012-07-12 14:04:57 UTC (rev 269) @@ -215,21 +215,22 @@ return result; } -// @Override -// public RedmineServiceImplementor init(RestClient session) throws RedmineServiceException { -// if (log.isDebugEnabled()) { -// log.debug("init session for " + this); -// } -// checkNotLoggued(session); -// return delegateImplementor.init(session); -// } - @Override public int ping() { return delegateImplementor.ping(); } @Override + public void login() throws RedmineServiceLoginException { + delegateImplementor.login(); + } + + @Override + public void logout() throws RedmineServiceLoginException { + delegateImplementor.logout(); + } + + @Override public <T> T getData(String requestName, Class<T> type, Object... args) throws RedmineServiceException { @@ -245,16 +246,18 @@ @Override public <T> T sendData(String requestName, - Class<T> klazz, + Class<T> type, + RestMethod method, Object... args) throws RedmineServiceException { - return delegateImplementor.sendData(requestName, klazz, args); + return delegateImplementor.sendData(requestName, type, method, args); } @Override public <T> T[] sendDatas(String requestName, - Class<T> klazz, + Class<T> type, + RestMethod method, Object... args) throws RedmineServiceException { - return delegateImplementor.sendDatas(requestName, klazz, args); + return delegateImplementor.sendDatas(requestName, type, method, args); } @Override @@ -263,13 +266,13 @@ } @Override - public void destroy() throws RedmineServiceException { - delegateImplementor.destroy(); + public boolean isLoggued() { + return delegateImplementor.isLoggued(); } @Override - public void checkNotLoggued() throws IllegalStateException, RedmineServiceLoginException, NullPointerException { - delegateImplementor.checkNotLoggued(); + public void destroy() throws RedmineServiceException { + delegateImplementor.destroy(); } @Override Modified: trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineService.java =================================================================== --- trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineService.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineService.java 2012-07-12 14:04:57 UTC (rev 269) @@ -77,6 +77,7 @@ // send data and obtain created version Version result = sendData(RedmineRestClient.ADD_VERSION, Version.class, + RestMethod.POST, projectName, version ); @@ -90,6 +91,7 @@ // send data and obtain updated version Version result = sendData(RedmineRestClient.UPDATE_VERSION, Version.class, + RestMethod.POST, projectName, version ); @@ -104,6 +106,7 @@ // send data and obtain updated or created new version Version result = sendData(RedmineRestClient.NEXT_VERSION, Version.class, + RestMethod.POST, projectName, newVersion, oldVersionName @@ -119,6 +122,7 @@ // send data and obtain created attachment Attachment result = sendData(RedmineRestClient.ADD_ATTACHMENT, Attachment.class, + RestMethod.POST, projectName, versionName, attachement @@ -132,6 +136,7 @@ // send data and obtain created news News result = sendData(RedmineRestClient.ADD_NEWS, News.class, + RestMethod.POST, projectName, news ); @@ -145,6 +150,7 @@ // send data and obtain updated version TimeEntry result = sendData(RedmineRestClient.ADD_ISSUE_TIME_ENTRY, TimeEntry.class, + RestMethod.POST, projectName, issueId, entry Modified: trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineServiceImplementor.java =================================================================== --- trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineServiceImplementor.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/main/java/org/nuiton/jredmine/DefaultRedmineServiceImplementor.java 2012-07-12 14:04:57 UTC (rev 269) @@ -32,6 +32,7 @@ import org.nuiton.jredmine.model.io.xpp3.RedmineXpp3Helper; import org.nuiton.jredmine.rest.RedmineRestClient; +import java.io.IOException; import java.io.InputStream; /** @@ -55,16 +56,19 @@ * * @plexus.requirement role="org.nuiton.io.rest.RestClient" role-hint="redmine" */ - protected RestClient session; + protected RedmineRestClient session; - /** xpp3 xpp3Helper to transform xml stream to pojo */ - protected final RedmineXpp3Helper xpp3Helper; + /** + * xpp3 xpp3Helper to transform xml stream to pojo. + * + * @plexus.requirement role="org.nuiton.jredmine.model.io.xpp3.RedmineXpp3Helper" role-hint="default" + */ + protected RedmineXpp3Helper xpp3Helper; /** internal state to known if service was init */ protected boolean init; public DefaultRedmineServiceImplementor() { - xpp3Helper = new RedmineXpp3Helper(); if (log.isDebugEnabled()) { log.debug("new " + this); } @@ -81,13 +85,18 @@ } @Override + public boolean isLoggued() { + return session.isOpen(); + } + + @Override public RedmineServiceImplementor init(RedmineServiceConfiguration configuration) throws RedmineServiceException { session.setConfiguration(configuration); RedmineServiceImplementor result = init(session); return result; } - public RedmineServiceImplementor init(RestClient session) throws RedmineServiceException { + public RedmineServiceImplementor init(RedmineRestClient session) throws RedmineServiceException { if (init) { throw new IllegalStateException( "the client " + this + " was already init!"); @@ -109,10 +118,26 @@ @Override public int ping() { - return 0; + + try { + return session.ping(session.getSession()); + } catch (IOException e) { + if (log.isErrorEnabled()) { + log.error("Could not ping ", e); + } + return -1; + } } @Override + public void login() { + } + + @Override + public void logout() { + } + + @Override public void destroy() throws RedmineServiceException { checkInit(); try { @@ -156,21 +181,23 @@ @Override public <T> T sendData(String requestName, - Class<T> klazz, + Class<T> type, + RestMethod method, Object... args) throws RedmineServiceException { checkLoggued(); InputStream stream = sendDataStream(requestName, args); - T result = getDataFromStream(klazz, stream); + T result = getDataFromStream(type, stream); return result; } @Override public <T> T[] sendDatas(String requestName, - Class<T> klazz, + Class<T> type, + RestMethod method, Object... args) throws RedmineServiceException { checkLoggued(); InputStream stream = sendDataStream(requestName, args); - T[] result = getDatasFromStream(klazz, stream); + T[] result = getDatasFromStream(type, stream); return result; } @@ -185,17 +212,6 @@ } } - @Override - public void checkNotLoggued() throws RedmineServiceLoginException, NullPointerException { -// checkInit(); - checkSessionNotNull(session); - checkSessionConfigurationNotNull(session); - if (!session.getConfiguration().isAnonymous()) { - throw new RedmineServiceLoginException( - "session must be anonymous in this service"); - } - } - protected InputStream askDataStream(String requestName, Object... args) throws RedmineServiceException { Modified: trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineAnonymousServiceJersey.java =================================================================== --- trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineAnonymousServiceJersey.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineAnonymousServiceJersey.java 2012-07-12 14:04:57 UTC (rev 269) @@ -40,7 +40,7 @@ import org.nuiton.jredmine.model.User; import org.nuiton.jredmine.model.Version; -import static org.nuiton.jredmine.request.RedmineRequestFactory.DEFAULT_REQUESTS; +import static org.nuiton.jredmine.request.RedmineRequestFactoryImpl.DEFAULT_REQUESTS; /** * Implemntation of the {@link RedmineAnonymousService} using Jersey for REST @@ -69,7 +69,7 @@ @Override public IssueStatus[] getIssueStatuses() throws RedmineServiceException { - return getDatas(DEFAULT_REQUESTS.GET_ISSUE_STATUS_LIST.requestName(), + return getDatas(DEFAULT_REQUESTS.GET_ISSUE_STATUS_LIST, IssueStatus.class ); } @@ -204,6 +204,7 @@ /////////////////////////////////////////////////////////////////////////// /// RedmineServiceImplementor implementation /////////////////////////////////////////////////////////////////////////// + @Override public RedmineServiceImplementor init(RedmineServiceConfiguration configuration) throws RedmineServiceException { // Force to not be loggued @@ -211,7 +212,8 @@ if (log.isDebugEnabled()) { log.debug("init configuration for " + this); } - RedmineServiceImplementor result = delegateImplementor.init(configuration); + RedmineServiceImplementor result = + delegateImplementor.init(configuration); return result; } @@ -222,6 +224,22 @@ } @Override + public void login() throws RedmineServiceLoginException { + // no login in anonymous service + if (log.isWarnEnabled()) { + log.warn("Login skip in anonymous service."); + } + } + + @Override + public void logout() throws RedmineServiceLoginException { + // no logout in anonymous service + if (log.isWarnEnabled()) { + log.warn("Logout skip in anonymous service."); + } + } + + @Override public <T> T getData(String requestName, Class<T> type, Object... args) throws RedmineServiceException { @@ -237,16 +255,18 @@ @Override public <T> T sendData(String requestName, - Class<T> klazz, + Class<T> type, + RestMethod method, Object... args) throws RedmineServiceException { - return delegateImplementor.sendData(requestName, klazz, args); + return delegateImplementor.sendData(requestName, type, method, args); } @Override public <T> T[] sendDatas(String requestName, - Class<T> klazz, + Class<T> type, + RestMethod method, Object... args) throws RedmineServiceException { - return delegateImplementor.sendDatas(requestName, klazz, args); + return delegateImplementor.sendDatas(requestName, type, method, args); } @Override @@ -255,13 +275,13 @@ } @Override - public void destroy() throws RedmineServiceException { - delegateImplementor.destroy(); + public boolean isLoggued() { + return delegateImplementor.isLoggued(); } @Override - public void checkNotLoggued() throws IllegalStateException, RedmineServiceLoginException, NullPointerException { - delegateImplementor.checkNotLoggued(); + public void destroy() throws RedmineServiceException { + delegateImplementor.destroy(); } @Override @@ -286,15 +306,25 @@ } protected <T> T sendData(DEFAULT_REQUESTS request, - Class<T> klazz, + Class<T> type, + RestMethod method, Object... args) throws RedmineServiceException { - return delegateImplementor.sendData(request.requestName(), klazz, args); + return delegateImplementor.sendData(request.requestName(), + type, + method, + args + ); } protected <T> T[] sendDatas(DEFAULT_REQUESTS request, - Class<T> klazz, + Class<T> type, + RestMethod method, Object... args) throws RedmineServiceException { - return delegateImplementor.sendDatas(request.requestName(), klazz, args); + return delegateImplementor.sendDatas(request.requestName(), + type, + method, + args + ); } } Modified: trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineServiceImplementorJersey.java =================================================================== --- trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineServiceImplementorJersey.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineServiceImplementorJersey.java 2012-07-12 14:04:57 UTC (rev 269) @@ -25,13 +25,28 @@ package org.nuiton.jredmine; import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientHandlerException; import com.sun.jersey.api.client.ClientResponse; +import com.sun.jersey.api.client.UniformInterface; +import com.sun.jersey.api.client.UniformInterfaceException; import com.sun.jersey.api.client.WebResource; +import com.sun.jersey.api.client.config.ClientConfig; +import com.sun.jersey.api.representation.Form; +import com.sun.jersey.client.apache4.ApacheHttpClient4; +import com.sun.jersey.client.apache4.config.DefaultApacheHttpClient4Config; import com.sun.jersey.core.util.MultivaluedMapImpl; +import com.sun.jersey.multipart.FormDataMultiPart; +import com.sun.jersey.multipart.MultiPartMediaTypes; +import com.sun.jersey.multipart.file.FileDataBodyPart; +import com.sun.jersey.multipart.impl.MultiPartWriter; +import org.apache.commons.httpclient.methods.multipart.FilePart; +import org.apache.commons.httpclient.methods.multipart.Part; +import org.apache.commons.httpclient.methods.multipart.StringPart; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.nuiton.io.rest.RestClientConfiguration; import org.nuiton.jredmine.model.io.xpp3.RedmineXpp3Helper; import org.nuiton.jredmine.request.RedmineRequest; @@ -40,7 +55,9 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import java.io.File; +import java.io.FileNotFoundException; import java.io.InputStream; +import java.util.List; import java.util.Map; /** @@ -57,24 +74,31 @@ private static final Log log = LogFactory.getLog(RedmineServiceImplementorJersey.class); + /** Service configuration. */ protected RestClientConfiguration configuration; - /** request factory. */ - protected final RedmineRequestFactory requestFactory; + /** + * Request factory. + * + * @plexus.requirement role="org.nuiton.jredmine.request.RedmineRequestFactory" role-hint="jersey" + */ + protected RedmineRequestFactory requestFactory; - /** xpp3Helper to transform xml stream to pojo */ - protected final RedmineXpp3Helper xpp3Helper; + /** + * xpp3Helper to transform xml stream to pojo. + * + * @plexus.requirement role="org.nuiton.jredmine.model.io.xpp3.RedmineXpp3Helper" role-hint="default" + */ + protected RedmineXpp3Helper xpp3Helper; + /** Jersey REST client. */ protected Client client; - /** internal state to known if service was init */ + /** internal state to known if service was init. */ protected boolean init; - public RedmineServiceImplementorJersey() { - xpp3Helper = new RedmineXpp3Helper(); - requestFactory = new RedmineRequestFactory(); - requestFactory.addDefaultRequests(); - } + /** internal state to know if service is loggued. */ + protected boolean auth; /////////////////////////////////////////////////////////////////////////// /// RedmineServiceImplementor implementation @@ -86,10 +110,42 @@ } @Override + public boolean isLoggued() { + return auth; + } + + @Override public RedmineServiceImplementor init(RedmineServiceConfiguration configuration) throws RedmineServiceException { Preconditions.checkNotNull(configuration); this.configuration = configuration; - client = Client.create(); + + Preconditions.checkNotNull(xpp3Helper); + Preconditions.checkNotNull(requestFactory); + requestFactory.addDefaultRequests(); + + if (configuration.isAnonymous()) { + + // no need authentication + + client = Client.create(); + } else { + + ClientConfig clientConfig = new DefaultApacheHttpClient4Config(); + clientConfig.getClasses().add(MultiPartWriter.class); + //TODO Should use this when redmine plugin will accept it +// BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); +// credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials( +// configuration.getRestUsername(), configuration.getRestPassword() +// )); + +// clientConfig.getProperties().put(DefaultApacheHttpClient4Config.PROPERTY_CREDENTIALS_PROVIDER, credentialsProvider); + clientConfig.getProperties().put(DefaultApacheHttpClient4Config.PROPERTY_CONNECTION_MANAGER, new ThreadSafeClientConnManager()); + client = ApacheHttpClient4.create(clientConfig); + +// ClientConfig clientConfig2 = new DefaultClientConfig(); +// clientConfig2.getClasses().add(MultiPartWriter.class); +// client = Client.create(clientConfig2); + } init = true; return this; } @@ -98,9 +154,17 @@ public void destroy() throws RedmineServiceException { checkInit(); init = false; - configuration = null; - client.destroy(); - client = null; + try { + logout(); + } catch (RedmineServiceLoginException e) { + if (log.isErrorEnabled()) { + log.error("Error while logut, still continue to destroy...", e); + } + } finally { + client.destroy(); + configuration = null; + client = null; + } } @Override @@ -108,7 +172,9 @@ Class<T> type, Object... args) throws RedmineServiceException { checkInit(); - InputStream stream = askDataStream(requestName, args); + + RedmineRequest request = requestFactory.getRequest(requestName, args); + InputStream stream = askData(request, RestMethod.GET, InputStream.class); T result = getDataFromStream(type, stream); return result; } @@ -118,59 +184,134 @@ Class<T> type, Object... args) throws RedmineServiceException { checkInit(); - InputStream stream = askDataStream(requestName, args); + RedmineRequest request = requestFactory.getRequest(requestName, args); + InputStream stream = askData(request, RestMethod.GET, InputStream.class); T[] result = getDatasFromStream(type, stream); return result; } @Override public <T> T sendData(String requestName, - Class<T> klazz, + Class<T> type, + RestMethod method, Object... args) throws RedmineServiceException { checkLoggued(); - InputStream stream = sendDataStream(requestName, args); - T result = getDataFromStream(klazz, stream); + InputStream stream = sendDataStream(requestName, method, args); + T result = getDataFromStream(type, stream); return result; } @Override public <T> T[] sendDatas(String requestName, - Class<T> klazz, + Class<T> type, + RestMethod method, Object... args) throws RedmineServiceException { checkLoggued(); - InputStream stream = sendDataStream(requestName, args); - T[] result = getDatasFromStream(klazz, stream); + InputStream stream = sendDataStream(requestName, method, args); + T[] result = getDatasFromStream(type, stream); return result; } @Override public void checkLoggued() throws IllegalStateException, RedmineServiceLoginException, NullPointerException { checkInit(); - //TODO - } + if (configuration.isAnonymous()) { + throw new RedmineServiceLoginException( + "can not access this service in anonymous mode"); + } - @Override - public void checkNotLoggued() throws RedmineServiceLoginException, NullPointerException { - checkInit(); - //TODO + if (!isLoggued()) { + + // log in + login(); + } } @Override public int ping() { - WebResource request = requestToWebResource("ping"); + RedmineRequest redmineRequest = requestFactory.getRequest("ping"); + int status; try { - ClientResponse clientResponse = request.head(); + ClientResponse clientResponse = askData(redmineRequest, + RestMethod.HEAD, + ClientResponse.class); status = clientResponse.getStatus(); } catch (ClientHandlerException e) { if (log.isErrorEnabled()) { - log.error("Could not ping " + request.toString(), e); + log.error("Could not ping " + redmineRequest.toString(), e); } status = -1; } return status; } + @Override + public void login() throws RedmineServiceLoginException { + + Form f = new Form(); + RedmineRequest redmineRequest = requestFactory.getRequest( + "login", + configuration.getRestUsername(), + configuration.getRestPassword() + ); + UniformInterface request = prepareRequest(redmineRequest, f); + try { + ClientResponse clientResponse = RestMethod.POST.execute( + request, ClientResponse.class, f); + + int status = clientResponse.getStatus(); + + if (status == 200) { + + // ok we are log in + if (log.isInfoEnabled()) { + log.info("User " + configuration.getRestUsername() + " " + + "sucessfull log in"); + } + auth = true; + } else { + throw new RedmineServiceLoginException( + "Could not log in, return status was " + status + + "+, but a 200 was required."); + } + } catch (ClientHandlerException e) { + if (log.isErrorEnabled()) { + log.error("Could not ping " + request.toString(), e); + } + throw new RedmineServiceLoginException( + "Error while trying to log you : " + e.getMessage(), e); + } + } + + @Override + public void logout() throws RedmineServiceLoginException { + + if (isLoggued()) { + RedmineRequest redmineRequest = requestFactory.getRequest("ping"); + + ClientResponse clientResponse = askData(redmineRequest, RestMethod.GET, ClientResponse.class); + + int status = clientResponse.getStatus(); + if (status == 200) { + + // ok we are log out + + if (log.isInfoEnabled()) { + log.info("User " + configuration.getRestUsername() + " " + + "sucessfull log out"); + } + auth = false; + + // TODO must remove all cookie from client ? + } else { + throw new RedmineServiceLoginException( + "Could not log out, return status was " + status + + "+, but a 200 was required."); + } + } + } + protected <T> T getDataFromStream(Class<T> type, InputStream stream) throws RedmineServiceException { if (stream == null) { @@ -202,143 +343,254 @@ } } - protected InputStream askDataStream(String requestName, - Object... args) throws RedmineServiceException { + protected <T> T askData(RedmineRequest request, + RestMethod method, + Class<T> type) { - try { + if (request.containsAttachments()) { + throw new IllegalStateException( + "Can not accept attachments in this method"); + } - // get the webresource to grab - WebResource webResource = requestToWebResource(requestName, args); + String url = request.toPath(configuration.getRestUrl()); - // transform it to a input stream - InputStream result = webResource.accept( - MediaType.APPLICATION_XML_TYPE). - get(InputStream.class); - return result; - } catch (Exception e) { - throw new RedmineServiceException( - "could not obtain data stream for request " + requestName + - " for reason " + e.getMessage(), e); + WebResource webResource = client.resource(url); + String[] parameters = request.getParameters(); + + if (parameters.length > 0) { + + MultivaluedMap<String, String> params = new MultivaluedMapImpl(); + + // add parameters + + int nbParams = parameters.length / 2; + for (int i = 0; i < nbParams; i++) { + String key = parameters[2 * i]; + String value = parameters[2 * i + 1]; + if (value == null) { + if (log.isDebugEnabled()) { + log.debug("skip null parameter " + key); + } + continue; + } + params.add(key, value); + } + + // simple get request (put everything in url ?) + webResource = webResource.queryParams(params); } - } - protected WebResource requestToWebResource(String requestName, - Object... args) { + if (configuration.isVerbose()) { + log.info("request = " + webResource.toString()); + } - RedmineRequest request = requestFactory.getRequest(requestName, args); + // transform it to required type - String url = configuration.getRestUrl().toString(); - for (String path : request.getPath()) { - url += '/' + path; + UniformInterface resource; + + if (InputStream.class.equals(type)) { + + // will reduilb response from xml + resource = webResource.accept(MediaType.APPLICATION_XML_TYPE); + } else { + + resource = webResource; } - WebResource result = client.resource(url); - String[] parameters = request.getParameters(); - Map<String, File> attachments = request.getAttachments(); - if (attachments == null) { + T result = method.execute(resource, type); + return result; + } - // not a multi-part request + protected UniformInterface prepareRequest(RedmineRequest request, + Form form) { - if (parameters.length > 0) { + if (request.containsAttachments()) { + throw new IllegalStateException( + "Can not accept attachments in this method"); + } - MultivaluedMap<String, String> params = new MultivaluedMapImpl(); - // add parameters + String url = request.toPath(configuration.getRestUrl()); - int nbParams = parameters.length / 2; - for (int i = 0; i < nbParams; i++) { - String key = parameters[2 * i]; - String value = parameters[2 * i + 1]; - if (value == null) { - if (log.isDebugEnabled()) { - log.debug("skip null parameter " + key); - } - continue; + WebResource webResource = client.resource(url); + String[] parameters = request.getParameters(); + + if (parameters.length > 0) { + + // add parameters + + int nbParams = parameters.length / 2; + for (int i = 0; i < nbParams; i++) { + String key = parameters[2 * i]; + String value = parameters[2 * i + 1]; + if (value == null) { + if (log.isDebugEnabled()) { + log.debug("skip null parameter " + key); } - params.add(key, value); + continue; } - result = result.queryParams(params); + form.add(key, value); } - } else { + } - // multi-part request + if (log.isInfoEnabled()) { + log.info("request = " + webResource.toString()); + } + return webResource.accept(MediaType.APPLICATION_XML_TYPE); + } -// List<Part> paramParts = new ArrayList<Part>(); + protected UniformInterface prepareRequest(RedmineRequest request, + List<Part> paramParts, + FormDataMultiPart form) { + + String url = request.toPath(configuration.getRestUrl()); + + WebResource webResource = client.resource(url); + + // add parameters in a form + + String[] parameters = request.getParameters(); +// if (parameters.length > 0) { // -// if (parameters.length > 0) { -// -// // add parameters as part of multi-part -// -// int nbParams = parameters.length / 2; -// for (int i = 0; i < nbParams; i++) { -// String key = parameters[2 * i]; -// String value = parameters[2 * i + 1]; -// if (value == null) { -// if (log.isDebugEnabled()) { -// log.debug("skip null parameter " + key); -// } -// continue; -// } -// paramParts.add(new StringPart(key, value)); +// int nbParams = parameters.length / 2; +// for (int i = 0; i < nbParams; i++) { +// String key = parameters[2 * i]; +// String value = parameters[2 * i + 1]; +// if (value == null) { // if (log.isDebugEnabled()) { -// log.debug("add parameter [" + key + "]=" + value); +// log.debug("skip null parameter " + key); // } +// continue; // } -// } // -// // add file parts -// for (Map.Entry<String, File> entry : attachments.entrySet()) { -// String key = entry.getKey(); -// File file = entry.getValue(); -// if (log.isDebugEnabled()) { -// log.debug("add attachment " + key + "=" + file); +//// webResource = webResource.queryParam(key, value); +// form = form.field(key, value); +// +// if (log.isInfoEnabled()) { +// log.info("add parameter [" + key + "]=" + value); // } -// paramParts.add(new FilePart( -// key, -// file.getName(), -// file, -// FilePart.DEFAULT_CONTENT_TYPE, -// configuration.getEncoding()) -// ); // } -// if (attachments.isEmpty()) { -// log.warn("no attachment in a multi-part request!"); -// } -// -// Part[] parts = paramParts.toArray(new Part[paramParts.size()]); -// -// MultipartRequestEntity entity = -// new MultipartRequestEntity(parts, gm.getParams()); -// if (log.isDebugEnabled()) { -// entity.writeRequest(System.out); -// } -// gm.setRequestEntity(entity); -//// gm.addRequestHeader("content-type", "multipart/form-data"); -// gm.addRequestHeader("content-type", entity.getContentType()); -// gm.addRequestHeader("content-length", entity.getContentLength() + -// ""); -// if (showRequest) { -// log.info("content-type : " + entity.getContentType() + -// ", content-length : " + entity.getContentLength()); -// } +// } + + // add file parts + + Map<String, File> attachments = request.getAttachments(); + +// List<Part> paramParts = new ArrayList<Part>(); + + if (parameters.length > 0) { + + // add parameters as part of multi-part + + int nbParams = parameters.length / 2; + for (int i = 0; i < nbParams; i++) { + String key = parameters[2 * i]; + String value = parameters[2 * i + 1]; + if (value == null) { + if (log.isDebugEnabled()) { + log.debug("skip null parameter " + key); + } + continue; + } + paramParts.add(new StringPart(key, value)); + if (log.isDebugEnabled()) { + log.debug("add parameter [" + key + "]=" + value); + } + } } - if (log.isInfoEnabled()) { - log.info("request = " + result.toString()); + + // add file parts + for (Map.Entry<String, File> entry : attachments.entrySet()) { + String key = entry.getKey(); + File file = entry.getValue(); + if (log.isDebugEnabled()) { + log.debug("add attachment " + key + "=" + file); + } + try { + FilePart filePart = new FilePart( + key, + file.getName(), + file, + FilePart.DEFAULT_CONTENT_TYPE, + configuration.getEncoding()); + paramParts.add(filePart); + } catch (FileNotFoundException e) { + if (log.isErrorEnabled()) { + log.error("File not found " + file, e); + } + } } + if (attachments.isEmpty()) { + log.warn("no attachment in a multi-part request!"); + } + + Part[] parts = paramParts.toArray(new Part[paramParts.size()]); + +// MultipartRequestEntity entity = +// new MultipartRequestEntity(parts, webResource.getParams()); +// ByteArrayOutputStream bas = new ByteArrayOutputStream(); + + for (Map.Entry<String, File> entry : attachments.entrySet()) { + String key = entry.getKey(); + File file = entry.getValue(); + if (log.isInfoEnabled()) { + log.info("add attachment " + key + "=" + file); + } + form = (FormDataMultiPart) form.bodyPart(new FileDataBodyPart(key, file)); + } + + if (configuration.isVerbose()) { + log.info("request = " + webResource.toString()); + } + + UniformInterface result; + result = webResource.type(MultiPartMediaTypes.MULTIPART_MIXED_TYPE); +// result = webResource.type(MultiPartMediaTypes.MULTIPART_MIXED_TYPE).accept(MediaType.APPLICATION_XML_TYPE); + return result; } protected InputStream sendDataStream(String requestName, + RestMethod method, Object... args) throws RedmineServiceException { -// RestRequest request = requestFactory.getRequest(requestName, args); + RedmineRequest redmineRequest = + requestFactory.getRequest(requestName, args); + UniformInterface request; + Object entity; + + if (redmineRequest.containsAttachments()) { + + // multi-part request + + FormDataMultiPart form = new FormDataMultiPart(); + List<Part> parts = Lists.newArrayList(); + request = prepareRequest(redmineRequest, parts, form); + entity = parts; + + } else { + + // simple request + + Form form = new Form(); + request = prepareRequest(redmineRequest, form); + entity = form; + } + // obtain data from rest client try { - -// InputStream stream = session.sendData(r); - InputStream stream = null; + InputStream stream = method.execute( + request, +// .accept(MediaType.APPLICATION_XML_TYPE), + InputStream.class, + entity); return stream; + } catch (UniformInterfaceException e) { + throw new RedmineServiceException( + "could not send data stream for request " + requestName + + " for reason " + e.getResponse().getEntity(String.class) + + ", response from server was " + e.getMessage(), e); } catch (Exception e) { throw new RedmineServiceException( "could not send data stream for request " + requestName + @@ -346,6 +598,7 @@ } } + protected void checkInit() throws IllegalStateException { if (!init) { throw new IllegalStateException( Modified: trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineServiceJersey.java =================================================================== --- trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineServiceJersey.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/main/java/org/nuiton/jredmine/RedmineServiceJersey.java 2012-07-12 14:04:57 UTC (rev 269) @@ -32,9 +32,10 @@ import static org.nuiton.jredmine.request.RedmineRequestFactory.DEFAULT_REQUESTS; /** - * Implementation fo the {@link RedmineService} using Jersey REST layer. + * Implemantation fo the {@link RedmineService} using Jersey REST layer. * * @author tchemit <chemit@codelutin.com> + * @plexus.component role="org.nuiton.jredmine.RedmineService" role-hint="jersey" * @since 1.4 */ public class RedmineServiceJersey extends RedmineAnonymousServiceJersey implements RedmineService { @@ -58,6 +59,7 @@ // send data and obtain created version Version result = sendData(DEFAULT_REQUESTS.ADD_VERSION, Version.class, + RestMethod.POST, projectName, version ); @@ -71,6 +73,7 @@ // send data and obtain updated version Version result = sendData(DEFAULT_REQUESTS.UPDATE_VERSION, Version.class, + RestMethod.POST, projectName, version ); @@ -85,6 +88,7 @@ // send data and obtain updated or created new version Version result = sendData(DEFAULT_REQUESTS.NEXT_VERSION, Version.class, + RestMethod.POST, projectName, newVersion, oldVersionName @@ -100,6 +104,7 @@ // send data and obtain created attachment Attachment result = sendData(DEFAULT_REQUESTS.ADD_ATTACHMENT, Attachment.class, + RestMethod.POST, projectName, versionName, attachement @@ -113,6 +118,7 @@ // send data and obtain created news News result = sendData(DEFAULT_REQUESTS.ADD_NEWS, News.class, + RestMethod.POST, projectName, news ); @@ -126,10 +132,30 @@ // send data and obtain updated version TimeEntry result = sendData(DEFAULT_REQUESTS.ADD_ISSUE_TIME_ENTRY, TimeEntry.class, + RestMethod.POST, projectName, issueId, entry ); return result; } + + /////////////////////////////////////////////////////////////////////////// + /// RedmineServiceImplementor implementation + /////////////////////////////////////////////////////////////////////////// + @Override + public RedmineServiceImplementor init(RedmineServiceConfiguration configuration) throws RedmineServiceException { + RedmineServiceImplementor result = delegateImplementor.init(configuration); + return result; + } + + @Override + public void login() throws RedmineServiceLoginException { + delegateImplementor.login(); + } + + @Override + public void logout() throws RedmineServiceLoginException { + delegateImplementor.logout(); + } } Added: trunk/jredmine-client/src/main/java/org/nuiton/jredmine/request/RedmineRequestFactoryImpl.java =================================================================== --- trunk/jredmine-client/src/main/java/org/nuiton/jredmine/request/RedmineRequestFactoryImpl.java (rev 0) +++ trunk/jredmine-client/src/main/java/org/nuiton/jredmine/request/RedmineRequestFactoryImpl.java 2012-07-12 14:04:57 UTC (rev 269) @@ -0,0 +1,284 @@ +/* + * #%L + * JRedmine :: Client + * + * $Id: RedmineRequestFactory.java 256 2012-03-25 15:37:26Z tchemit $ + * $HeadURL: http://svn.nuiton.org/svn/jredmine/trunk/jredmine-client/src/main/java/org/n... $ + * %% + * Copyright (C) 2009 - 2012 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ +package org.nuiton.jredmine.request; + +import com.google.common.base.Strings; +import com.google.common.collect.Maps; +import org.nuiton.jredmine.model.Attachment; +import org.nuiton.jredmine.model.News; +import org.nuiton.jredmine.model.TimeEntry; +import org.nuiton.jredmine.model.Version; +import org.nuiton.jredmine.model.VersionStatusEnum; + +import java.io.File; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * Factory of {@link RedmineRequest}. + * + * @author tchemit <chemit@codelutin.com> + * @plexus.component role="org.nuiton.jredmine.request.RedmineRequestFactory" role-hint="jersey" + * @since 1.4 + */ +public class RedmineRequestFactoryImpl implements RedmineRequestFactory { + + public static final DateFormat DATE_FORMAT = + new SimpleDateFormat("yyyy-MM-dd"); + + /** registred requests */ + protected final Map<String, RedmineRequestBuilder> requestBuilders; + + public RedmineRequestFactoryImpl() { + requestBuilders = Maps.newTreeMap(); + } + + @Override + public void addDefaultRequests() { + for (DEFAULT_REQUESTS request : DEFAULT_REQUESTS.values()) { + addRequestBuilder(request.requestBuilder); + } + } + + @Override + public void addRequestBuilder(RedmineRequestBuilder builder) { + String name = builder.getName(); + if (requestBuilders.containsKey(name)) { + throw new IllegalArgumentException("a request builder with name " + + name + " already exists."); + } + requestBuilders.put(name, builder); + } + + @Override + public RedmineRequest getRequest(String id, Object... args) { + + RedmineRequest r; + RedmineRequestBuilder builder = requestBuilders.get(id); + if (builder == null) { + + throw new IllegalArgumentException( + "Could not find any request builder for request named '" + + id + "'"); + } + r = builder.create(args); + if (r == null) { + throw new IllegalArgumentException( + "Could not find any request named '" + id + + "' using builder " + builder); + } + return r; + } + + public enum DEFAULT_REQUESTS { + + // misc requests + + PING(new DefaultRedmineRequestBuilder("ping")), + LOGOUT(new DefaultRedmineRequestBuilder("logout")), + LOGIN(new DefaultRedmineRequestBuilder("login") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + String login = (String) args[0]; + String password = (String) args[1]; + return new String[]{"username", login, "password", password}; + } + }), + + // with no scope + + GET_PROJECT_LIST(new DefaultRedmineRequestBuilder("get_projects.xml")), + GET_USER_PROJECTS(new DefaultRedmineRequestBuilder("get_user_projects.xml")), + GET_ISSUE_STATUS_LIST(new DefaultRedmineRequestBuilder("get_issue_statuses.xml")), + GET_ISSUE_PRIORITY_LIST(new DefaultRedmineRequestBuilder("get_issue_priorities.xml")), + + // with project scope + + GET_PROJECT(new ProjectScopeRedmineRequestBuilder("get_project.xml")), + GET_PROJECT_ISSUES(new ProjectScopeRedmineRequestBuilder("get_project_issues.xml")), + GET_PROJECT_OPENED_ISSUES(new ProjectScopeRedmineRequestBuilder("get_project_opened_issues.xml")), + GET_PROJECT_CLOSED_ISSUES(new ProjectScopeRedmineRequestBuilder("get_project_closed_issues.xml")), + GET_VERSION_LIST(new ProjectScopeRedmineRequestBuilder("get_project_versions.xml")), + GET_ISSUE_CATEGORY_LIST(new ProjectScopeRedmineRequestBuilder("get_issue_categories.xml")), + GET_TRACKER_LIST(new ProjectScopeRedmineRequestBuilder("get_project_trackers.xml")), + GET_USER_LIST(new ProjectScopeRedmineRequestBuilder("get_project_users.xml")), + GET_NEWS_LIST(new ProjectScopeRedmineRequestBuilder("get_project_news.xml")), + + ADD_VERSION(new ProjectScopeRedmineRequestBuilder("add_version.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + Version version = (Version) args[1]; + String date = getVersionEffectiveDate(version); + String status = getVersionStatus(version); + return new String[]{ + "version[name]", version.getName(), + "version[description]", version.getDescription(), + "version[effective_date]", date, + "version[status]", status + }; + } + }), + UPDATE_VERSION(new ProjectScopeRedmineRequestBuilder("update_version.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + Version version = (Version) args[1]; + String date = getVersionEffectiveDate(version); + String status = getVersionStatus(version); + return new String[]{ + "version[name]", version.getName(), + "version[description]", version.getDescription(), + "version[effective_date]", date, + "version[status]", status + }; + } + }), + NEXT_VERSION(new ProjectScopeRedmineRequestBuilder("next_version.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + + + Version version = (Version) args[1]; + String date = getVersionEffectiveDate(version); + String status = getVersionStatus(version); + String oldVersionName = (String) args[2]; + return new String[]{ + "oldVersionName", oldVersionName, + "version[name]", version.getName(), + "version[description]", version.getDescription(), + "version[effective_date]", date, + "version[status]", status + }; + } + }), + ADD_NEWS(new ProjectScopeRedmineRequestBuilder("add_news.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + News news = (News) args[1]; + return new String[]{ + "news[title]", news.getTitle(), + "news[summary]", news.getSummary(), + "news[description]", news.getDescription() + }; + } + }), + + // version scope + GET_VERSION(new VersionScopeRedmineRequestBuilder("get_version.xml")), + GET_ISSUE_LIST(new VersionScopeRedmineRequestBuilder("get_version_issues.xml")), + GET_ATTACHMENTS_LIST(new VersionScopeRedmineRequestBuilder("get_version_attachments.xml")), + ADD_ATTACHMENT(new VersionScopeRedmineRequestBuilder("add_version_attachment.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + String versionId = (String) args[1]; + Attachment attachment = (Attachment) args[2]; + return new String[]{ + "version_name", versionId, + "attachment[description]", attachment.getDescription() + }; + } + + @Override + public Map<String, File> getAttachments(Object... args) { + Map<String, File> upload = new HashMap<String, File>(); + Attachment attachment = (Attachment) args[2]; + upload.put("attachment[file]", attachment.getToUpload()); + return upload; + } + }), + + // issue scope + + GET_ISSUE_TIME_ENTRY_LIST(new IssueScopeRedmineRequestBuilder("get_issue_times.xml")), + + ADD_ISSUE_TIME_ENTRY(new IssueScopeRedmineRequestBuilder("add_issue_time.xml") { + private static final long serialVersionUID = 1L; + + @Override + public String[] getParameters(Object... args) { + String issueId = (String) args[1]; + TimeEntry timeEntry = (TimeEntry) args[2]; + Date d = timeEntry.getSpentOn(); + if (d == null) { + d = new Date(); + } + String date = DATE_FORMAT.format(d); + return new String[]{ + "issue_id", issueId, + //"timeEntry[issue_id]", issueId, + "time_entry[activity_id]", timeEntry.getActivityId() + "", + "time_entry[spent_on]", date, + "time_entry[hours]", timeEntry.getHours() + "", + "time_entry[comments]", timeEntry.getComments() == null ? "" : timeEntry.getComments() + }; + } + }); + + private final RedmineRequestBuilder requestBuilder; + + DEFAULT_REQUESTS(RedmineRequestBuilder requestBuilder) { + this.requestBuilder = requestBuilder; + } + + public RedmineRequestBuilder getRequestBuilder() { + return requestBuilder; + } + + public String requestName() { + return requestBuilder.getName(); + } + } + + protected static String getVersionStatus(Version version) { + String status = version.getStatus(); + if (Strings.isNullOrEmpty(status)) { + + // use default open status + status = VersionStatusEnum.open.name(); + } + return status; + } + + protected static String getVersionEffectiveDate(Version version) { + return version.getEffectiveDate() == null ? "" : + DATE_FORMAT.format(version.getEffectiveDate()); + } + + +} Modified: trunk/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRestClient.java =================================================================== --- trunk/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRestClient.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/main/java/org/nuiton/jredmine/rest/RedmineRestClient.java 2012-07-12 14:04:57 UTC (rev 269) @@ -307,7 +307,7 @@ } } - protected void ping(RestSession session) throws IOException { + public int ping(RestSession session) throws IOException { try { @@ -334,6 +334,7 @@ throw new IOException( "can not connect to " + configuration.getRestUrl()); } + return statusCode; } catch (IOException ex) { throw ex; } catch (Exception ex) { @@ -343,7 +344,7 @@ } } - protected void login(RestSession session) throws IOException { + public void login(RestSession session) throws IOException { RestRequest request = getRequest(LOGIN, configuration.getRestUsername(), Modified: trunk/jredmine-client/src/test/java/org/nuiton/jredmine/AbstractRedmineServiceTest.java =================================================================== --- trunk/jredmine-client/src/test/java/org/nuiton/jredmine/AbstractRedmineServiceTest.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/test/java/org/nuiton/jredmine/AbstractRedmineServiceTest.java 2012-07-12 14:04:57 UTC (rev 269) @@ -47,8 +47,6 @@ import org.nuiton.jredmine.model.Version; import org.nuiton.jredmine.rest.RedmineRestClient; -import static org.nuiton.jredmine.TestHelper.getTestConfiguration; - /** * Created: 2 janv. 2010 * @@ -147,19 +145,21 @@ @Before public void setUp() throws Exception { - if (client == null) { + Assume.assumeTrue(false); - RestClientConfiguration configuration = getTestConfiguration(); - try { - client = newClient(configuration); - } finally { - Assume.assumeTrue(client != null && client.isOpen()); - } - } - - service = newService(); - - ((DefaultRedmineServiceImplementor) service).init(client); +// if (client == null) { +// +// RestClientConfiguration configuration = getTestConfiguration(); +// try { +// client = newClient(configuration); +// } finally { +// Assume.assumeTrue(client != null && client.isOpen()); +// } +// } +// +// service = newService(); +// +// ((DefaultRedmineServiceImplementor) service).init(client); } @After Modified: trunk/jredmine-client/src/test/java/org/nuiton/jredmine/DefaultRedmineServiceTest.java =================================================================== --- trunk/jredmine-client/src/test/java/org/nuiton/jredmine/DefaultRedmineServiceTest.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/test/java/org/nuiton/jredmine/DefaultRedmineServiceTest.java 2012-07-12 14:04:57 UTC (rev 269) @@ -24,53 +24,134 @@ */ package org.nuiton.jredmine; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Assume; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; +import org.nuiton.jredmine.model.Attachment; +import org.nuiton.jredmine.model.Project; +import org.nuiton.jredmine.model.Version; /** @author tchemit <chemit@codelutin.com> */ -public class DefaultRedmineServiceTest extends AbstractRedmineServiceTest<DefaultRedmineService> { +public class DefaultRedmineServiceTest { +// extends AbstractRedmineServiceTest<DefaultRedmineService> { - public DefaultRedmineServiceTest() { - super(DefaultRedmineService.class); + /** Logger. */ + private static final Log log = + LogFactory.getLog(DefaultRedmineServiceTest.class); + + protected static RedmineFixtures fixtures; + + protected RedmineService service; + +// public DefaultRedmineServiceTest() { +// super(DefaultRedmineService.class); +// } + + @BeforeClass + public static void beforeClass() throws Exception { + + fixtures = new RedmineFixtures(); + + // test if can access service + DefaultRedmineService service = fixtures.newLegacyRedmineService(); + + try { + int status = service.ping(); + + if (status != 200) { + + // ping was not ok + if (log.isInfoEnabled()) { + log.info("Will skip test " + + RedmineAnonymousServiceJerseyTest.class.getName() + + ", since ping status is " + status + + " (should be 200 to pass tests...)"); + } + } + Assume.assumeTrue(status == 200); + + try { + service.login(); + } catch (RedmineServiceLoginException e) { + // ping was not ok + if (log.isInfoEnabled()) { + log.info("Will skip test " + + RedmineAnonymousServiceJerseyTest.class.getName() + + ", since login was bad : " + e.getMessage(), e); + } + + Assume.assumeTrue(false); + } + } finally { + service.destroy(); + } } + @AfterClass + public static void afterClass() { + fixtures = null; + } + + @Before + public void setUp() throws Exception { + service = fixtures.newLegacyRedmineService(); + } + @Test - @Override +// @Override public void getUserProjects() throws Exception { - projects = getService().getUserProjects(); + Project[] projects = service.getUserProjects(); + Assert.assertNotNull(projects); } @Test - @Override +// @Override public void addVersion() throws Exception { // TODO } @Test - @Override +// @Override + @Ignore public void addAttachment() throws Exception { // TODO + + Version version = fixtures.getVersion(); + Attachment attachment = fixtures.getAttachment(); + Attachment updatedAttachment = service.addAttachment( + RedmineFixtures.PROJECT_NAME, + version.getName(), + attachment + ); + Assert.assertNotNull(updatedAttachment); } @Test - @Override +// @Override public void addNews() throws Exception { // TODO } @Test - @Override +// @Override public void updateVersion() throws Exception { // TODO } @Test - @Override +// @Override public void nextVersion() throws Exception { // TODO } @Test - @Override +// @Override public void addIssueTime() throws Exception { // TimeEntry timeEntry = new TimeEntry(); // timeEntry.setActivityId(9); Modified: trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineAnonymousServiceJerseyTest.java =================================================================== --- trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineAnonymousServiceJerseyTest.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineAnonymousServiceJerseyTest.java 2012-07-12 14:04:57 UTC (rev 269) @@ -27,6 +27,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.After; +import org.junit.AfterClass; import org.junit.Assert; import org.junit.Assume; import org.junit.Before; @@ -44,8 +45,6 @@ import org.nuiton.jredmine.model.User; import org.nuiton.jredmine.model.Version; -import java.net.URL; - /** * To test the {@link RedmineAnonymousServiceJersey}. * @@ -58,22 +57,23 @@ private static final Log log = LogFactory.getLog(RedmineAnonymousServiceJerseyTest.class); - protected static RedmineServiceConfiguration configuration; + public static final String PROJECT_NAME = "jredmine"; - protected RedmineAnonymousServiceJersey service; + public static final String VERSION_NAME = "1.4"; + public static final String ISSUE_ID = "2030"; + + protected static RedmineFixtures fixtures; + + protected RedmineAnonymousService service; + @BeforeClass public static void beforeClass() throws Exception { - configuration = new FakeRedmineServiceConfiguration(); - configuration.setAnonymous(true); - configuration.setRestUrl(new URL("http://nuiton.org/jredmine")); - configuration.setVerbose(true); + fixtures = new RedmineFixtures(); // test if can access service RedmineAnonymousServiceJersey service = - new RedmineAnonymousServiceJersey(); - service.delegateImplementor = new RedmineServiceImplementorJersey(); - service.init(configuration); + fixtures.newRedmineAnonymousService(); int status = service.ping(); @@ -90,17 +90,19 @@ Assume.assumeTrue(status == 200); } + @AfterClass + public static void afterClass() { + fixtures = null; + } + @Before public void setUp() throws Exception { - - service = new RedmineAnonymousServiceJersey(); - service.delegateImplementor = new RedmineServiceImplementorJersey(); - service.init(configuration); + service = fixtures.newRedmineAnonymousService(); } @After public void tearDown() throws Exception { - service.destroy(); + ((RedmineServiceImplementor) service).destroy(); } @Test @@ -122,26 +124,15 @@ Assert.assertNotNull(issueStatuses); } - public static final String PROJECT_NAME = "jredmine"; - - public static final String VERSION_NAME = "1.4"; - - public static final String ISSUE_ID = "2030"; - @Test public void getProject() throws Exception { Project project = service.getProject(PROJECT_NAME); Assert.assertNotNull(project); - Assert.assertEquals(PROJECT_NAME, project.getName()); - Assert.assertEquals(PROJECT_NAME, project.getIdentifier()); - Assert.assertEquals(true, project.isIsPublic()); - Assert.assertEquals("http://maven-site.nuiton.org/jredmine", - project.getHomepage()); - Assert.assertEquals("Permet de communiquer en java avec un serveur " + - "redmine qui a installé le plugin rails jredmine", - project.getDescription()); - Assert.assertEquals(36, project.getId()); - Assert.assertEquals(1, project.getStatus()); + Project expected = fixtures.getJRedmineProject(); + TestHelper.assertMyEquals(Project.class, expected, project, + "name", "identifier", + "homepage", "description", + "id", "isPublic", "status"); } @Test Added: trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineFixtures.java =================================================================== --- trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineFixtures.java (rev 0) +++ trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineFixtures.java 2012-07-12 14:04:57 UTC (rev 269) @@ -0,0 +1,683 @@ +package org.nuiton.jredmine; + +import com.google.common.base.Charsets; +import com.google.common.collect.ArrayListMultimap; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.jredmine.model.Attachment; +import org.nuiton.jredmine.model.Issue; +import org.nuiton.jredmine.model.IssueCategory; +import org.nuiton.jredmine.model.IssuePriority; +import org.nuiton.jredmine.model.IssueStatus; +import org.nuiton.jredmine.model.News; +import org.nuiton.jredmine.model.Project; +import org.nuiton.jredmine.model.TimeEntry; +import org.nuiton.jredmine.model.Tracker; +import org.nuiton.jredmine.model.User; +import org.nuiton.jredmine.model.Version; +import org.nuiton.jredmine.model.io.xpp3.RedmineDataConverter; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.Date; +import java.util.List; +import java.util.Properties; + +/** + * fixtures of redmine model. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.4 + */ +public class RedmineFixtures { + + /** Logger. */ + private static final Log log = LogFactory.getLog(RedmineFixtures.class); + + public static final String FILE_TO_UPLOAD_CONTENT = "Fichier à uploader"; + + public static final String PROJECT_NAME = "jredmine"; + + public static final String VERSION_NAME = "1.3"; + + public static final String ISSUE_ID = "2030"; + + private Project JRedmineProject; + + private ArrayListMultimap<Class<?>, Object> model; + + private RedmineServiceConfiguration anonymousConfiguration; + + private RedmineServiceConfiguration logguedConfiguration; + + public RedmineServiceConfiguration getAnonymousConfiguration() + throws IOException { + if (anonymousConfiguration == null) { + + Properties props = new Properties(); + + InputStream inputStream = null; + try { + String jredmineConfiguration = System.getenv("jredmine-test.properties"); + if (jredmineConfiguration == null) { + if (log.isWarnEnabled()) { + log.warn("Could not find environement variable " + + "'jredmine-test.properties' will use " + + "default test configuration"); + } + + inputStream = getClass().getResourceAsStream("/test-config.properties"); + } else { + + File file = new File(jredmineConfiguration); + + if (!file.exists()) { + throw new IllegalStateException("Could not find " + jredmineConfiguration + + " file"); + } + inputStream = FileUtils.openInputStream(file); + } + props.load(inputStream); + } finally { + if (inputStream != null) { + inputStream.close(); + } + } + anonymousConfiguration = new FakeRedmineServiceConfiguration(); + + String url = props.getProperty("test.redmineUrl"); + anonymousConfiguration.setRestUrl(new URL(url)); + + String e = props.getProperty("test.encoding"); + anonymousConfiguration.setEncoding(e); + + String verbose = props.getProperty("test.verbose"); + if (StringUtils.isNotEmpty(verbose)) { + anonymousConfiguration.setVerbose(Boolean.valueOf(verbose)); + } + anonymousConfiguration.setEncoding(Charsets.UTF_8.name()); + anonymousConfiguration.setAnonymous(true); + + verbose = System.getenv("jredmine-test.verbose"); + if (StringUtils.isNotEmpty(verbose)) { + anonymousConfiguration.setVerbose(Boolean.valueOf(verbose)); + } + + } + return anonymousConfiguration; + } + + public RedmineServiceConfiguration getLogguedConfiguration() + throws IOException { + if (logguedConfiguration == null) { + + // use anonymous configuration + + RedmineServiceConfiguration anoConf = getAnonymousConfiguration(); + if (anoConf != null) { + logguedConfiguration = new FakeRedmineServiceConfiguration(); + copyConfiguration(anoConf, logguedConfiguration); + + // get system login password from env + String login = System.getenv("jredmine-test.login"); + String password = System.getenv("jredmine-test.password"); + logguedConfiguration.setRestUsername(login); + logguedConfiguration.setRestPassword(password); + logguedConfiguration.setAnonymous(false); + } + } + return logguedConfiguration; + } + + public void copyConfiguration(RedmineServiceConfiguration src, + RedmineServiceConfiguration dst) { + if (src.getRestUrl() != null) { + dst.setRestUrl(src.getRestUrl()); + } + if (src.getRestUsername() != null) { + dst.setRestUsername(src.getRestUsername()); + } + if (src.getRestPassword() != null) { + dst.setRestPassword(src.getRestPassword()); + } + if (src.getEncoding() != null) { + dst.setEncoding(src.getEncoding()); + } + + dst.setVerbose(src.isVerbose()); + dst.setAnonymous(src.isAnonymous()); + } + + public RedmineAnonymousServiceJersey newRedmineAnonymousService() + throws IOException, RedmineServiceException { + RedmineAnonymousServiceJersey service = new RedmineAnonymousServiceJersey(); + service.delegateImplementor = new RedmineServiceImplementorJersey(); + service.init(getAnonymousConfiguration()); + return service; + } + + public RedmineServiceJersey newRedmineService() + throws IOException, RedmineServiceException { + RedmineServiceJersey service = new RedmineServiceJersey(); + service.delegateImplementor = new RedmineServiceImplementorJersey(); + service.init(getLogguedConfiguration()); + return service; + } + + public DefaultRedmineService newLegacyRedmineService() + throws IOException, RedmineServiceException { + DefaultRedmineService service = new DefaultRedmineService(); + service.delegateImplementor = new DefaultRedmineServiceImplementor(); + service.init(getLogguedConfiguration()); + return service; + } + + public List<Attachment> getAttachments() { + return get(Attachment.class); + } + + public List<Issue> getIssues() { + return get(Issue.class); + } + + public List<Project> getProjects() { + return get(Project.class); + } + + public List<Tracker> getTrackers() { + return get(Tracker.class); + } + + public List<User> getUsers() { + return get(User.class); + } + + public List<Version> getVersions() { + return get(Version.class); + } + + public <T> List<T> get(Class<T> modelType) { + if (model == null) { + try { + loadModel(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + return (List<T>) model.get(modelType); + } + + public <T> T get(Class<T> type, int pos) { + List<T> ts = get(type); + return ts.get(pos); + } + + public Project getJRedmineProject() { + if (JRedmineProject == null) { + JRedmineProject = new Project(); + JRedmineProject.setName("jredmine"); + JRedmineProject.setIdentifier("jredmine"); + JRedmineProject.setIsPublic(true); + JRedmineProject.setHomepage("http://maven-site.nuiton.org/jredmine"); + JRedmineProject.setDescription( + "Permet de communiquer en java avec un serveur " + "redmine qui a installé le plugin rails jredmine"); + JRedmineProject.setId(36); + JRedmineProject.setStatus(1); + } + return JRedmineProject; + } + + + public static final String VERSION_TO_CREATE_NAME = "do_not_use_me"; + + public Version getVersion() { + Version version = new Version(); + version.setName(VERSION_TO_CREATE_NAME); + version.setDescription("Une version créée par les tests de jredmine," + + " ne pas utiliser,et modifiée"); + return version; + } + + private void loadModel() + throws Exception { + model = ArrayListMultimap.create(); + + Attachment tempA; + tempA = new Attachment(); + tempA.setAuthorId((Integer) RedmineDataConverter.Integer.convert("4")); + tempA.setContainerId((Integer) RedmineDataConverter.Integer.convert("1")); + tempA.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempA.setFilesize((Integer) RedmineDataConverter.Integer.convert("411")); + tempA.setDownloads((Integer) RedmineDataConverter.Integer.convert("0")); + tempA.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T12:56:41+02:00")); + tempA.setContainerType((String) RedmineDataConverter.Text.convert("Version")); + tempA.setContentType((String) RedmineDataConverter.Text.convert("application/json")); + tempA.setDigest((String) RedmineDataConverter.Text.convert("6ea84342c7475c05fb077b4aca832f9a")); + tempA.setDiskFilename((String) RedmineDataConverter.Text.convert("090905125641_get_issue.json")); + tempA.setFilename((String) RedmineDataConverter.Text.convert("get_issue.json")); + model.put(Attachment.class, tempA); + tempA = new Attachment(); + tempA.setAuthorId((Integer) RedmineDataConverter.Integer.convert("4")); + tempA.setContainerId((Integer) RedmineDataConverter.Integer.convert("1")); + tempA.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempA.setFilesize((Integer) RedmineDataConverter.Integer.convert("411")); + tempA.setDownloads((Integer) RedmineDataConverter.Integer.convert("0")); + tempA.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T12:56:41+02:00")); + tempA.setContainerType((String) RedmineDataConverter.Text.convert("Version")); + tempA.setContentType((String) RedmineDataConverter.Text.convert("application/json")); + tempA.setDigest((String) RedmineDataConverter.Text.convert("6ea84342c7475c05fb077b4aca832f9a")); + tempA.setDiskFilename((String) RedmineDataConverter.Text.convert("090905125641_get_issue.json2")); + tempA.setFilename((String) RedmineDataConverter.Text.convert("get_issue.json2")); + model.put(Attachment.class, tempA); + + Issue tempI; + tempI = new Issue(); + tempI.setAuthorId((Integer) RedmineDataConverter.Integer.convert("5")); + tempI.setCategoryId((Integer) RedmineDataConverter.Integer.convert("2")); + tempI.setDoneRatio((Integer) RedmineDataConverter.Integer.convert("0")); + tempI.setLockVersion((Integer) RedmineDataConverter.Integer.convert("7")); + tempI.setPriorityId((Integer) RedmineDataConverter.Integer.convert("4")); + tempI.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setStatusId((Integer) RedmineDataConverter.Integer.convert("3")); + tempI.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setFixedVersionId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setId((Integer) RedmineDataConverter.Integer.convert("3")); + tempI.setParentId((Integer) RedmineDataConverter.Integer.convert("3")); + tempI.setRootId((Integer) RedmineDataConverter.Integer.convert("3")); + tempI.setLft((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setRgt((Integer) RedmineDataConverter.Integer.convert("2")); + tempI.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T20:11:52+02:00")); + tempI.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T00:37:40+02:00")); + tempI.setStartDate((Date) RedmineDataConverter.Date.convert("2009-09-04")); + tempI.setDescription((String) RedmineDataConverter.Text.convert("avec une description !")); + tempI.setSubject((String) RedmineDataConverter.Text.convert("yes!")); + model.put(Issue.class, tempI); + tempI = new Issue(); + tempI.setAuthorId((Integer) RedmineDataConverter.Integer.convert("5")); + tempI.setCategoryId((Integer) RedmineDataConverter.Integer.convert("2")); + tempI.setDoneRatio((Integer) RedmineDataConverter.Integer.convert("0")); + tempI.setLockVersion((Integer) RedmineDataConverter.Integer.convert("7")); + tempI.setPriorityId((Integer) RedmineDataConverter.Integer.convert("4")); + tempI.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setStatusId((Integer) RedmineDataConverter.Integer.convert("3")); + tempI.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setFixedVersionId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setId((Integer) RedmineDataConverter.Integer.convert("4")); + tempI.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T20:11:52+02:00")); + tempI.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T00:37:40+02:00")); + tempI.setStartDate((Date) RedmineDataConverter.Date.convert("2009-09-04")); + tempI.setDescription((String) RedmineDataConverter.Text.convert("avec une description !2")); + tempI.setSubject((String) RedmineDataConverter.Text.convert("yes!2")); + model.put(Issue.class, tempI); + + Project tempP; + tempP = new Project(); + tempP.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); + tempP.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); + tempP.setIdentifier((String) RedmineDataConverter.Text.convert("one")); + tempP.setName((String) RedmineDataConverter.Text.convert("one")); + tempP.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempP.setLft((Integer) RedmineDataConverter.Integer.convert("1")); + tempP.setRgt((Integer) RedmineDataConverter.Integer.convert("2")); + tempP.setProjectsCount((Integer) RedmineDataConverter.Integer.convert("0")); + tempP.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + tempP.setIsPublic((Boolean) RedmineDataConverter.Boolean.convert("true")); + model.put(Project.class, tempP); + tempP = new Project(); + tempP.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:22:14+02:00")); + tempP.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:22:29+02:00")); + tempP.setIdentifier((String) RedmineDataConverter.Text.convert("two")); + tempP.setName((String) RedmineDataConverter.Text.convert("two")); + tempP.setId((Integer) RedmineDataConverter.Integer.convert("2")); + tempP.setProjectsCount((Integer) RedmineDataConverter.Integer.convert("0")); + tempP.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + tempP.setIsPublic((Boolean) RedmineDataConverter.Boolean.convert("false")); + model.put(Project.class, tempP); + + Tracker tempT; + tempT = new Tracker(); + tempT.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempT.setName((String) RedmineDataConverter.Text.convert("Anomalie")); + model.put(Tracker.class, tempT); + tempT = new Tracker(); + tempT.setId((Integer) RedmineDataConverter.Integer.convert("2")); + tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempT.setName((String) RedmineDataConverter.Text.convert("Evolution")); + tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("2")); + tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("2")); + model.put(Tracker.class, tempT); + tempT = new Tracker(); + tempT.setId((Integer) RedmineDataConverter.Integer.convert("3")); + tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempT.setName((String) RedmineDataConverter.Text.convert("Assistance")); + tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("3")); + tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("3")); + model.put(Tracker.class, tempT); + + User tempU; + tempU = new User(); + tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T17:24:46+02:00")); + tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); + tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); + tempU.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("5")); + tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); + tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempU.setFirstname((String) RedmineDataConverter.Text.convert("Redmine")); + tempU.setHashedPassword( + (String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); + tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); + tempU.setLastname((String) RedmineDataConverter.Text.convert("Admin")); + tempU.setLogin((String) RedmineDataConverter.Text.convert("admin")); + tempU.setMail((String) RedmineDataConverter.Text.convert("dummy@codelutin.com")); + tempU.setIdentityUrl((String) RedmineDataConverter.Text.convert("yo")); + model.put(User.class, tempU); + tempU = new User(); + tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:02+02:00")); + tempU.setFirstname((String) RedmineDataConverter.Text.convert("tony")); + tempU.setHashedPassword( + (String) RedmineDataConverter.Text.convert("8aed1322e5450badb078e1fb60a817a1df25a2ca")); + tempU.setId((Integer) RedmineDataConverter.Integer.convert("5")); + tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); + tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:38+02:00")); + tempU.setLastname((String) RedmineDataConverter.Text.convert("chemit2")); + tempU.setLogin((String) RedmineDataConverter.Text.convert("tchemit2")); + tempU.setMail((String) RedmineDataConverter.Text.convert("chemit@codelutin.com")); + tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("4")); + tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); + tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:38+02:00")); + model.put(User.class, tempU); + tempU = new User(); + tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:24:11+02:00")); + tempU.setFirstname((String) RedmineDataConverter.Text.convert("dev")); + tempU.setHashedPassword( + (String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); + tempU.setId((Integer) RedmineDataConverter.Integer.convert("7")); + tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); + tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T16:34:39+02:00")); + tempU.setLastname((String) RedmineDataConverter.Text.convert("dev")); + tempU.setLogin((String) RedmineDataConverter.Text.convert("dev")); + tempU.setMail((String) RedmineDataConverter.Text.convert("dev3@ynot-home.info")); + tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("9")); + tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("4")); + tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T16:34:39+02:00")); + model.put(User.class, tempU); + + Version tempV; + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:47:39+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("yo")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("9")); + tempV.setName((String) RedmineDataConverter.Text.convert("yor")); + tempV.setSharing((String) RedmineDataConverter.Text.convert("none")); + tempV.setStatus((String) RedmineDataConverter.Text.convert("open")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:50:49+02:00")); + model.put(Version.class, tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:09+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("13")); + tempV.setName((String) RedmineDataConverter.Text.convert("rrrrrrrrrouuuuuua")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:09+02:00")); + model.put(Version.class, tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:07:58+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("15")); + tempV.setName((String) RedmineDataConverter.Text.convert("aaaauuuuuua")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:07:58+02:00")); + model.put(Version.class, tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T04:12:25+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoyeppppppppppppppppp")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("16")); + tempV.setName((String) RedmineDataConverter.Text.convert("aaaau")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T04:13:20+02:00")); + model.put(Version.class, tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:40+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("14")); + tempV.setName((String) RedmineDataConverter.Text.convert("aaaaaaaaaarrrrrrrrrouuuuuua")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:40+02:00")); + model.put(Version.class, tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T00:39:15+02:00")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("5")); + tempV.setName((String) RedmineDataConverter.Text.convert("2")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T00:39:15+02:00")); + model.put(Version.class, tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setName((String) RedmineDataConverter.Text.convert("1.0.0")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); + model.put(Version.class, tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:12+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("yoye")); + tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("11")); + tempV.setName((String) RedmineDataConverter.Text.convert("yaouuuuuua")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:12+02:00")); + model.put(Version.class, tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:50:59+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("yoye")); + tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("10")); + tempV.setName((String) RedmineDataConverter.Text.convert("ya")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:54:16+02:00")); + model.put(Version.class, tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:37+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("12")); + tempV.setName((String) RedmineDataConverter.Text.convert("ouuuuuua")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:42+02:00")); + model.put(Version.class, tempV); + + IssueStatus tempIS; + tempIS = new IssueStatus(); + tempIS.setId(1); + tempIS.setName("Nouveau"); + tempIS.setPosition(1); + tempIS.setDefaultDoneRatio(10); + tempIS.setIsClosed(false); + tempIS.setIsDefault(true); + model.put(IssueStatus.class, tempIS); + tempIS = new IssueStatus(); + tempIS.setId(2); + tempIS.setName("Assigné"); + tempIS.setPosition(2); + tempIS.setIsClosed(false); + tempIS.setIsDefault(false); + model.put(IssueStatus.class, tempIS); + tempIS = new IssueStatus(); + tempIS.setId(3); + tempIS.setName("Résolu"); + tempIS.setPosition(3); + tempIS.setIsClosed(false); + tempIS.setIsDefault(false); + model.put(IssueStatus.class, tempIS); + tempIS = new IssueStatus(); + tempIS.setId(4); + tempIS.setName("Commentaire"); + tempIS.setPosition(4); + tempIS.setIsClosed(false); + tempIS.setIsDefault(false); + model.put(IssueStatus.class, tempIS); + tempIS = new IssueStatus(); + tempIS.setId(5); + tempIS.setName("Fermé"); + tempIS.setPosition(5); + tempIS.setIsClosed(true); + tempIS.setIsDefault(false); + model.put(IssueStatus.class, tempIS); + tempIS = new IssueStatus(); + tempIS.setId(6); + tempIS.setPosition(6); + tempIS.setName("Rejeté"); + tempIS.setIsClosed(true); + tempIS.setIsDefault(false); + model.put(IssueStatus.class, tempIS); + + IssuePriority tempIP; + tempIP = new IssuePriority(); + tempIP.setId(3); + tempIP.setParentId(1); + tempIP.setProjectId(2); + tempIP.setName("Bas"); + tempIP.setPosition(1); + tempIP.setOpt("IPRI"); + tempIP.setIsDefault(false); + tempIP.setActive(true); + model.put(IssuePriority.class, tempIP); + tempIP = new IssuePriority(); + tempIP.setId(4); + tempIP.setName("Normal"); + tempIP.setPosition(2); + tempIP.setOpt("IPRI"); + tempIP.setIsDefault(true); + model.put(IssuePriority.class, tempIP); + tempIP = new IssuePriority(); + tempIP.setId(5); + tempIP.setName("Haut"); + tempIP.setPosition(3); + tempIP.setOpt("IPRI"); + tempIP.setIsDefault(false); + model.put(IssuePriority.class, tempIP); + tempIP = new IssuePriority(); + tempIP.setId(6); + tempIP.setName("Urgent"); + tempIP.setPosition(4); + tempIP.setOpt("IPRI"); + tempIP.setIsDefault(false); + model.put(IssuePriority.class, tempIP); + tempIP = new IssuePriority(); + tempIP.setId(7); + tempIP.setName("Immédiat"); + tempIP.setPosition(5); + tempIP.setOpt("IPRI"); + tempIP.setIsDefault(false); + model.put(IssuePriority.class, tempIP); + + IssueCategory tempIC; + tempIC = new IssueCategory(); + tempIC.setId(1); + tempIC.setName("categorie one"); + tempIC.setProjectId(1); + model.put(IssueCategory.class, tempIC); + tempIC = new IssueCategory(); + tempIC.setId(2); + tempIC.setName("categorie two"); + tempIC.setProjectId(1); + model.put(IssueCategory.class, tempIC); + + News tempN; + tempN = new News(); + tempN.setId(85); + tempN.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-17T21:50:26+02:00")); + tempN.setProjectId(1); + tempN.setAuthorId(4); + tempN.setCommentsCount(0); + tempN.setDescription("description"); + tempN.setSummary("summary"); + tempN.setTitle("title"); + model.put(News.class, tempN); + tempN = new News(); + tempN.setId(86); + tempN.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-17T21:55:26+02:00")); + tempN.setProjectId(1); + tempN.setAuthorId(4); + tempN.setCommentsCount(0); + tempN.setDescription("description2"); + tempN.setSummary("summary2"); + tempN.setTitle("title2"); + model.put(News.class, tempN); + + TimeEntry tempE; + + tempE = new TimeEntry(); + tempE.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-12-31T23:02:02+01:00")); + tempE.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-12-31T23:02:02+01:00")); + tempE.setSpentOn((Date) RedmineDataConverter.Date.convert("2009-12-31")); + tempE.setId(1); + tempE.setProjectId(1); + tempE.setUserId(4); + tempE.setIssueId(6); + tempE.setActivityId(8); + + tempE.setHours(1); + tempE.setTmonth(12); + tempE.setTyear(2009); + tempE.setTweek(53); + tempE.setComments("Test"); + model.put(TimeEntry.class, tempE); + + tempE = new TimeEntry(); + tempE.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-12-31T23:10:01+01:00")); + tempE.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-12-31T23:10:01+01:00")); + tempE.setSpentOn((Date) RedmineDataConverter.Date.convert("2009-12-31")); + tempE.setId(2); + tempE.setProjectId(1); + tempE.setUserId(4); + tempE.setIssueId(6); + tempE.setActivityId(9); + + tempE.setHours(2); + tempE.setTmonth(12); + tempE.setTyear(2009); + tempE.setTweek(53); + tempE.setComments("deuxième temps"); + model.put(TimeEntry.class, tempE); + } + + + public Attachment getAttachment() { + Attachment result = new Attachment(); + File fileToUpload = null; + try { + fileToUpload = File.createTempFile("toupload", ".txt"); + FileUtils.write(fileToUpload, FILE_TO_UPLOAD_CONTENT); + result.setToUpload(fileToUpload); + result.setDescription("attachment description..."); + return result; + } catch (IOException e) { + throw new RuntimeException("Could not create temp file", e); + } + + } +} Added: trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineServiceJerseyTest.java =================================================================== --- trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineServiceJerseyTest.java (rev 0) +++ trunk/jredmine-client/src/test/java/org/nuiton/jredmine/RedmineServiceJerseyTest.java 2012-07-12 14:04:57 UTC (rev 269) @@ -0,0 +1,149 @@ +package org.nuiton.jredmine; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Assume; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; +import org.nuiton.jredmine.model.Attachment; +import org.nuiton.jredmine.model.Project; +import org.nuiton.jredmine.model.Version; + +/** + * Test the {@link RedmineServiceJersey}. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.4 + */ +public class RedmineServiceJerseyTest { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(RedmineServiceJerseyTest.class); + + protected static RedmineFixtures fixtures; + + protected RedmineService service; + + @BeforeClass + public static void beforeClass() throws Exception { + + fixtures = new RedmineFixtures(); + + // test if can access service + RedmineServiceJersey service = fixtures.newRedmineService(); + + try { + int status = service.ping(); + + if (status != 200) { + + // ping was not ok + if (log.isInfoEnabled()) { + log.info("Will skip test " + + RedmineAnonymousServiceJerseyTest.class.getName() + + ", since ping status is " + status + + " (should be 200 to pass tests...)"); + } + } + Assume.assumeTrue(status == 200); + + try { + service.login(); + } catch (RedmineServiceLoginException e) { + // ping was not ok + if (log.isInfoEnabled()) { + log.info("Will skip test " + + RedmineAnonymousServiceJerseyTest.class.getName() + + ", since login was bad : " + e.getMessage(), e); + } + + Assume.assumeTrue(false); + } + } finally { + service.destroy(); + } + } + + @AfterClass + public static void afterClass() { + fixtures = null; + } + + @Before + public void setUp() throws Exception { + service = fixtures.newRedmineService(); + } + + @After + public void tearDown() throws Exception { + ((RedmineServiceImplementor) service).destroy(); + } + + @Ignore + @Test + public void getUserProjects() throws Exception { + Project[] projects = service.getUserProjects(); + Assert.assertNotNull(projects); + } + + @Ignore + @Test + public void addVersion() throws Exception { + + Version version = fixtures.getVersion(); + Version createdVersion = service.addVersion( + RedmineFixtures.PROJECT_NAME, + version + ); + Assert.assertNotNull(createdVersion); + } + + @Ignore + @Test + public void updateVersion() throws Exception { + Version version = fixtures.getVersion(); + version.setDescription(version.getDescription() + " updated"); + Version updatedVersion = service.updateVersion( + RedmineFixtures.PROJECT_NAME, + version + ); + Assert.assertNotNull(updatedVersion); + } + + @Ignore + @Test + public void nextVersion() throws Exception { + + } + + @Test + public void addAttachment() throws Exception { + + Version version = fixtures.getVersion(); + Attachment attachment = fixtures.getAttachment(); + Attachment updatedAttachment = service.addAttachment( + RedmineFixtures.PROJECT_NAME, + version.getName(), + attachment + ); + Assert.assertNotNull(updatedAttachment); + } + + @Ignore + @Test + public void addNews() throws Exception { + + } + + @Ignore + @Test + public void addIssueTimeEntry() throws Exception { + + } +} Modified: trunk/jredmine-client/src/test/java/org/nuiton/jredmine/TestHelper.java =================================================================== --- trunk/jredmine-client/src/test/java/org/nuiton/jredmine/TestHelper.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/test/java/org/nuiton/jredmine/TestHelper.java 2012-07-12 14:04:57 UTC (rev 269) @@ -24,36 +24,14 @@ */ package org.nuiton.jredmine; +import com.google.common.collect.Lists; import junit.framework.Assert; -import org.nuiton.io.rest.DefaultRestClientConfiguration; -import org.nuiton.io.rest.RestClientConfiguration; import org.nuiton.io.xpp3.AbstractXpp3Reader; import org.nuiton.io.xpp3.PropertyMapper; import org.nuiton.io.xpp3.Xpp3Helper; -import org.nuiton.jredmine.model.Attachment; -import org.nuiton.jredmine.model.Issue; -import org.nuiton.jredmine.model.IssueCategory; -import org.nuiton.jredmine.model.IssuePriority; -import org.nuiton.jredmine.model.IssueStatus; -import org.nuiton.jredmine.model.News; -import org.nuiton.jredmine.model.Project; -import org.nuiton.jredmine.model.RedmineModelEnum; -import org.nuiton.jredmine.model.TimeEntry; -import org.nuiton.jredmine.model.Tracker; -import org.nuiton.jredmine.model.User; -import org.nuiton.jredmine.model.Version; -import org.nuiton.jredmine.model.io.xpp3.RedmineDataConverter; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.ArrayList; -import java.util.Date; -import java.util.EnumMap; import java.util.List; import java.util.Map; -import java.util.Properties; /** * @author tchemit <chemit@codelutin.com> @@ -61,208 +39,9 @@ */ public abstract class TestHelper { - protected static File basedir; + public static <T> void assertMyListEquals(Class<T> type, List<T> expecteds, T[] actuals) + throws Exception { - protected static RestClientConfiguration DEFAULT_CONFIGURATION; - - protected static Properties defaultConfig; - - protected static Properties userConfig; - - protected static EnumMap<RedmineModelEnum, List<?>> memoryModel; - - public static void initDefaultConfiguration() throws IOException { - - if (DEFAULT_CONFIGURATION != null) { - // deja execute - return; - } - - defaultConfig = new Properties(); - InputStream stream = TestHelper.class.getResourceAsStream( - "/test-config.properties"); - try { - defaultConfig.load(stream); - } finally { - stream.close(); - } - - userConfig = new Properties(defaultConfig); - for (String key : System.getenv().keySet()) { - String env = System.getenv(key); - if (key.startsWith("test.") && env != null && !env.trim().isEmpty()) { - userConfig.setProperty(key, env); - } - } - - RestClientConfiguration configuration = new DefaultRestClientConfiguration(); - - String url = userConfig.getProperty("test.redmineUrl"); - configuration.setRestUrl(new URL(url)); - - String username = userConfig.getProperty("test.redmineUsername"); - configuration.setRestUsername(username); - - String password = userConfig.getProperty("test.redminePassword"); - configuration.setRestPassword(password); - - String e = userConfig.getProperty("test.encoding"); - configuration.setEncoding(e); - - String v = userConfig.getProperty("test.verbose"); - configuration.setVerbose(Boolean.valueOf(v)); - - if (configuration.isVerbose()) { - System.out.println("default properties =============================="); - defaultConfig.list(System.out); - - System.out.println("users properties =============================="); - userConfig.list(System.out); - } - System.out.println("DEFAULT CONFIGURATION :\n" + configuration); - DEFAULT_CONFIGURATION = configuration; - } - - public static RestClientConfiguration getTestConfiguration() throws IOException { - - if (DEFAULT_CONFIGURATION == null) { - initDefaultConfiguration(); - } - - RestClientConfiguration configuration = new DefaultRestClientConfiguration(); - copyConfiguration(DEFAULT_CONFIGURATION, configuration); - - if (isVerbose()) { - System.out.println("will use configuration : " + configuration); - } - return configuration; - } - - public static void copyConfiguration(RestClientConfiguration src, RestClientConfiguration dst) { - if (src.getRestUrl() != null) { - dst.setRestUrl(src.getRestUrl()); - } - if (src.getRestUsername() != null) { - dst.setRestUsername(src.getRestUsername()); - } - if (src.getRestPassword() != null) { - dst.setRestPassword(src.getRestPassword()); - } - if (src.getEncoding() != null) { - dst.setEncoding(src.getEncoding()); - } - - dst.setVerbose(src.isVerbose()); - } - - /** @return the basedir for all tests */ - public static File getBasedir() { - if (basedir == null) { - String path = System.getenv("basedir"); - basedir = new File(path == null ? new File("").getAbsolutePath() : path); - if (isVerbose()) { - System.out.println("basedir = " + basedir.getAbsolutePath()); - } - } - return basedir; - } - - public static void setBasedir(File basedir) { - TestHelper.basedir = basedir; - } - - public static boolean isVerbose() { - if (DEFAULT_CONFIGURATION == null) { - try { - initDefaultConfiguration(); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - return DEFAULT_CONFIGURATION.isVerbose(); - } - - public static File getTestDir(String type, String prefix) { - String rep = type; - rep = rep.replaceAll("\\.", File.separator); - - File f = new File(getBasedir(), prefix); - File testDir = new File(f, rep); - return testDir; - } - - public static File getFile(File base, String... paths) { - StringBuilder buffer = new StringBuilder(); - for (String path : paths) { - buffer.append(File.separator).append(path); - } - File f = new File(base, buffer.substring(1)); - return f; - } - - public static String getRelativePath(File base, File file) { - String result = file.getAbsolutePath().substring(base.getAbsolutePath().length() + 1); - return result; - } - - public static List<Attachment> getAttachments() { - return getModel(Attachment.class); - } - - public static List<Issue> getIssues() { - return getModel(Issue.class); - } - - public static List<Project> getProjects() { - return getModel(Project.class); - } - - public static List<Tracker> getTrackers() { - return getModel(Tracker.class); - } - - public static List<User> getUsers() { - return getModel(User.class); - } - - public static List<Version> getVersions() { - return getModel(Version.class); - } - - @SuppressWarnings("unchecked") - public static <T> List<T> getModel(Class<T> type) { - if (memoryModel == null) { - try { - loadMemoryModel(); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - return (List<T>) memoryModel.get(RedmineModelEnum.valueOf(type)); - } - - public static <T> T getModel(Class<T> type, int pos) { - if (memoryModel == null) { - try { - loadMemoryModel(); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - List<T> ts = (List<T>) memoryModel.get(RedmineModelEnum.valueOf(type)); - return ts.get(pos); - } - - public static void tearDownClass() throws Exception { - //basedir = null; - if (memoryModel != null) { - memoryModel.clear(); - memoryModel = null; - } - } - - public static <T> void assertMyListEquals(Class<T> type, List<T> expecteds, T[] actuals) throws Exception { - Assert.assertNotNull(actuals); Assert.assertEquals(expecteds.size(), actuals.length); for (int i = 0, j = expecteds.size(); i < j; i++) { @@ -273,491 +52,30 @@ } - public static void assertMyEquals(Class<?> type, Object expected, Object actual) throws Exception { + public static void assertMyEquals(Class<?> type, Object expected, Object actual, String... mapperNames) + throws Exception { Assert.assertNotNull(expected); Assert.assertNotNull(actual); AbstractXpp3Reader<?> reader = (AbstractXpp3Reader<?>) Xpp3Helper.getReader(type); Map<String, PropertyMapper> mappers = reader.getMappers(type); + List<String> mappersIncludes; + if (mapperNames != null && mapperNames.length > 0) { + mappersIncludes = Lists.newArrayList(mapperNames); + } else { + mappersIncludes = null; + } for (PropertyMapper m : mappers.values()) { - Object expectedValue = m.getDescriptor().getReadMethod().invoke(expected); - Object actualValue = m.getDescriptor().getReadMethod().invoke(actual); + if (mappersIncludes == null || mappersIncludes.contains(m.getPropertyName())) { - Assert.assertEquals("error in attribute " + m.getPropertyName() + " for " + expected, expectedValue, actualValue); + Object expectedValue = m.getDescriptor().getReadMethod().invoke(expected); + Object actualValue = m.getDescriptor().getReadMethod().invoke(actual); + + Assert.assertEquals("error in attribute " + m.getPropertyName() + " for " + expected, expectedValue, + actualValue); + } } } - public static EnumMap<RedmineModelEnum, List<?>> getMemoryModel() { - return memoryModel; - } - - public static void loadMemoryModel() throws Exception { - - List<Object> list; - - memoryModel = new EnumMap<RedmineModelEnum, List<?>>(RedmineModelEnum.class); - - list = new ArrayList<Object>(); - Attachment tempA; - tempA = new Attachment(); - tempA.setAuthorId((Integer) RedmineDataConverter.Integer.convert("4")); - tempA.setContainerId((Integer) RedmineDataConverter.Integer.convert("1")); - tempA.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempA.setFilesize((Integer) RedmineDataConverter.Integer.convert("411")); - tempA.setDownloads((Integer) RedmineDataConverter.Integer.convert("0")); - tempA.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T12:56:41+02:00")); - tempA.setContainerType((String) RedmineDataConverter.Text.convert("Version")); - tempA.setContentType((String) RedmineDataConverter.Text.convert("application/json")); - tempA.setDigest((String) RedmineDataConverter.Text.convert("6ea84342c7475c05fb077b4aca832f9a")); - tempA.setDiskFilename((String) RedmineDataConverter.Text.convert("090905125641_get_issue.json")); - tempA.setFilename((String) RedmineDataConverter.Text.convert("get_issue.json")); - list.add(tempA); - tempA = new Attachment(); - tempA.setAuthorId((Integer) RedmineDataConverter.Integer.convert("4")); - tempA.setContainerId((Integer) RedmineDataConverter.Integer.convert("1")); - tempA.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempA.setFilesize((Integer) RedmineDataConverter.Integer.convert("411")); - tempA.setDownloads((Integer) RedmineDataConverter.Integer.convert("0")); - tempA.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T12:56:41+02:00")); - tempA.setContainerType((String) RedmineDataConverter.Text.convert("Version")); - tempA.setContentType((String) RedmineDataConverter.Text.convert("application/json")); - tempA.setDigest((String) RedmineDataConverter.Text.convert("6ea84342c7475c05fb077b4aca832f9a")); - tempA.setDiskFilename((String) RedmineDataConverter.Text.convert("090905125641_get_issue.json2")); - tempA.setFilename((String) RedmineDataConverter.Text.convert("get_issue.json2")); - list.add(tempA); - - memoryModel.put(RedmineModelEnum.attachment, list); - - - list = new ArrayList<Object>(); - Issue tempI; - tempI = new Issue(); - tempI.setAuthorId((Integer) RedmineDataConverter.Integer.convert("5")); - tempI.setCategoryId((Integer) RedmineDataConverter.Integer.convert("2")); - tempI.setDoneRatio((Integer) RedmineDataConverter.Integer.convert("0")); - tempI.setLockVersion((Integer) RedmineDataConverter.Integer.convert("7")); - tempI.setPriorityId((Integer) RedmineDataConverter.Integer.convert("4")); - tempI.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setStatusId((Integer) RedmineDataConverter.Integer.convert("3")); - tempI.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setFixedVersionId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setId((Integer) RedmineDataConverter.Integer.convert("3")); - tempI.setParentId((Integer) RedmineDataConverter.Integer.convert("3")); - tempI.setRootId((Integer) RedmineDataConverter.Integer.convert("3")); - tempI.setLft((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setRgt((Integer) RedmineDataConverter.Integer.convert("2")); - tempI.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T20:11:52+02:00")); - tempI.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T00:37:40+02:00")); - tempI.setStartDate((Date) RedmineDataConverter.Date.convert("2009-09-04")); - tempI.setDescription((String) RedmineDataConverter.Text.convert("avec une description !")); - tempI.setSubject((String) RedmineDataConverter.Text.convert("yes!")); - list.add(tempI); - tempI = new Issue(); - tempI.setAuthorId((Integer) RedmineDataConverter.Integer.convert("5")); - tempI.setCategoryId((Integer) RedmineDataConverter.Integer.convert("2")); - tempI.setDoneRatio((Integer) RedmineDataConverter.Integer.convert("0")); - tempI.setLockVersion((Integer) RedmineDataConverter.Integer.convert("7")); - tempI.setPriorityId((Integer) RedmineDataConverter.Integer.convert("4")); - tempI.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setStatusId((Integer) RedmineDataConverter.Integer.convert("3")); - tempI.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setFixedVersionId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setId((Integer) RedmineDataConverter.Integer.convert("4")); - tempI.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T20:11:52+02:00")); - tempI.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T00:37:40+02:00")); - tempI.setStartDate((Date) RedmineDataConverter.Date.convert("2009-09-04")); - tempI.setDescription((String) RedmineDataConverter.Text.convert("avec une description !2")); - tempI.setSubject((String) RedmineDataConverter.Text.convert("yes!2")); - list.add(tempI); - - memoryModel.put(RedmineModelEnum.issue, list); - - - list = new ArrayList<Object>(); - Project tempP; - tempP = new Project(); - tempP.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); - tempP.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); - tempP.setIdentifier((String) RedmineDataConverter.Text.convert("one")); - tempP.setName((String) RedmineDataConverter.Text.convert("one")); - tempP.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempP.setLft((Integer) RedmineDataConverter.Integer.convert("1")); - tempP.setRgt((Integer) RedmineDataConverter.Integer.convert("2")); - tempP.setProjectsCount((Integer) RedmineDataConverter.Integer.convert("0")); - tempP.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); - tempP.setIsPublic((Boolean) RedmineDataConverter.Boolean.convert("true")); - list.add(tempP); - tempP = new Project(); - tempP.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:22:14+02:00")); - tempP.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:22:29+02:00")); - tempP.setIdentifier((String) RedmineDataConverter.Text.convert("two")); - tempP.setName((String) RedmineDataConverter.Text.convert("two")); - tempP.setId((Integer) RedmineDataConverter.Integer.convert("2")); - tempP.setProjectsCount((Integer) RedmineDataConverter.Integer.convert("0")); - tempP.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); - tempP.setIsPublic((Boolean) RedmineDataConverter.Boolean.convert("false")); - list.add(tempP); - - - memoryModel.put(RedmineModelEnum.project, list); - - - list = new ArrayList<Object>(); - Tracker tempT; - tempT = new Tracker(); - tempT.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempT.setName((String) RedmineDataConverter.Text.convert("Anomalie")); - list.add(tempT); - tempT = new Tracker(); - tempT.setId((Integer) RedmineDataConverter.Integer.convert("2")); - tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempT.setName((String) RedmineDataConverter.Text.convert("Evolution")); - tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("2")); - tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("2")); - list.add(tempT); - tempT = new Tracker(); - tempT.setId((Integer) RedmineDataConverter.Integer.convert("3")); - tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempT.setName((String) RedmineDataConverter.Text.convert("Assistance")); - tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("3")); - tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("3")); - list.add(tempT); - - - memoryModel.put(RedmineModelEnum.tracker, list); - - - list = new ArrayList<Object>(); - User tempU; - tempU = new User(); - tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T17:24:46+02:00")); - tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); - tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); - tempU.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("5")); - tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); - tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); - tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempU.setFirstname((String) RedmineDataConverter.Text.convert("Redmine")); - tempU.setHashedPassword((String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); - tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); - tempU.setLastname((String) RedmineDataConverter.Text.convert("Admin")); - tempU.setLogin((String) RedmineDataConverter.Text.convert("admin")); - tempU.setMail((String) RedmineDataConverter.Text.convert("dummy@codelutin.com")); - tempU.setIdentityUrl((String) RedmineDataConverter.Text.convert("yo")); - list.add(tempU); - tempU = new User(); - tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:02+02:00")); - tempU.setFirstname((String) RedmineDataConverter.Text.convert("tony")); - tempU.setHashedPassword((String) RedmineDataConverter.Text.convert("8aed1322e5450badb078e1fb60a817a1df25a2ca")); - tempU.setId((Integer) RedmineDataConverter.Integer.convert("5")); - tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); - tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:38+02:00")); - tempU.setLastname((String) RedmineDataConverter.Text.convert("chemit2")); - tempU.setLogin((String) RedmineDataConverter.Text.convert("tchemit2")); - tempU.setMail((String) RedmineDataConverter.Text.convert("chemit@codelutin.com")); - tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("4")); - tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); - tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); - tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:38+02:00")); - list.add(tempU); - tempU = new User(); - tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:24:11+02:00")); - tempU.setFirstname((String) RedmineDataConverter.Text.convert("dev")); - tempU.setHashedPassword((String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); - tempU.setId((Integer) RedmineDataConverter.Integer.convert("7")); - tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); - tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T16:34:39+02:00")); - tempU.setLastname((String) RedmineDataConverter.Text.convert("dev")); - tempU.setLogin((String) RedmineDataConverter.Text.convert("dev")); - tempU.setMail((String) RedmineDataConverter.Text.convert("dev3@ynot-home.info")); - tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("9")); - tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("4")); - tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); - tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T16:34:39+02:00")); - list.add(tempU); - - memoryModel.put(RedmineModelEnum.user, list); - - - list = new ArrayList<Object>(); - Version tempV; - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:47:39+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("yo")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("9")); - tempV.setName((String) RedmineDataConverter.Text.convert("yor")); - tempV.setSharing((String) RedmineDataConverter.Text.convert("none")); - tempV.setStatus((String) RedmineDataConverter.Text.convert("open")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:50:49+02:00")); - list.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:09+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("13")); - tempV.setName((String) RedmineDataConverter.Text.convert("rrrrrrrrrouuuuuua")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:09+02:00")); - list.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:07:58+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("15")); - tempV.setName((String) RedmineDataConverter.Text.convert("aaaauuuuuua")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:07:58+02:00")); - list.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T04:12:25+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoyeppppppppppppppppp")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("16")); - tempV.setName((String) RedmineDataConverter.Text.convert("aaaau")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T04:13:20+02:00")); - list.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:40+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("14")); - tempV.setName((String) RedmineDataConverter.Text.convert("aaaaaaaaaarrrrrrrrrouuuuuua")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:40+02:00")); - list.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T00:39:15+02:00")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("5")); - tempV.setName((String) RedmineDataConverter.Text.convert("2")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T00:39:15+02:00")); - list.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setName((String) RedmineDataConverter.Text.convert("1.0.0")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); - list.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:12+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("yoye")); - tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("11")); - tempV.setName((String) RedmineDataConverter.Text.convert("yaouuuuuua")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:12+02:00")); - list.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:50:59+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("yoye")); - tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("10")); - tempV.setName((String) RedmineDataConverter.Text.convert("ya")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:54:16+02:00")); - list.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:37+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); - tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("12")); - tempV.setName((String) RedmineDataConverter.Text.convert("ouuuuuua")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:42+02:00")); - list.add(tempV); - - memoryModel.put(RedmineModelEnum.version, list); - - - IssueStatus tempIS; - list = new ArrayList<Object>(); - tempIS = new IssueStatus(); - tempIS.setId(1); - tempIS.setName("Nouveau"); - tempIS.setPosition(1); - tempIS.setDefaultDoneRatio(10); - tempIS.setIsClosed(false); - tempIS.setIsDefault(true); - list.add(tempIS); - tempIS = new IssueStatus(); - tempIS.setId(2); - tempIS.setName("Assigné"); - tempIS.setPosition(2); - tempIS.setIsClosed(false); - tempIS.setIsDefault(false); - list.add(tempIS); - tempIS = new IssueStatus(); - tempIS.setId(3); - tempIS.setName("Résolu"); - tempIS.setPosition(3); - tempIS.setIsClosed(false); - tempIS.setIsDefault(false); - list.add(tempIS); - tempIS = new IssueStatus(); - tempIS.setId(4); - tempIS.setName("Commentaire"); - tempIS.setPosition(4); - tempIS.setIsClosed(false); - tempIS.setIsDefault(false); - list.add(tempIS); - tempIS = new IssueStatus(); - tempIS.setId(5); - tempIS.setName("Fermé"); - tempIS.setPosition(5); - tempIS.setIsClosed(true); - tempIS.setIsDefault(false); - list.add(tempIS); - tempIS = new IssueStatus(); - tempIS.setId(6); - tempIS.setPosition(6); - tempIS.setName("Rejeté"); - tempIS.setIsClosed(true); - tempIS.setIsDefault(false); - list.add(tempIS); - - memoryModel.put(RedmineModelEnum.issueStatus, list); - - - IssuePriority tempIP; - list = new ArrayList<Object>(); - tempIP = new IssuePriority(); - tempIP.setId(3); - tempIP.setParentId(1); - tempIP.setProjectId(2); - tempIP.setName("Bas"); - tempIP.setPosition(1); - tempIP.setOpt("IPRI"); - tempIP.setIsDefault(false); - tempIP.setActive(true); - list.add(tempIP); - tempIP = new IssuePriority(); - tempIP.setId(4); - tempIP.setName("Normal"); - tempIP.setPosition(2); - tempIP.setOpt("IPRI"); - tempIP.setIsDefault(true); - list.add(tempIP); - tempIP = new IssuePriority(); - tempIP.setId(5); - tempIP.setName("Haut"); - tempIP.setPosition(3); - tempIP.setOpt("IPRI"); - tempIP.setIsDefault(false); - list.add(tempIP); - tempIP = new IssuePriority(); - tempIP.setId(6); - tempIP.setName("Urgent"); - tempIP.setPosition(4); - tempIP.setOpt("IPRI"); - tempIP.setIsDefault(false); - list.add(tempIP); - tempIP = new IssuePriority(); - tempIP.setId(7); - tempIP.setName("Immédiat"); - tempIP.setPosition(5); - tempIP.setOpt("IPRI"); - tempIP.setIsDefault(false); - list.add(tempIP); - - memoryModel.put(RedmineModelEnum.issuePriority, list); - - - IssueCategory tempIC; - list = new ArrayList<Object>(); - tempIC = new IssueCategory(); - tempIC.setId(1); - tempIC.setName("categorie one"); - tempIC.setProjectId(1); - list.add(tempIC); - tempIC = new IssueCategory(); - tempIC.setId(2); - tempIC.setName("categorie two"); - tempIC.setProjectId(1); - list.add(tempIC); - - memoryModel.put(RedmineModelEnum.issueCategory, list); - - - News tempN; - list = new ArrayList<Object>(); - - tempN = new News(); - tempN.setId(85); - tempN.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-17T21:50:26+02:00")); - tempN.setProjectId(1); - tempN.setAuthorId(4); - tempN.setCommentsCount(0); - tempN.setDescription("description"); - tempN.setSummary("summary"); - tempN.setTitle("title"); - list.add(tempN); - tempN = new News(); - tempN.setId(86); - tempN.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-17T21:55:26+02:00")); - tempN.setProjectId(1); - tempN.setAuthorId(4); - tempN.setCommentsCount(0); - tempN.setDescription("description2"); - tempN.setSummary("summary2"); - tempN.setTitle("title2"); - list.add(tempN); - - memoryModel.put(RedmineModelEnum.news, list); - - TimeEntry tempE; - list = new ArrayList<Object>(); - - tempE = new TimeEntry(); - tempE.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-12-31T23:02:02+01:00")); - tempE.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-12-31T23:02:02+01:00")); - tempE.setSpentOn((Date) RedmineDataConverter.Date.convert("2009-12-31")); - tempE.setId(1); - tempE.setProjectId(1); - tempE.setUserId(4); - tempE.setIssueId(6); - tempE.setActivityId(8); - - tempE.setHours(1); - tempE.setTmonth(12); - tempE.setTyear(2009); - tempE.setTweek(53); - tempE.setComments("Test"); - list.add(tempE); - - tempE = new TimeEntry(); - tempE.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-12-31T23:10:01+01:00")); - tempE.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-12-31T23:10:01+01:00")); - tempE.setSpentOn((Date) RedmineDataConverter.Date.convert("2009-12-31")); - tempE.setId(2); - tempE.setProjectId(1); - tempE.setUserId(4); - tempE.setIssueId(6); - tempE.setActivityId(9); - - tempE.setHours(2); - tempE.setTmonth(12); - tempE.setTyear(2009); - tempE.setTweek(53); - tempE.setComments("deuxième temps"); - list.add(tempE); - - memoryModel.put(RedmineModelEnum.timeEntry, list); - - - } } Modified: trunk/jredmine-client/src/test/java/org/nuiton/jredmine/rest/RedmineRestClientTest.java =================================================================== --- trunk/jredmine-client/src/test/java/org/nuiton/jredmine/rest/RedmineRestClientTest.java 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/test/java/org/nuiton/jredmine/rest/RedmineRestClientTest.java 2012-07-12 14:04:57 UTC (rev 269) @@ -33,12 +33,12 @@ import org.junit.Assume; import org.junit.Before; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import org.nuiton.io.rest.RestClientConfiguration; import org.nuiton.io.rest.RestException; import org.nuiton.io.rest.RestRequest; import org.nuiton.jredmine.RedmineTestContract; -import org.nuiton.jredmine.TestHelper; import java.io.IOException; import java.io.InputStream; @@ -47,6 +47,7 @@ * @author tchemit <chemit@codelutin.com> * @since 1.0.0 */ +@Ignore public class RedmineRestClientTest implements RedmineTestContract { /** Logger. */ @@ -63,21 +64,23 @@ @BeforeClass public static void setUpClass() throws Exception { - configuration = TestHelper.getTestConfiguration(); + Assume.assumeTrue(false); - RedmineRestClient client = new RedmineRestClient(configuration); - try { - - client.open(); - } catch (Exception e) { - - // could not log - if (log.isWarnEnabled()) { - log.warn("could not connect to server " + configuration.getRestUrl() + ", will skip test " + RedmineRestClientTest.class.getName()); - } - } finally { - Assume.assumeTrue(client.isOpen()); - } +// configuration = TestHelper.getTestConfiguration(); +// +// RedmineRestClient client = new RedmineRestClient(configuration); +// try { +// +// client.open(); +// } catch (Exception e) { +// +// // could not log +// if (log.isWarnEnabled()) { +// log.warn("could not connect to server " + configuration.getRestUrl() + ", will skip test " + RedmineRestClientTest.class.getName()); +// } +// } finally { +// Assume.assumeTrue(client.isOpen()); +// } } @AfterClass Modified: trunk/jredmine-client/src/test/resources/test-config.properties =================================================================== --- trunk/jredmine-client/src/test/resources/test-config.properties 2012-07-12 14:04:21 UTC (rev 268) +++ trunk/jredmine-client/src/test/resources/test-config.properties 2012-07-12 14:04:57 UTC (rev 269) @@ -23,8 +23,6 @@ # #L% ### # default values for test configuration (see org.nuiton.jredmine.TestHelper) -test.verbose=false -test.redmineUrl=http://www.mynuiton.org -test.redmineUsername=chemit -test.redminePassword=azer +test.redmineUrl=http://nuiton.org/jredmine test.encoding=UTF-8 +test.verbose=false