1 package org.jumpmind.symmetric.ext;
2
3 import java.util.ArrayList;
4 import java.util.HashSet;
5 import java.util.List;
6
7 import org.jumpmind.symmetric.load.DataLoaderContext;
8 import org.jumpmind.symmetric.load.IDataLoaderContext;
9 import org.jumpmind.symmetric.load.TableTemplate;
10 import org.jumpmind.symmetric.load.csv.CsvLoader;
11 import org.jumpmind.symmetric.test.AbstractDatabaseTest;
12 import org.junit.Assert;
13 import org.junit.Before;
14 import org.junit.Test;
15
16 public class XmlPublisherFilterTest extends AbstractDatabaseTest {
17
18 private static final String TABLE_TEST = "TEST_XML_PUBLISHER";
19
20 private static final String TEST_SIMPLE_TRANSFORM_RESULTS = "<batch xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"12\" nodeid=\"54321\" time=\"test\"><row entity=\"TEST_XML_PUBLISHER\" dml=\"I\"><data key=\"ID1\">1</data><data key=\"ID2\">2</data><data key=\"DATA1\">test embedding an &</data><data key=\"DATA2\">3</data><data key=\"DATA3\" xsi:nil=\"true\" /></row></batch>";
21
22 private DataLoaderContext ctx;
23
24 public XmlPublisherFilterTest() throws Exception {
25 super();
26 }
27
28 public XmlPublisherFilterTest(String dbName) {
29 super(dbName);
30 }
31
32 @Before
33 public void setUp() {
34 ctx = new DataLoaderContext();
35 ctx.setNodeId("54321");
36 ctx.setTableName(TABLE_TEST);
37 ctx.setTableTemplate(new TableTemplate(getJdbcTemplate(), getDbDialect(), TABLE_TEST, null, false));
38 ctx.setColumnNames(new String[] { "ID1", "ID2", "DATA1", "DATA2", "DATA3" });
39
40 }
41
42 @Test
43 public void testSimpleTransform() {
44 XmlPublisherFilter filter = new XmlPublisherFilter();
45 filter.setTimeStringGenerator(new XmlPublisherFilter.ITimeGenerator() {
46 public String getTime() {
47 return "test";
48 }
49 });
50 HashSet<String> tableNames = new HashSet<String>();
51 tableNames.add(TABLE_TEST);
52 filter.setTableNamesToPublishAsGroup(tableNames);
53 List<String> columns = new ArrayList<String>();
54 columns.add("ID1");
55 columns.add("ID2");
56 filter.setGroupByColumnNames(columns);
57 Output output = new Output();
58 filter.setPublisher(output);
59
60 String[][] data = { { "1", "1", "The Angry Brown", "3", "2008-10-24 00:00:00.0" },
61 { "1", "2", "test embedding an &", "3", null } };
62 for (String[] strings : data) {
63 filter.filterInsert(ctx, strings);
64 filter.batchComplete(new CsvLoader() {
65 @Override
66 public IDataLoaderContext getContext() {
67 return ctx;
68 }
69 }, null);
70 }
71
72 Assert.assertEquals(TEST_SIMPLE_TRANSFORM_RESULTS.trim(), output.toString().trim());
73
74 }
75
76 class Output implements IPublisher {
77 private String output;
78
79 public void publish(IDataLoaderContext context, String text) {
80 this.output = text;
81 }
82
83 @Override
84 public String toString() {
85 return output;
86 }
87 }
88 }