/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.core.rest.resources;
import java.text.MessageFormat;
import org.eclipse.skalli.core.rest.JSONRestWriter;
import org.eclipse.skalli.core.rest.XMLRestWriter;
import org.eclipse.skalli.model.Issue;
import org.eclipse.skalli.model.Severity;
import org.eclipse.skalli.services.issues.Issues;
import org.eclipse.skalli.services.rest.RestWriter;
import org.eclipse.skalli.testutil.RestWriterTestBase;
import org.eclipse.skalli.testutil.TestEntityService;
import org.eclipse.skalli.testutil.TestExtension;
import org.eclipse.skalli.testutil.TestUUIDs;
import org.junit.Test;
@SuppressWarnings("nls")
public class IssuesConverterTest extends RestWriterTestBase {
private static final String NAMESPACE_ATTRIBUTES = MessageFormat.format(ATTRIBUTES_PATTERN,
IssuesConverter.NAMESPACE, "issues", IssuesConverter.API_VERSION);
private static final String COMMON_PART_XML = MessageFormat.format(
"<issues {0}>"
+ "<link rel=\"self\" href=\"http://example.org/api/projects/{1}/issues\"/>"
+ "<link rel=\"project\" href=\"http://example.org/api/projects/{1}\"/>"
+ "<uuid>{1}</uuid>",
NAMESPACE_ATTRIBUTES, TestUUIDs.TEST_UUIDS[0]);
private static final String COMMON_PART_JSON = MessageFormat.format(
"'{'"
+ "\"namespace\":\"{0}\","
+ "\"apiVersion\":\"{1}\",\"links\":"
+ "['{'\"rel\":\"self\",\"href\":\"http://example.org/api/projects/{2}/issues\"},"
+ "'{'\"rel\":\"project\",\"href\":\"http://example.org/api/projects/{2}\"}],"
+ "\"uuid\":\"{2}\",",
IssuesConverter.NAMESPACE, IssuesConverter.API_VERSION, TestUUIDs.TEST_UUIDS[0]);
private static final Issue[] ISSUES = {
new Issue(Severity.INFO, TestEntityService.class, TestUUIDs.TEST_UUIDS[2],
null, null, 0, "msg0"),
new Issue(Severity.ERROR, TestEntityService.class, TestUUIDs.TEST_UUIDS[1],
TestExtension.class, TestExtension.PROPERTY_STR, 5, "msg1")};
static {
long now = System.currentTimeMillis();
ISSUES[0].setTimestamp(now);
ISSUES[1].setTimestamp(now + 1000L);
ISSUES[1].setDescription("descr1");
}
@Test
public void testMarshalEmptyIssuesXML() throws Exception {
Issues issues = new Issues(TestUUIDs.TEST_UUIDS[0]);
XMLRestWriter restWriter = new XMLRestWriter(writer, "http://example.org");
marshalIssues(issues, restWriter);
assertEqualsXML(COMMON_PART_XML + "<isStale>false</isStale></issues>");
}
@Test
public void testMarshalIssuesXML() throws Exception {
Issues issues = newIssues();
XMLRestWriter restWriter = new XMLRestWriter(writer, "http://example.org");
marshalIssues(issues, restWriter);
assertEqualsXML(COMMON_PART_XML
+ "<isStale>true</isStale>"
+ nextIssueXML(1)
+ nextIssueXML(0)
+ "</issues>");
}
@Test
public void testMarshalEmptyIssuesJSON() throws Exception {
Issues issues = new Issues(TestUUIDs.TEST_UUIDS[0]);
JSONRestWriter restWriter = new JSONRestWriter(writer, "http://example.org");
marshalIssues(issues, restWriter);
assertEqualsJSON(COMMON_PART_JSON + "\"isStale\":false,\"items\":[]}");
}
@Test
public void testMarshalIssuesJSON() throws Exception {
Issues issues = newIssues();
JSONRestWriter restWriter = new JSONRestWriter(writer, "http://example.org");
marshalIssues(issues, restWriter);
assertEqualsJSON(COMMON_PART_JSON
+ "\"isStale\":true,\"items\":["
+ nextIssueJSON(1) + ","
+ nextIssueJSON(0)
+ "]}");
}
private String nextIssueXML(int i) {
Issue issue = ISSUES[i];
return MessageFormat.format(
"<issue>"
+ "<timestamp>{0}</timestamp>"
+ "<severity>{1}</severity>"
+ (i==1? "<extension>{2}</extension><propertyId>{3}</propertyId>" : "")
+ "<issuer>{4}</issuer>"
+ "<item>{5}</item>"
+ "<message>{6}</message>"
+ (i==1? "<description>{7}</description>" : "")
+ "</issue>",
Long.toString(issue.getTimestamp()), issue.getSeverity(), TestExtension.class.getName(),
TestExtension.PROPERTY_STR, issue.getIssuer().getName(), Integer.toString(issue.getItem()),
issue.getMessage(), issue.getDescription());
}
private String nextIssueJSON(int i) {
Issue issue = ISSUES[i];
return MessageFormat.format(
"'{'"
+ "\"timestamp\":{0}"
+ ",\"severity\":\"{1}\""
+ (i==1? ",\"extension\":\"{2}\",\"propertyId\":\"{3}\"" : "")
+ ",\"issuer\":\"{4}\""
+ ",\"item\":{5}"
+ ",\"message\":\"{6}\""
+ (i==1? ",\"description\":\"{7}\"" : "")
+ "}",
Long.toString(issue.getTimestamp()), issue.getSeverity(), TestExtension.class.getName(),
TestExtension.PROPERTY_STR, issue.getIssuer().getName(), Integer.toString(issue.getItem()),
issue.getMessage(), issue.getDescription());
}
private Issues newIssues() {
Issues issues = new Issues(TestUUIDs.TEST_UUIDS[0]);
issues.setStale(true);
issues.addIssue(ISSUES[0]);
issues.addIssue(ISSUES[1]);
return issues;
}
private void marshalIssues(Issues issues, RestWriter restWriter) throws Exception {
IssuesConverter converter = new IssuesConverter();
converter.marshal(issues, restWriter);
restWriter.flush();
}
}