View Javadoc
1   /*
2    * To change this template, choose Tools | Templates
3    * and open the template in the editor.
4    */
5   package org.itracker.web.util;
6   
7   import org.itracker.AbstractDependencyInjectionTest;
8   import org.itracker.ImportExportException;
9   import org.itracker.model.*;
10  import org.itracker.model.CustomField.Type;
11  import org.itracker.model.util.IssueUtilities;
12  import org.itracker.model.util.ProjectUtilities;
13  import org.junit.Ignore;
14  import org.junit.Test;
15  
16  import java.io.IOException;
17  import java.io.InputStreamReader;
18  import java.io.Reader;
19  import java.io.StringReader;
20  import java.text.SimpleDateFormat;
21  import java.util.*;
22  
23  /**
24   * FIXME: reimplement this test as soon we got an XML Import/Export
25   *
26   * @author seas
27   */
28  public class ImportExportUtilitiesIT extends AbstractDependencyInjectionTest {
29  
30      public static final long TEST_TIMESTAMP_EXPORT1 = 50000l;
31      public static final long TEST_TIMESTAMP_EXPORT2 = 8000000l;
32  
33      private String flatXml(final String xml) {
34          return xml.replace("\n", "").replace("\r", "").replaceAll("> +<", "><").trim();
35      }
36  
37      public void doTestImportIssues(final Reader xml,
38                                     final AbstractEntity[] expected) {
39          try {
40              final AbstractEntity[] actual = ImportExportUtilities.importIssues(xml);
41              final List<AbstractEntity> actualList = new Vector<AbstractEntity>(Arrays.asList(actual));
42              final List<AbstractEntity> expectedList = new Vector<AbstractEntity>(Arrays.asList(expected));
43              assertEquals(expected.length, actual.length);
44              for (final AbstractEntity aeExpected : expectedList) {
45                  boolean found = false;
46                  for (final AbstractEntity aeActual : actualList) {
47                      if (aeExpected instanceof Issue && aeActual instanceof Issue) {
48                          final Issue issueExpected = (Issue) aeExpected;
49                          final Issue issueActual = (Issue) aeActual;
50                          if (issueExpected.getId().equals(issueActual.getId())) {
51                              found = true;
52                          }
53                      } else if (aeExpected instanceof Project && aeActual instanceof Project) {
54                          final Project projectExpected = (Project) aeExpected;
55                          final Project projectActual = (Project) aeActual;
56                          if (projectExpected.getId().equals(projectActual.getId())) {
57                              found = true;
58                          }
59                      } else if (aeExpected instanceof User && aeActual instanceof User) {
60                          final User userExpected = (User) aeExpected;
61                          final User userActual = (User) aeActual;
62                          if (userExpected.getId().equals(userActual.getId())) {
63                              found = true;
64                          }
65                      } else if (aeExpected instanceof SystemConfiguration && aeActual instanceof SystemConfiguration) {
66                          @SuppressWarnings("unused")
67                          final SystemConfiguration configExpected =
68                                  (SystemConfiguration) aeExpected;
69                          @SuppressWarnings("unused")
70                          final SystemConfiguration configActual =
71                                  (SystemConfiguration) aeActual;
72                          found = true;
73                      }
74                      if (found) {
75                          actualList.remove(aeActual);
76                          break;
77                      }
78                  }
79                  assertTrue(found);
80              }
81          } catch (final ImportExportException e) {
82              assertTrue(e.getMessage(), false);
83          }
84      }
85  
86      @Test
87      public void testImportIssue() {
88          final List<Issue> issues = new Vector<Issue>();
89          final Project project = new Project("project");
90          project.setId(1);
91          final User creator = new User();
92          creator.setId(1);
93          final User owner = new User();
94          owner.setId(2);
95          final Date dateCreate = new Date();
96          final Date dateModify = new Date();
97          final Issue issue1 = new Issue();
98          issue1.setId(1);
99          issue1.setProject(project);
100         issue1.setDescription("issue description");
101         issue1.setCreator(creator);
102         issue1.setOwner(owner);
103         issue1.setCreateDate(dateCreate);
104         issue1.setLastModifiedDate(dateModify);
105         issues.add(issue1);
106 
107         final Issue issue2 = new Issue();
108         issue2.setId(2);
109         issue2.setProject(project);
110         issue2.setDescription("issue description");
111         issue2.setCreator(creator);
112         issue2.setOwner(owner);
113         issue2.setCreateDate(dateCreate);
114         issue2.setLastModifiedDate(dateModify);
115         issues.add(issue2);
116 
117         final SystemConfiguration systemConfiguration =
118                 new SystemConfiguration();
119         final String xml = "<itracker>" +
120                 "<configuration>" +
121                 "<configuration-version><![CDATA[]]></configuration-version>" +
122                 "<custom-fields>" +
123                 "</custom-fields>" +
124                 "<resolutions>" +
125                 "</resolutions>" +
126                 "<severities>" +
127                 "</severities>" +
128                 "<statuses>" +
129                 "</statuses>" +
130                 "</configuration>" +
131                 "<users>" +
132                 "<user id=\"user1\" systemid=\"1\">" +
133                 "<login><![CDATA[]]></login>" +
134                 "<first-name><![CDATA[]]></first-name>" +
135                 "<last-name><![CDATA[]]></last-name>" +
136                 "<email><![CDATA[]]></email>" +
137                 "<user-status>0</user-status>" +
138                 "<super-user>false</super-user>" +
139                 "</user>" +
140                 "<user id=\"user2\" systemid=\"2\">" +
141                 "<login><![CDATA[]]></login>" +
142                 "<first-name><![CDATA[]]></first-name>" +
143                 "<last-name><![CDATA[]]></last-name>" +
144                 "<email><![CDATA[]]></email>" +
145                 "<user-status>0</user-status>" +
146                 "<super-user>false</super-user>" +
147                 "</user>" +
148                 "</users>" +
149                 "<projects>" +
150                 "<project id=\"project1\" systemid=\"1\">" +
151                 "<project-name><![CDATA[project]]></project-name>" +
152                 "<project-description><![CDATA[]]></project-description>" +
153                 "<project-status>" + ProjectUtilities.getStatusName(project.getStatus(), ImportExportUtilities.EXPORT_LOCALE) + "</project-status>" +
154                 "<project-options>0</project-options>" +
155                 "</project>" +
156                 "</projects>" +
157                 "<issues>" +
158                 "<issue id=\"issue1\" systemid=\"1\">" +
159                 "<issue-project><![CDATA[project1]]></issue-project>" +
160                 "<issue-description><![CDATA[issue description]]></issue-description>" +
161                 "<issue-severity>3</issue-severity>" +
162                 "<issue-status>100</issue-status>" +
163                 "<issue-resolution><![CDATA[]]></issue-resolution>" +
164                 "<create-date>" + ImportExportTags.DATE_FORMATTER.format(dateCreate) + "</create-date>" +
165                 "<last-modified>" + ImportExportTags.DATE_FORMATTER.format(dateModify) + "</last-modified>" +
166                 "<creator>user1</creator>" +
167                 "<owner>user2</owner>" +
168                 "</issue>" +
169                 "<issue id=\"issue2\" systemid=\"2\">" +
170                 " <issue-project><![CDATA[project1]]></issue-project>" +
171                 "<issue-description><![CDATA[issue description]]></issue-description>" +
172                 "<issue-severity>3</issue-severity>" +
173                 "<issue-status>100</issue-status>" +
174                 "<issue-resolution><![CDATA[]]></issue-resolution>" +
175                 "<create-date>" + ImportExportTags.DATE_FORMATTER.format(dateCreate) + "</create-date>" +
176                 "<last-modified>" + ImportExportTags.DATE_FORMATTER.format(dateModify) + "</last-modified>" +
177                 "<creator>user1</creator>" +
178                 "<owner>user2</owner>" +
179                 "</issue>" +
180                 "</issues>" +
181                 "</itracker>";
182         doTestImportIssues(new StringReader(xml),
183                 new AbstractEntity[]{
184                         systemConfiguration,
185                         creator,
186                         owner,
187                         project,
188                         issue1,
189                         issue2
190                 });
191 
192         //test throwing exception
193         try {
194             ImportExportUtilities.importIssues(null);
195             fail("should throw ImportExportException");
196         } catch (final ImportExportException e) {
197 
198         }
199 
200         try {
201             ImportExportUtilities.importIssues(new StringReader(""));
202             fail("should throw ImportExportException");
203         } catch (final ImportExportException e) {
204 
205         }
206 
207         try {
208             ImportExportUtilities.importIssues(new StringReader("Test"));
209             fail("should throw ImportExportException");
210         } catch (final ImportExportException e) {
211 
212         }
213     }
214 
215 
216     // TODO not stable
217     @Ignore
218     @Test
219     public void testExportIssues() {
220         final List<Issue> issues = new Vector<Issue>();
221         final Project project = new Project("project");
222         project.setId(1);
223         final User creator = new User();
224         creator.setId(1);
225         final User owner = new User();
226         owner.setId(2);
227         final User user = new User();
228         user.setId(3);
229         final User attachmentCreator = new User();
230         attachmentCreator.setId(4);
231         final Date dateCreate = new Date(TEST_TIMESTAMP_EXPORT1);
232         final Date dateModify = new Date(TEST_TIMESTAMP_EXPORT2);
233         Date created = null;
234         List<User> users = new ArrayList<User>();
235         users.add(creator);
236         project.setOwners(users);
237         try {
238             created = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2008-11-11 12:11:10");
239         } catch (Exception e) {
240 
241         }
242         {
243             final Issue issue = new Issue();
244             issue.setId(1);
245             issue.setProject(project);
246             issue.setDescription("issue description");
247             issue.setCreator(creator);
248             issue.setOwner(owner);
249             issue.setCreateDate(dateCreate);
250             issue.setLastModifiedDate(dateModify);
251 
252             IssueHistory issueHistory = new IssueHistory();
253             issueHistory.setUser(user);
254             issueHistory.setStatus(1);
255             issueHistory.setCreateDate(created);
256             issueHistory.setDescription("Test issue history entry.");
257             List<IssueHistory> histories = new ArrayList<IssueHistory>();
258             histories.add(issueHistory);
259             issue.setHistory(histories);
260 
261             IssueAttachment attachment = new IssueAttachment();
262             attachment.setUser(attachmentCreator);
263             attachment.setFileName("proj1_issue801_attachment1");
264             attachment.setOriginalFileName("ITracker.jmx");
265             attachment.setSize(192521);
266             attachment.setType("text/plain");
267 
268             List<IssueAttachment> attachments = new ArrayList<IssueAttachment>();
269             attachments.add(attachment);
270             issue.setAttachments(attachments);
271 
272             issues.add(issue);
273         }
274         {
275             final Issue issue = new Issue();
276             issue.setId(2);
277             issue.setProject(project);
278             issue.setDescription("issue description");
279             issue.setCreator(creator);
280             issue.setOwner(owner);
281             issue.setCreateDate(dateCreate);
282             issue.setLastModifiedDate(dateModify);
283             issues.add(issue);
284 
285         }
286         final SystemConfiguration systemConfiguration =
287                 new SystemConfiguration();
288         try {
289             final String expected = readXmlString("org/itracker/services/util/testExportIssuesExpected.xml");
290             String xml = ImportExportUtilities.exportIssues(issues,
291                     systemConfiguration);
292 
293             assertEquals("xml", flatXml(expected),
294                     flatXml(xml));
295         } catch (final ImportExportException ex) {
296             assertTrue(ex.getMessage(), false);
297         }
298 
299         try {
300             ImportExportUtilities.exportIssues(null, systemConfiguration);
301             fail("should throw ImportExportException");
302         } catch (ImportExportException e) {
303 
304         }
305 
306         try {
307             ImportExportUtilities.exportIssues(new ArrayList<Issue>(), systemConfiguration);
308             fail("should throw ImportExportException");
309         } catch (ImportExportException e) {
310 
311         }
312     }
313 
314     @Test
315     public void testExportModel() {
316         try {
317             final User creator = new User();
318             creator.setId(1);
319             final User owner = new User();
320             owner.setId(2);
321             final Project project = new Project("project");
322             project.setId(1);
323             project.getOwners().add(creator);
324             project.getOwners().add(owner);
325             final Component component = new Component(project, "component");
326             project.getComponents().add(component);
327             final Issue issue = new Issue();
328             issue.setProject(project);
329             issue.setId(1);
330             issue.setDescription("issue description");
331             issue.setSeverity(1);
332             issue.setResolution("fixed");
333             issue.setTargetVersion(new Version(project, "1.1.1"));
334             final Date dateCreate = new Date();
335             issue.setCreateDate(dateCreate);
336             final Date dateModify = new Date();
337             issue.setLastModifiedDate(dateModify);
338             issue.setCreator(creator);
339             issue.setOwner(owner);
340             final IssueHistory issueHistory = new IssueHistory(issue, creator, "some description", IssueUtilities.STATUS_NEW);
341             issueHistory.setCreateDate(dateCreate);
342             issueHistory.setLastModifiedDate(dateModify);
343             issue.getHistory().add(issueHistory);
344             issue.getComponents().add(component);
345             final IssueAttachment attachment = new IssueAttachment(issue, "file.txt");
346             attachment.setUser(creator);
347             issue.getAttachments().add(attachment);
348             issue.getVersions().add(new Version(project, "1.1.1"));
349             issue.getVersions().add(new Version(project, "1.1.2"));
350             final String expected = "<issue id=\"issue1\" systemid=\"1\">" +
351                     "<issue-project><![CDATA[project1]]></issue-project>" +
352                     "<issue-description><![CDATA[issue description]]></issue-description>" +
353                     "<issue-severity>1</issue-severity>" +
354                     "<issue-status>null</issue-status>" +
355                     "<issue-resolution><![CDATA[fixed]]></issue-resolution>" +
356                     "<target-version-id>versionnull</target-version-id>" +
357                     "<create-date>" + ImportExportTags.DATE_FORMATTER.format(dateCreate) + "</create-date>" +
358                     "<last-modified>" + ImportExportTags.DATE_FORMATTER.format(dateModify) + "</last-modified>" +
359                     "<creator>user1</creator>" +
360                     "<owner>user2</owner>" +
361                     "<issue-components>" +
362                     "<component-id>componentnull</component-id>" +
363                     "</issue-components>" +
364                     "<issue-versions>" +
365                     "<version-id>versionnull</version-id>" +
366                     "<version-id>versionnull</version-id>" +
367                     "</issue-versions>" +
368                     "<issue-attachments>" +
369                     "<issue-attachment>      <issue-attachment-description><![CDATA[]]></issue-attachment-description>" +
370                     "<issue-attachment-filename><![CDATA[]]></issue-attachment-filename>" +
371                     "<issue-attachment-origfile><![CDATA[file.txt]]></issue-attachment-origfile>" +
372                     "<issue-attachment-size><![CDATA[0]]></issue-attachment-size>" +
373                     "<issue-attachment-type><![CDATA[null]]></issue-attachment-type>" +
374                     "<issue-attachment-creator><![CDATA[user1]]></issue-attachment-creator>" +
375                     "</issue-attachment>" +
376                     "</issue-attachments>" +
377                     "<issue-history>" +
378                     "<history-entry creator-id=\"user1\" date=\"" + ImportExportTags.DATE_FORMATTER.format(dateCreate) + "\" status=\"100\"><![CDATA[some description]]></history-entry>" +
379                     "</issue-history>" +
380                     "</issue>";
381             assertEquals(flatXml(expected),
382                     flatXml(ImportExportUtilities.exportModel(issue)));
383         } catch (final ImportExportException ex) {
384             assertTrue(ex.getMessage(), false);
385         }
386 
387         try {
388             final Project project = new Project("project");
389             project.setId(1);
390             final Component component = new Component(project, "component");
391             component.setId(1);
392             project.getComponents().add(component);
393             final String expected = "<project id=\"project1\" systemid=\"1\">" +
394                     "<project-name><![CDATA[project]]></project-name>" +
395                     "<project-description><![CDATA[]]></project-description>" +
396                     "<project-status>" + ProjectUtilities.getStatusName(project.getStatus(), ImportExportUtilities.EXPORT_LOCALE) + "</project-status>" +
397                     "<project-options>0</project-options>" +
398                     "<components>" +
399                     "<component id=\"component1\" systemid=\"1\">" +
400                     "<component-name><![CDATA[component]]></component-name>" +
401                     "<component-description><![CDATA[]]></component-description>" +
402                     "</component>" +
403                     "</components>" +
404                     "</project>";
405             assertEquals(flatXml(expected),
406                     flatXml(ImportExportUtilities.exportModel(project)));
407         } catch (final ImportExportException ex) {
408             assertTrue(ex.getMessage(), false);
409         }
410 
411         try {
412             final User user = new User();
413             user.setId(1);
414             user.setFirstName("firstName");
415             user.setLastName("lastName");
416             final String expected = "<user id=\"user1\" systemid=\"1\">" +
417                     "<login><![CDATA[]]></login>" +
418                     "<first-name><![CDATA[firstName]]></first-name>" +
419                     "<last-name><![CDATA[lastName]]></last-name>" +
420                     "<email><![CDATA[]]></email>" +
421                     "<user-status>0</user-status>" +
422                     "<super-user>false</super-user>" +
423                     "</user>";
424             assertEquals(flatXml(expected),
425                     flatXml(ImportExportUtilities.exportModel(user)));
426         } catch (final ImportExportException ex) {
427             assertTrue(ex.getMessage(), false);
428         }
429 
430         try {
431             ImportExportUtilities.exportModel(null);
432             fail("should throw ImportExportException");
433         } catch (ImportExportException e) {
434         }
435 
436         try {
437             ImportExportUtilities.exportModel(null);
438             fail("should throw ImportExportException");
439         } catch (ImportExportException e) {
440             assertEquals("The bean to export was null.", e.getMessage());
441         }
442 
443         try {
444             ImportExportUtilities.exportModel(new Component());
445             fail("should throw ImportExportException");
446         } catch (ImportExportException e) {
447             assertEquals("This bean type can not be exported.", e.getMessage());
448         }
449     }
450 
451     /**
452      * TODO: Not a valid XML..
453      */
454     @Test
455     public void testGetConfigurationXML() {
456 
457         String got = ImportExportUtilities.getConfigurationXML(null);
458         assertNotNull(got);
459         assertEquals("", got);
460 
461         final SystemConfiguration config = new SystemConfiguration();
462         config.setId(1);
463         config.setVersion("1/1");
464         final CustomField customField1 = new CustomField();
465         customField1.setFieldType(Type.STRING);
466         customField1.setId(1);
467         config.getCustomFields().add(customField1);
468         final CustomField customField2 = new CustomField();
469         customField2.setFieldType(Type.LIST);
470         customField2.setId(2);
471         CustomFieldValue customFieldValue = new CustomFieldValue();
472         customFieldValue.setId(2);
473         customFieldValue.setValue("value2");
474         final CustomField customField3 = new CustomField();
475         customField3.setFieldType(Type.LIST);
476         customFieldValue.setCustomField(new CustomField());
477 
478         customField2.getOptions().add(customFieldValue);
479         config.getCustomFields().add(customField2);
480 
481 
482         config.getResolutions().add(new Configuration(Configuration.Type.resolution, "resolution"));
483 
484         config.getSeverities().add(new Configuration(Configuration.Type.severity, "severity"));
485 
486         config.getStatuses().add(new Configuration(Configuration.Type.status, "status"));
487 
488         final String expected = readXmlString("org/itracker/services/util/testGetConfigurationXMLExpected.xml");
489 
490         String string = ImportExportUtilities.getConfigurationXML(config);
491         assertEquals("xml", flatXml(expected),
492                 flatXml(string));
493     }
494 
495     private String readXmlString(String filename) {
496         InputStreamReader is = new InputStreamReader(getClass().getClassLoader().getResourceAsStream(filename));
497         StringBuilder sb = new StringBuilder();
498         try {
499             while (is.ready()) {
500                 sb.append((char) is.read());
501             }
502         } catch (IOException e) {
503             fail(e.getMessage());
504         }
505         return sb.toString();
506     }
507 
508     @Test
509     public void testConstructor() {
510         ImportExportUtilities importExportUtilities = new ImportExportUtilities();
511 
512         assertNotNull(importExportUtilities);
513 
514     }
515 
516     @Test
517     // Cannot test this it's not a real test, String is not XML anyway! (XML is structured, String is pain)
518     public void testGetIssueXML() {
519 
520         String got = ImportExportUtilities.getIssueXML(null);
521         assertNotNull(got);
522         assertEquals("", got);
523 
524 
525         final User creator = new User();
526         creator.setId(1);
527         final User owner = new User();
528         owner.setId(2);
529         final Project project = new Project("project");
530         project.setId(1);
531         project.getOwners().add(creator);
532         project.getOwners().add(owner);
533         final Component component = new Component(project, "component");
534         project.getComponents().add(component);
535         final Issue issue = new Issue();
536         issue.setProject(project);
537         issue.setId(1);
538         issue.setDescription("issue description");
539         issue.setSeverity(1);
540         issue.setResolution("fixed");
541         issue.setTargetVersion(new Version(project, "1.1.1"));
542         final Date dateCreate = new Date();
543         issue.setCreateDate(dateCreate);
544         final Date dateModify = new Date();
545         issue.setLastModifiedDate(dateModify);
546         issue.setCreator(creator);
547         issue.setOwner(owner);
548         final IssueHistory issueHistory = new IssueHistory(issue, creator, "some description", IssueUtilities.STATUS_NEW);
549         issueHistory.setCreateDate(dateCreate);
550         issueHistory.setLastModifiedDate(dateModify);
551         issue.getHistory().add(issueHistory);
552         issue.getComponents().add(component);
553         final IssueAttachment attachment = new IssueAttachment(issue, "file.txt");
554         attachment.setUser(creator);
555         issue.getAttachments().add(attachment);
556         issue.getVersions().add(new Version(project, "1.1.1"));
557         issue.getVersions().add(new Version(project, "1.1.2"));
558         IssueField issueField = new IssueField();
559         issueField.setId(1);
560         issueField.setStringValue("issue Field");
561         CustomField customField = new CustomField();
562         customField.setId(2);
563 //        customField.setName("customFieldName");
564         customField.setFieldType(Type.STRING);
565         issueField.setCustomField(customField);
566 
567 
568         issue.getFields().add(issueField);
569 
570         final String expected = "<issue id=\"issue1\" systemid=\"1\">" +
571                 "<issue-project><![CDATA[project1]]></issue-project>" +
572                 "<issue-description><![CDATA[issue description]]></issue-description>" +
573                 "<issue-severity>1</issue-severity>" +
574                 "<issue-status>null</issue-status>" +
575                 "<issue-resolution><![CDATA[fixed]]></issue-resolution>" +
576                 "<target-version-id>versionnull</target-version-id>" +
577                 "<create-date>" + ImportExportTags.DATE_FORMATTER.format(dateCreate) + "</create-date>" +
578                 "<last-modified>" + ImportExportTags.DATE_FORMATTER.format(dateModify) + "</last-modified>" +
579                 "<creator>user1</creator>" +
580                 "<owner>user2</owner>" +
581                 "<issue-components>" +
582                 "<component-id>componentnull</component-id>" +
583                 "</issue-components>" +
584                 "<issue-versions>" +
585                 "<version-id>versionnull</version-id>" +
586                 "<version-id>versionnull</version-id>" +
587                 "</issue-versions>" +
588                 "<issue-fields><issue-field id=\"custom-field2\">" +
589                 "<![CDATA[issue Field]]></issue-field></issue-fields>" +
590                 "<issue-attachments>" +
591                 "<issue-attachment>      <issue-attachment-description><![CDATA[]]></issue-attachment-description>" +
592                 "<issue-attachment-filename><![CDATA[]]></issue-attachment-filename>" +
593                 "<issue-attachment-origfile><![CDATA[file.txt]]></issue-attachment-origfile>" +
594                 "<issue-attachment-size><![CDATA[0]]></issue-attachment-size>" +
595                 "<issue-attachment-type><![CDATA[null]]></issue-attachment-type>" +
596                 "<issue-attachment-creator><![CDATA[user1]]></issue-attachment-creator>" +
597                 "</issue-attachment>" +
598                 "</issue-attachments>" +
599                 "<issue-history>" +
600                 "<history-entry creator-id=\"user1\" date=\"" + ImportExportTags.DATE_FORMATTER.format(dateCreate) + "\" status=\"100\"><![CDATA[some description]]></history-entry>" +
601                 "</issue-history>" +
602                 "</issue>";
603 
604         assertEquals(flatXml(expected),
605                 flatXml(ImportExportUtilities.getIssueXML(issue)));
606 
607 
608     }
609 
610     @Test
611     public void testGetProjectXML() {
612 
613         String got = ImportExportUtilities.getProjectXML(null);
614         assertNotNull(got);
615         assertEquals("", got);
616 
617         final Project project = new Project("project");
618         project.setId(1);
619         final Component component = new Component(project, "component");
620         component.setId(1);
621         project.getComponents().add(component);
622 
623         CustomField customField = new CustomField();
624         customField.setId(1);
625         project.getCustomFields().add(customField);
626         Version version = new Version(project, "1.1.1");
627         version.setId(1);
628         project.getVersions().add(version);
629 
630 
631         final String expected = "<project id=\"project1\" systemid=\"1\">" +
632                 "<project-name><![CDATA[project]]></project-name>" +
633                 "<project-description><![CDATA[]]></project-description>" +
634                 "<project-status>" + ProjectUtilities.getStatusName(project.getStatus(), ImportExportUtilities.EXPORT_LOCALE) + "</project-status>" +
635                 "<project-options>0</project-options>" +
636                 "<project-custom-fields><project-custom-field>custom-field1</project-custom-field></project-custom-fields>" +
637                 "<components>" +
638                 "<component id=\"component1\" systemid=\"1\">" +
639                 "<component-name><![CDATA[component]]></component-name>" +
640                 "<component-description><![CDATA[]]></component-description>" +
641                 "</component>" +
642                 "</components>" +
643                 "<versions><version id=\"version1\" systemid=\"1\"><version-number><![CDATA[1.1.1]]>" +
644                 "</version-number><version-description><![CDATA[]]></version-description></version></versions>" +
645                 "</project>";
646 
647         assertEquals(flatXml(expected), flatXml(ImportExportUtilities.getProjectXML(project)));
648 
649     }
650 
651     @Test
652     public void testGetUserXML() {
653         String got = ImportExportUtilities.getUserXML(null);
654         assertNotNull(got);
655         assertEquals("", got);
656 
657         final User user = new User();
658         user.setId(1);
659         user.setFirstName("firstName");
660         user.setLastName("lastName");
661         final String expected = "<user id=\"user1\" systemid=\"1\">" +
662                 "<login><![CDATA[]]></login>" +
663                 "<first-name><![CDATA[firstName]]></first-name>" +
664                 "<last-name><![CDATA[lastName]]></last-name>" +
665                 "<email><![CDATA[]]></email>" +
666                 "<user-status>0</user-status>" +
667                 "<super-user>false</super-user>" +
668                 "</user>";
669         assertEquals(flatXml(expected),
670                 flatXml(ImportExportUtilities.getUserXML(user)));
671 
672     }
673 
674 
675     /**
676      * Defines a set of datafiles to be uploaded into database.
677      *
678      * @return an array with datafiles.
679      */
680     protected String[] getDataSetFiles() {
681         return new String[]{
682                 "dataset/languagebean_dataset.xml"
683         };
684     }
685 
686     /**
687      * Defines a simple configuration, required for running tests.
688      *
689      * @return an array of references to configuration files.
690      */
691     protected String[] getConfigLocations() {
692         return new String[]{"application-context.xml"};
693     }
694 }