1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.googlesitemap.app.actions;
35
36 import static org.junit.Assert.*;
37
38 import info.magnolia.module.googlesitemap.SiteMapNodeTypes;
39 import info.magnolia.module.googlesitemap.SiteMapTestUtil;
40 import info.magnolia.ui.api.action.ActionExecutionException;
41 import info.magnolia.ui.vaadin.integration.jcr.JcrNewNodeAdapter;
42 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
43
44 import javax.jcr.Node;
45 import javax.jcr.RepositoryException;
46
47 import org.junit.Before;
48 import org.junit.Test;
49
50 import com.vaadin.data.util.ObjectProperty;
51
52
53
54
55 public class SaveSiteMapActionTest extends SiteMapTestUtil {
56
57 private GoogleMapEditorCallbackTest callback;
58 private GoogleMapEditorValidatorTest validator;
59 private SaveSiteMapActionDefinition definition;
60
61 @Override
62 @Before
63 public void setUp() throws Exception {
64 super.setUp();
65 callback = new GoogleMapEditorCallbackTest();
66 validator = new GoogleMapEditorValidatorTest();
67 definition = new SaveSiteMapActionDefinition();
68 definition.setName("save");
69 definition.setLabel("label");
70 }
71
72 @Test
73 public void executeSaveNewSiteMap() throws RepositoryException, ActionExecutionException {
74
75 Node rootNode = googleSiteMapSession.getRootNode();
76 JcrNewNodeAdapter item = new JcrNewNodeAdapter(rootNode, SiteMapNodeTypes.SiteMap.NAME);
77 item.addItemProperty(SiteMapNodeTypes.SiteMap.DISPLAY_NAME, new ObjectProperty<String>("displayName"));
78 SaveSiteMapAction action = new SaveSiteMapAction(definition, item, validator, callback);
79
80
81 action.execute();
82
83
84 assertEquals("onSuccess(save)", this.callback.getCallbackActionCalled());
85 assertTrue(googleSiteMapSession.getRootNode().hasNode("displayName"));
86 }
87
88 @Test
89 public void executeSaveExistingSiteMap() throws RepositoryException, ActionExecutionException {
90
91 Node rootNode = googleSiteMapSession.getRootNode();
92 Node displayName = rootNode.addNode("display Name", SiteMapNodeTypes.SiteMap.NAME);
93 displayName.setProperty(SiteMapNodeTypes.SiteMap.URL, "initial_url");
94 displayName.setProperty(SiteMapNodeTypes.SiteMap.DISPLAY_NAME, "display Name");
95 JcrNodeAdapter item = new JcrNodeAdapter(displayName);
96 item.addItemProperty(SiteMapNodeTypes.SiteMap.URL, new ObjectProperty<String>("changed_url"));
97 SaveSiteMapAction action = new SaveSiteMapAction(definition, item, validator, callback);
98
99
100 action.execute();
101
102
103 assertEquals("onSuccess(save)", this.callback.getCallbackActionCalled());
104 assertTrue(googleSiteMapSession.getRootNode().hasNode("display Name"));
105 assertEquals("changed_url", displayName.getProperty(SiteMapNodeTypes.SiteMap.URL).getString());
106 }
107
108 @Test
109 public void executeSaveExistingSiteMapWithNewName() throws RepositoryException, ActionExecutionException {
110
111 Node rootNode = googleSiteMapSession.getRootNode();
112 Node displayName = rootNode.addNode("displayName", SiteMapNodeTypes.SiteMap.NAME);
113 displayName.setProperty(SiteMapNodeTypes.SiteMap.URL, "initial_url");
114 displayName.setProperty(SiteMapNodeTypes.SiteMap.TYPE, "initial_type");
115 JcrNodeAdapter item = new JcrNodeAdapter(displayName);
116 item.addItemProperty(SiteMapNodeTypes.SiteMap.URL, new ObjectProperty<String>("changed_url"));
117 item.addItemProperty(SiteMapNodeTypes.SiteMap.DISPLAY_NAME, new ObjectProperty<String>("new_displayName"));
118 SaveSiteMapAction action = new SaveSiteMapAction(definition, item, validator, callback);
119
120
121 action.execute();
122
123
124 assertEquals("onSuccess(save)", this.callback.getCallbackActionCalled());
125 assertFalse(googleSiteMapSession.getRootNode().hasNode("displayName"));
126 assertTrue(googleSiteMapSession.getRootNode().hasNode("new_displayName"));
127 assertEquals("changed_url", displayName.getProperty(SiteMapNodeTypes.SiteMap.URL).getString());
128 assertEquals("initial_type", displayName.getProperty(SiteMapNodeTypes.SiteMap.TYPE).getString());
129 }
130
131 @Test
132 public void executeSaveExistingSiteMapWithExistingNewName() throws RepositoryException, ActionExecutionException {
133
134 Node rootNode = googleSiteMapSession.getRootNode();
135 Node displayName = rootNode.addNode("displayName", SiteMapNodeTypes.SiteMap.NAME);
136 Node existingDisplayName = rootNode.addNode("new_displayName", SiteMapNodeTypes.SiteMap.NAME);
137 displayName.setProperty(SiteMapNodeTypes.SiteMap.URL, "initial_url");
138 displayName.setProperty(SiteMapNodeTypes.SiteMap.TYPE, "initial_type");
139 JcrNodeAdapter item = new JcrNodeAdapter(displayName);
140 item.addItemProperty(SiteMapNodeTypes.SiteMap.URL, new ObjectProperty<String>("changed_url"));
141 item.addItemProperty(SiteMapNodeTypes.SiteMap.DISPLAY_NAME, new ObjectProperty<String>("new_displayName"));
142 SaveSiteMapAction action = new SaveSiteMapAction(definition, item, validator, callback);
143
144
145 action.execute();
146
147
148 assertEquals("onSuccess(save)", this.callback.getCallbackActionCalled());
149 assertFalse(googleSiteMapSession.getRootNode().hasNode("displayName"));
150 assertFalse(existingDisplayName.hasProperty(SiteMapNodeTypes.SiteMap.URL));
151 assertTrue(googleSiteMapSession.getRootNode().hasNode("new_displayName0"));
152 assertEquals("new_displayName0", displayName.getName());
153 assertEquals("changed_url", displayName.getProperty(SiteMapNodeTypes.SiteMap.URL).getString());
154 assertEquals("initial_type", displayName.getProperty(SiteMapNodeTypes.SiteMap.TYPE).getString());
155 }
156 }