// Copyright 2010 Google Inc. All Rights Reseved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.testing.testify.risk.frontend.server.util; import com.google.common.collect.Lists; import com.google.testing.testify.risk.frontend.model.DataRequest; import com.google.testing.testify.risk.frontend.model.DataRequestOption; import junit.framework.TestCase; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Unit tests for the DataRequestDocumentGeneratorTest class. * * @author chrsmith@google.com (Chris Smith) */ public class DataRequestDocumentGeneratorTest extends TestCase { private static final String XML_HEADER = "<\\?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"\\?>"; private static final String TA_OPEN = "<TestAnalytics>"; private static final String TA_CLOSE = "</TestAnalytics>"; private static final String TA_EMPTY = "<TestAnalytics/>"; public void testZeroDataRequests() { List<DataRequest> requests = Lists.newArrayList(); String result = DataRequestDocumentGenerator.generateDocument(requests); Pattern pattern = Pattern.compile(XML_HEADER + TA_EMPTY); Matcher matcher = pattern.matcher(result); assertTrue(matcher.matches()); } public void testMultipleProjectsSameDataSource() { DataRequest project1Request = new DataRequest(); project1Request.setParentProjectId(1L); project1Request.setDataSourceName("GoogleCodeBugs"); DataRequest project2Request = new DataRequest(); project2Request.setParentProjectId(2L); project2Request.setDataSourceName("GoogleCodeBugs"); List<DataRequest> requests = Lists.newArrayList(); requests.add(project1Request); requests.add(project2Request); String result = DataRequestDocumentGenerator.generateDocument(requests); List<String> expected = Lists.newArrayList( "<DataRequests ProjectID=\"1\"><DataRequest Type=\"GoogleCodeBugs\"/>", "<DataRequests ProjectID=\"2\"><DataRequest Type=\"GoogleCodeBugs\"/>"); Pattern pattern = Pattern.compile(XML_HEADER + TA_OPEN + "(.*)" + TA_CLOSE); Matcher matcher = pattern.matcher(result); assertTrue(matcher.matches()); List<String> actual = Lists.newArrayList((matcher.group(1)).split("</.*?>")); assertContentsAnyOrder("Contents don't match", actual, expected); } private <A> void assertContentsAnyOrder(String msg, List<A> actual, List<A> expected) { for (A a : actual) { assertTrue(msg, expected.contains(a)); } for (A a : expected) { assertTrue(msg, actual.contains(a)); } } public void testMultipleRequestsSameProject() { // Add two data requests to the same project. Both requesting from the same data source. DataRequest project1Request = new DataRequest(); project1Request.setParentProjectId(1L); project1Request.setDataSourceName("GoogleCodeBugs"); project1Request.getDataRequestOptions().add(new DataRequestOption("Alpha", "1111")); project1Request.getDataRequestOptions().add(new DataRequestOption("Beta", "3333")); DataRequest project2Request = new DataRequest(); project2Request.setParentProjectId(1L); project2Request.setDataSourceName("GoogleCodeBugs"); project2Request.getDataRequestOptions().add(new DataRequestOption("Alpha", "2222")); project2Request.getDataRequestOptions().add(new DataRequestOption("Beta", "4444")); List<DataRequest> requests = Lists.newArrayList(); requests.add(project1Request); requests.add(project2Request); String result = DataRequestDocumentGenerator.generateDocument(requests); List<String> expected = Lists.newArrayList( "<Parameter Name=\"Beta\">3333", "<Parameter Name=\"Alpha\">1111", "<Parameter Name=\"Beta\">4444", "<Parameter Name=\"Alpha\">2222"); Pattern pattern = Pattern.compile(XML_HEADER + TA_OPEN + "<DataRequests ProjectID=\"1\"><DataRequest Type=\"GoogleCodeBugs\">(.*)</DataRequest>" + "</DataRequests>" + TA_CLOSE); Matcher matcher = pattern.matcher(result); assertTrue(matcher.matches()); List<String> actual = Lists.newArrayList((matcher.group(1)).split("</.*?>")); assertContentsAnyOrder("Contents don't match", actual, expected); } public void testDataRequestFields() { DataRequest request = new DataRequest(); assertEquals(null, request.getRequestId()); request.setRequestId(123L); assertEquals(123, request.getRequestId().longValue()); assertEquals(null, request.getCustomName()); request.setCustomName("test name"); assertEquals("test name", request.getCustomName()); assertEquals(0, request.getDataRequestOptions().size()); DataRequestOption option = new DataRequestOption(); option.setName("name2"); option.setValue("value2"); option.setId("drq1"); option.setDataRequest(request); request.setDataRequestOptions(Lists.newArrayList(option, new DataRequestOption("name1", "value1"))); assertEquals(2, request.getDataRequestOptions().size()); assertTrue(request.getDataRequestOptions().contains(option)); assertEquals("drq1", option.getId()); assertEquals("name2", option.getName()); assertEquals("value2", option.getValue()); assertEquals(request, option.getDataRequest()); } }