001    package org.hackystat.projectbrowser.page.projects;
002    
003    import java.util.ArrayList;
004    import java.util.List;
005    import org.apache.wicket.util.tester.WicketTester;
006    import org.hackystat.projectbrowser.ProjectBrowserApplication;
007    import org.hackystat.projectbrowser.ProjectBrowserSession;
008    import org.hackystat.projectbrowser.test.ProjectBrowserTestHelper;
009    import org.hackystat.sensorbase.resource.projects.jaxb.Property;
010    import org.junit.Assert;
011    import org.junit.Test;
012    
013    /**
014     * Tests the Projects Model.
015     * 
016     * @author Randy Cox
017     */
018    public class TestProjectsModel extends ProjectBrowserTestHelper {
019    
020      /**
021       * Test add prop uri row.
022       */
023      @Test
024      public void testAddPropUriRow() { // NOPMD WicketTester has its own assert classes.
025        new WicketTester(new ProjectBrowserApplication(getTestProperties()));
026        ProjectsSession session = ProjectBrowserSession.get().getProjectsSession();
027        ProjectsModel model = session.getProjectsModel();
028    
029        model.createProject();
030        int count = model.getPropUriRowsView().size();
031        model.addPropUriRow();
032        Assert.assertEquals("addPropUriRow should add one row.", count + 1, model.getPropUriRowsView()
033            .size());
034      }
035    
036      /**
037       * Test get extra uri rows.
038       */
039      @Test
040      public void testGetExtraUriRows() { // NOPMD WicketTester has its own assert classes.
041        new WicketTester(new ProjectBrowserApplication(getTestProperties()));
042        ProjectsSession session = ProjectBrowserSession.get().getProjectsSession();
043        ProjectsModel model = session.getProjectsModel();
044    
045        int testValue = 11;
046        model.setExtraPropertyUriRows(testValue);
047        Assert.assertEquals("getExtraUriRows get/set should be equal.", testValue, model
048            .getExtraPropertyUriRows());
049      }
050    
051      /**
052       * Test uri pattern access.
053       */
054      @Test
055      public void testUriRowAccess() { // NOPMD WicketTester has its own assert classes.
056        List<String> list = new ArrayList<String>();
057        list.add("URI_1");
058        list.add("URI_2");
059    
060        new WicketTester(new ProjectBrowserApplication(getTestProperties()));
061        ProjectsSession session = ProjectBrowserSession.get().getProjectsSession();
062        ProjectsModel model = session.getProjectsModel();
063        model.createProject();
064        model.setProjectUriPatterns(list);
065        String result = model.getProjectUriCommaStr();
066        Assert.assertEquals("Uri comma str", "URI_1, URI_2", result);
067      }
068    
069      /**
070       * Test remove bold.
071       */
072      @Test
073      public void testRemoveBold() { // NOPMD Wicket has its own asserts
074        new WicketTester(new ProjectBrowserApplication(getTestProperties()));
075        ProjectsSession session = ProjectBrowserSession.get().getProjectsSession();
076        ProjectsModel model = session.getProjectsModel();
077        String line = "test line";
078        String boldLine = "<b>" + line + "</b>";
079        Assert.assertEquals(line, model.removeBold(boldLine));
080      }
081    
082      /**
083       * Test remove bold.
084       */
085      @Test
086      public void testProjectMembers() { // NOPMD Wicket has its own asserts
087        new WicketTester(new ProjectBrowserApplication(getTestProperties()));
088        ProjectsSession session = ProjectBrowserSession.get().getProjectsSession();
089        ProjectsModel model = session.getProjectsModel();
090        model.createProject();
091    
092        String member1 = "member1";
093        String member2 = "member2";
094        String member3 = "member3";
095    
096        List<String> members = new ArrayList<String>();
097        members.add(member1);
098        members.add(member2);
099        members.add(member3);
100        model.setProjectMembers(members);
101    
102        Assert.assertEquals(3, model.getProjectMembers().size());
103        Assert.assertEquals(member1, model.getProjectMembers().get(0));
104        Assert.assertEquals(member2, model.getProjectMembers().get(1));
105        Assert.assertEquals(member3, model.getProjectMembers().get(2));
106    
107        members.remove(1);
108    
109        model.removeMembers(members);
110        Assert.assertEquals(1, model.getProjectMembers().size());
111        Assert.assertEquals(member2, model.getProjectMembers().get(0));
112    
113        Assert.assertEquals(member2, model.getProjectMembersStr());
114        model.setProjectMembersStr("one,two,three");
115        Assert.assertEquals("one, two, three", model.getProjectMembersStr());
116      }
117    
118      /**
119       * Test project access.
120       */
121      @Test
122      public void testProjectAccess() { // NOPMD Wicket has its own asserts
123        new WicketTester(new ProjectBrowserApplication(getTestProperties()));
124        ProjectsSession session = ProjectBrowserSession.get().getProjectsSession();
125        ProjectsModel model = session.getProjectsModel();
126        model.createProject();
127        String name = "name";
128        String owner = "owner";
129        String desc = "desc";
130        model.setProjectName(name);
131        model.setProjectOwner(owner);
132        model.setProjectDesc(desc);
133        String start = model.getProjectStartDate().toString();
134        String end = model.getProjectEndDate().toString();
135        String expected = "Project = \n  name = name\n  owner = owner\n  desc = desc\n" + "  start = "
136            + start + "\n  end = " + end + "\n  members = \n  invitations = \n"
137            + "  spectators = \n  properties = \n  uris = *\n";
138        Assert.assertEquals(expected, model.getProjectStr());
139      }
140    
141      /**
142       * Test project properites access.
143       */
144      @Test
145      public void testProjectProperiesAccess() { // NOPMD Wicket has its own asserts
146        new WicketTester(new ProjectBrowserApplication(getTestProperties()));
147        ProjectsSession session = ProjectBrowserSession.get().getProjectsSession();
148        ProjectsModel model = session.getProjectsModel();
149        model.createProject();
150    
151        List<Property> items = new ArrayList<Property>();
152        Property one = new Property();
153        one.setKey("key1");
154        one.setValue("value1");
155        Property two = new Property();
156        two.setKey("key2");
157        two.setValue("value2");
158        Property three = new Property();
159        three.setKey("key3");
160        three.setValue("value3");
161        items.add(one);
162        items.add(two);
163        items.add(three);
164        model.setProjectProperties(items);
165        String expected = "key1=value1\nkey2=value2\nkey3=value3";
166        Assert.assertEquals(expected, model.getProjectPropertiesStr());
167      }
168    
169      /**
170       * Test parsing of member comma or cr delimited string.
171       */
172      @Test
173      public void testParseMembersStr() { // NOPMD Wicket has its own asserts
174        String one = "one";
175        String two = "two";
176        String three = "three";
177        String comma = ",";
178        String cr = "\n";
179        String testCommaStr = one + comma + two + comma + " " + three;
180        String testCrStr = one + cr + two + cr + " " + three;
181        ProjectsModel model = new ProjectsModel();
182    
183        List<String> result;
184        result = model.parseMembersStr(testCommaStr);
185        Assert.assertEquals(one, result.get(0));
186        Assert.assertEquals(two, result.get(1));
187        Assert.assertEquals(three, result.get(2));
188    
189        result = model.parseMembersStr(testCrStr);
190        Assert.assertEquals(one, result.get(0));
191        Assert.assertEquals(two, result.get(1));
192        Assert.assertEquals(three, result.get(2));
193      }
194    
195      /**
196       * Test semantic check of name.
197       */
198      @Test
199      public void testIsSemanticCheckOk() { // NOPMD Wicket has its own asserts
200        new WicketTester(new ProjectBrowserApplication(getTestProperties()));
201        String nameWithSpace = "test project";
202        String nameWithSlash = "test/project";
203        String nameGood = "test";
204        ProjectsModel model = new ProjectsModel();
205        model.createProject();
206        
207        model.setProjectName(nameWithSpace);
208        Assert.assertFalse(model.isSemanticCheckOk());
209    
210        model.setProjectName(nameWithSlash);
211        Assert.assertFalse(model.isSemanticCheckOk());
212    
213        model.setProjectName(nameGood);
214        Assert.assertTrue(model.isSemanticCheckOk());
215      }
216    }