You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by aj...@apache.org on 2008/02/13 07:24:06 UTC

svn commit: r627271 [3/8] - in /incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki: ./ action/ attachment/ auth/ auth/acl/ auth/authorize/ auth/login/ auth/permissions/ auth/user/ dav/ diff/ filters/ htmltowiki/ parser/

Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/UserPreferencesActionBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/UserPreferencesActionBeanTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/UserPreferencesActionBeanTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/UserPreferencesActionBeanTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,119 @@
+package com.ecyrd.jspwiki.action;
+
+import java.util.Properties;
+
+import javax.servlet.http.Cookie;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import net.sourceforge.stripes.mock.MockHttpServletRequest;
+import net.sourceforge.stripes.mock.MockHttpServletResponse;
+import net.sourceforge.stripes.mock.MockRoundtrip;
+import net.sourceforge.stripes.mock.MockServletContext;
+
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.WikiSession;
+import com.ecyrd.jspwiki.auth.Users;
+import com.ecyrd.jspwiki.auth.login.CookieAssertionLoginModule;
+
+public class UserPreferencesActionBeanTest extends TestCase
+{
+    TestEngine m_engine;
+    
+    public void setUp()
+    {
+        // Start the WikiEngine, and stash reference
+        Properties props = new Properties();
+        try 
+        {
+            props.load( TestEngine.findTestProperties() );
+            m_engine = new TestEngine( props );
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException("Could not set up TestEngine: " + e.getMessage());
+        }
+    }
+    
+    public void testCreateAssertedName() throws Exception
+    {
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip;
+        UserPreferencesActionBean bean;
+        
+        // Create session; set 'assertion' param; verify it got saved
+        trip = new MockRoundtrip(ctx, "/UserPreferences.action");
+        trip.setParameter("assertedName", "MyAssertedIdentity");
+        trip.setParameter("createAssertedName", "true");
+        trip.execute();
+        bean = trip.getActionBean(UserPreferencesActionBean.class);
+        assertEquals("/", trip.getDestination());
+        
+        // Verify that the asserted name cookie is present in the Response
+        MockHttpServletResponse response = (MockHttpServletResponse)bean.getContext().getResponse();
+        Cookie[] cookies = response.getCookies();
+        assertEquals(1, cookies.length);
+        Cookie cookie = cookies[0];
+        assertEquals(CookieAssertionLoginModule.PREFS_COOKIE_NAME,cookie.getName());
+        assertEquals("MyAssertedIdentity",cookie.getValue());
+    }
+    
+    public void testCreateAssertedNameAfterLogin() throws Exception
+    {
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip;
+        UserPreferencesActionBean bean;
+        
+        // Create session; login in as Janne
+        trip = new MockRoundtrip(ctx, "/UserPreferences.action");
+        MockHttpServletRequest request = trip.getRequest();
+        WikiSession wikiSession = WikiSession.getWikiSession(m_engine, request);
+        boolean login = m_engine.getAuthenticationManager().login(wikiSession, Users.JANNE,Users.JANNE_PASS);
+        assertTrue("Could not log in.", login);
+        
+        // Set 'assertion' param; verify redirect to front page
+        trip.setParameter("assertedName", "MyAssertedIdentity");
+        trip.setParameter("createAssertedName", "true");
+        trip.execute();
+        bean = trip.getActionBean(UserPreferencesActionBean.class);
+        assertEquals("/", trip.getDestination());
+        
+        // Verify that the asserted name cookie is NOT present in the Response
+        // (authenticated users cannot set the assertion cookie)
+        MockHttpServletResponse response = (MockHttpServletResponse)bean.getContext().getResponse();
+        Cookie[] cookies = response.getCookies();
+        assertEquals(0, cookies.length);
+    }
+    
+    public void testClearAssertedName() throws Exception
+    {
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip;
+        UserPreferencesActionBean bean;
+        
+        // Create session; set 'assertion' param; verify it got saved
+        trip = new MockRoundtrip(ctx, "/UserPreferences.action");
+        MockHttpServletRequest request = trip.getRequest();
+        Cookie cookie = new Cookie(CookieAssertionLoginModule.PREFS_COOKIE_NAME, "MyAssertedIdentity");
+        request.setCookies(new Cookie[]{cookie});
+        trip.setParameter("clearAssertedName", "true");
+        trip.execute();
+        bean = trip.getActionBean(UserPreferencesActionBean.class);
+        assertEquals("/Logout.jsp", trip.getDestination());
+        
+        // Verify that the asserted name cookie is gone from the Response
+        MockHttpServletResponse response = (MockHttpServletResponse)bean.getContext().getResponse();
+        Cookie[] cookies = response.getCookies();
+        assertEquals(1, cookies.length);
+        cookie = cookies[0];
+        assertEquals(CookieAssertionLoginModule.PREFS_COOKIE_NAME,cookie.getName());
+        assertEquals("",cookie.getValue());
+    }
+    
+    public static Test suite()
+    {
+        return new TestSuite( UserPreferencesActionBeanTest.class );
+    }
+    
+}

Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/UserProfileActionBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/UserProfileActionBeanTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/UserProfileActionBeanTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/UserProfileActionBeanTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,386 @@
+package com.ecyrd.jspwiki.action;
+
+import java.util.Properties;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import net.sourceforge.stripes.mock.MockHttpServletRequest;
+import net.sourceforge.stripes.mock.MockRoundtrip;
+import net.sourceforge.stripes.mock.MockServletContext;
+import net.sourceforge.stripes.validation.ValidationErrors;
+
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.WikiSession;
+import com.ecyrd.jspwiki.auth.NoSuchPrincipalException;
+import com.ecyrd.jspwiki.auth.user.UserDatabase;
+import com.ecyrd.jspwiki.auth.user.UserProfile;
+
+public class UserProfileActionBeanTest extends TestCase
+{
+    TestEngine m_engine;
+    
+    public void setUp()
+    {
+        // Start the WikiEngine, and stash reference
+        Properties props = new Properties();
+        try 
+        {
+            props.load( TestEngine.findTestProperties() );
+            m_engine = new TestEngine( props );
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException("Could not set up TestEngine: " + e.getMessage());
+        }
+    }
+    
+    public void testMissingParameters() throws Exception {
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip;
+        UserProfileActionBean bean;
+        ValidationErrors errors;
+        
+        // Get the profile, but don't set any parameters; should fail with 4 errors
+        // profile.fullname
+        // profile.loginName
+        // profile.passwordAgain
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        // Check to make sure all our expected validation errors are here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 3, errors.size());
+        assertTrue( errors.containsKey( "profile.loginName" ) );
+        assertTrue( errors.containsKey( "profile.fullname" ) );
+        assertTrue( errors.containsKey( "profile.password" ) );
+        // Validate that the bean values are set (or not!) as expected
+        assertEquals(null, bean.getProfile().getLoginName() );
+        assertEquals(null, bean.getProfile().getFullname() );
+        assertEquals(null, bean.getProfile().getPassword() );
+        assertEquals(null, bean.getPasswordAgain() );
+        assertEquals(null, bean.getProfile().getEmail() );
+        assertEquals(MockRoundtrip.DEFAULT_SOURCE_PAGE, trip.getDestination() );
+        
+        // Submit just the e-mail param
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.email", "fred@friendly.org");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        errors = bean.getContext().getValidationErrors();
+        // Check to make sure all our expected validation errors are here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 3, errors.size());
+        assertTrue( errors.containsKey( "profile.loginName" ) );
+        assertTrue( errors.containsKey( "profile.fullname" ) );
+        assertTrue( errors.containsKey( "profile.password" ) );
+        // Validate that the bean values are set (or not!) as expected
+        assertEquals(null, bean.getProfile().getLoginName() );
+        assertEquals(null, bean.getProfile().getFullname() );
+        assertEquals(null, bean.getProfile().getPassword() );
+        assertEquals(null, bean.getPasswordAgain() );
+        assertEquals("fred@friendly.org", bean.getProfile().getEmail() );
+        assertEquals(MockRoundtrip.DEFAULT_SOURCE_PAGE, trip.getDestination() );
+        
+        // Submit just the full name param
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.fullname", "Fred Friendly");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        // Check to make sure all our expected validation errors are here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 2, errors.size());
+        assertTrue( errors.containsKey( "profile.loginName" ) );
+        assertTrue( errors.containsKey( "profile.password" ) );
+        // Validate that the bean values are set (or not!) as expected
+        assertEquals(null, bean.getProfile().getLoginName() );
+        assertEquals("Fred Friendly", bean.getProfile().getFullname() );
+        assertEquals(null, bean.getProfile().getPassword() );
+        assertEquals(null, bean.getPasswordAgain() );
+        assertEquals(null, bean.getProfile().getEmail() );
+        assertEquals(MockRoundtrip.DEFAULT_SOURCE_PAGE, trip.getDestination() );
+        
+        // Submit just the login name param
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.loginName", "fred");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        // Check to make sure all our expected validation errors are here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 2, errors.size());
+        assertTrue( errors.containsKey( "profile.fullname" ) );
+        assertTrue( errors.containsKey( "profile.password" ) );
+        // Validate that the bean values are set (or not!) as expected
+        assertEquals("fred", bean.getProfile().getLoginName() );
+        assertEquals(null, bean.getProfile().getFullname() );
+        assertEquals(null, bean.getProfile().getPassword() );
+        assertEquals(null, bean.getPasswordAgain() );
+        assertEquals(null, bean.getProfile().getEmail() );
+        assertEquals(MockRoundtrip.DEFAULT_SOURCE_PAGE, trip.getDestination() );
+        
+        // Submit just the first password field
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.password", "myPassword");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        // Check to make sure all our expected validation errors are here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 3, errors.size());
+        assertTrue( errors.containsKey( "profile.loginName" ) );
+        assertTrue( errors.containsKey( "profile.fullname" ) );
+        assertTrue( errors.containsKey( "profile.password" ) );
+        // Validate that the bean values are set (or not!) as expected
+        assertEquals(null, bean.getProfile().getLoginName() );
+        assertEquals(null, bean.getProfile().getFullname() );
+        assertEquals("myPassword", bean.getProfile().getPassword() );
+        assertEquals(null, bean.getPasswordAgain() );
+        assertEquals(null, bean.getProfile().getEmail() );
+        assertEquals(MockRoundtrip.DEFAULT_SOURCE_PAGE, trip.getDestination() );
+        
+        // Submit just the second password field
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("passwordAgain", "myPassword");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        // Check to make sure all our expected validation errors are here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 3, errors.size());
+        assertTrue( errors.containsKey( "profile.loginName" ) );
+        assertTrue( errors.containsKey( "profile.fullname" ) );
+        assertTrue( errors.containsKey( "profile.password" ) );
+        // Validate that the bean values are set (or not!) as expected
+        assertEquals(null, bean.getProfile().getLoginName() );
+        assertEquals(null, bean.getProfile().getFullname() );
+        assertEquals(null, bean.getProfile().getPassword() );
+        assertEquals("myPassword", bean.getPasswordAgain() );
+        assertEquals(null, bean.getProfile().getEmail() );
+        assertEquals(MockRoundtrip.DEFAULT_SOURCE_PAGE, trip.getDestination() );
+    }
+    
+    public void testMismatchedPasswords() throws Exception {
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip;
+        UserProfileActionBean bean;
+        ValidationErrors errors;
+        
+        // Set different passwords
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.loginName", "fred");
+        trip.setParameter("profile.fullname", "Fred Friendly");
+        trip.setParameter("profile.email", "fred@friendly.org");
+        trip.setParameter("profile.password", "mypassword");
+        trip.setParameter("passwordAgain", "Mypassword");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        // Check to make sure all our expected validation errors are here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 1, errors.size());
+        assertTrue( errors.containsKey( "profile.password") );
+        assertEquals(MockRoundtrip.DEFAULT_SOURCE_PAGE, trip.getDestination() );
+    }
+    
+    public void testIllegalEmail() throws Exception {
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip;
+        UserProfileActionBean bean;
+        ValidationErrors errors;
+        
+        // Set an illegal e-mail address
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.loginName", "fred");
+        trip.setParameter("profile.fullname", "Fred Friendly");
+        trip.setParameter("profile.email", "illegalEmail");
+        trip.setParameter("profile.password", "mypassword");
+        trip.setParameter("passwordAgain", "mypassword");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        // Check to make sure all our expected validation errors are here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 1, errors.size());
+        assertTrue( errors.containsKey( "profile.email") );
+        assertEquals(MockRoundtrip.DEFAULT_SOURCE_PAGE, trip.getDestination() );
+    }
+    
+    public void testSaveProfile() throws Exception
+    {
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip;
+        UserProfileActionBean bean;
+        ValidationErrors errors;
+        
+        // Generate user ID and validate it doesn't exist already
+        String suffix = String.valueOf(System.currentTimeMillis());
+        assertFalse( userExists("user" + suffix));
+        
+        // Create new user
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.loginName", "user"+suffix);
+        trip.setParameter("profile.fullname", "Fred Friendly"+suffix);
+        trip.setParameter("profile.email", "fred@friendly.org");
+        trip.setParameter("profile.password", "mypassword");
+        trip.setParameter("passwordAgain", "mypassword");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        errors = bean.getContext().getValidationErrors();
+        // Check to make sure no validation errors here...
+        assertEquals( 0, errors.size());
+        assertEquals("/", trip.getDestination() );
+        
+        // Verify user was saved
+        assertTrue( userExists("user" + suffix));
+        
+        // Verify that wikiname and timestamps were set too
+        UserDatabase db = m_engine.getUserManager().getUserDatabase();
+        UserProfile profile = db.findByLoginName("user"+suffix);
+        assertEquals("FredFriendly"+suffix, profile.getWikiName());
+        assertNotNull(profile.getCreated());
+        assertNotNull(profile.getLastModified());
+        
+        // Delete the user we just created
+        m_engine.getUserManager().getUserDatabase().deleteByLoginName("user"+suffix);
+    }
+    
+    public void testSaveProfileWithCollisions() throws Exception
+    {
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip;
+        UserProfileActionBean bean;
+        ValidationErrors errors;
+        
+        // Create user #1; save; verify it saved ok
+        String suffix1 = String.valueOf(System.currentTimeMillis());
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.loginName", "user"+suffix1);
+        trip.setParameter("profile.fullname", "Fred Friendly"+suffix1);
+        trip.setParameter("profile.email", "fred1@friendly.org");
+        trip.setParameter("profile.password", "mypassword");
+        trip.setParameter("passwordAgain", "mypassword");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        // Check to make sure no validation errors here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 0, errors.size());
+        assertEquals("/", trip.getDestination() );
+        assertTrue( userExists("user" + suffix1));
+        
+        // Create user #2, but same loginName as #1; save; verify it did NOT save
+        // (because loginnames collided), and redirected back to .Action
+        String suffix2 = String.valueOf(System.currentTimeMillis());
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.loginName", "user"+suffix1);
+        trip.setParameter("profile.fullname", "Fred Friendly"+suffix2);
+        trip.setParameter("profile.email", "fred2@friendly.org");
+        trip.setParameter("profile.password", "mypassword");
+        trip.setParameter("passwordAgain", "mypassword");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        // Check to make sure all our expected validation errors are here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 1, errors.size());
+        assertTrue( errors.containsKey( "profile.loginName") );
+        assertEquals(MockRoundtrip.DEFAULT_SOURCE_PAGE, trip.getDestination() );
+        assertFalse( userExists("user" + suffix2));
+        
+        // Create user #2, but same fullname as #1; save; verify it did NOT save
+        // (because fullnames collided), and redirected back to .Action
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.loginName", "user"+suffix2);
+        trip.setParameter("profile.fullname", "Fred Friendly"+suffix1);
+        trip.setParameter("profile.email", "fred2@friendly.org");
+        trip.setParameter("profile.password", "mypassword");
+        trip.setParameter("passwordAgain", "mypassword");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        // Check to make sure all our expected validation errors are here...
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 1, errors.size());
+        assertTrue( errors.containsKey( "profile.fullname") );
+        assertEquals(MockRoundtrip.DEFAULT_SOURCE_PAGE, trip.getDestination() );
+        assertFalse( userExists("user" + suffix2));
+        
+        // Delete the first user we just created
+        m_engine.getUserManager().getUserDatabase().deleteByLoginName("user"+suffix1);
+    }
+    
+    public void testSaveProfileAgain() throws Exception
+    {
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip;
+        UserProfileActionBean bean;
+        ValidationErrors errors;
+        
+        // Create user; save; verify it saved ok
+        String suffix = String.valueOf(System.currentTimeMillis());
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        trip.setParameter("profile.loginName", "user"+suffix);
+        trip.setParameter("profile.fullname", "Fred Friendly"+suffix);
+        trip.setParameter("profile.email", "fred1@friendly.org");
+        trip.setParameter("profile.password", "mypassword");
+        trip.setParameter("passwordAgain", "mypassword");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        errors = bean.getContext().getValidationErrors();
+        assertEquals( 0, errors.size());
+        assertEquals("/", trip.getDestination() );
+        assertTrue( userExists("user" + suffix));
+        
+        // Create new session and login as new user...
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        MockHttpServletRequest request = trip.getRequest();
+        WikiSession wikiSession = WikiSession.getWikiSession(m_engine, request);
+        boolean login = m_engine.getAuthenticationManager().login(wikiSession, "user"+suffix,"mypassword");
+        assertTrue("Could not log in.", login);
+        
+        // Make sure the saved profile is loaded when we access prefs page
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        assertEquals("user"+suffix, bean.getProfile().getLoginName());
+        assertEquals("Fred Friendly"+suffix, bean.getProfile().getFullname());
+        assertEquals("fred1@friendly.org", bean.getProfile().getEmail());
+        
+        // Now, create another session, and log in again....
+        trip = new MockRoundtrip(ctx, "/UserProfile.action");
+        request = trip.getRequest();
+        wikiSession = WikiSession.getWikiSession(m_engine, request);
+        login = m_engine.getAuthenticationManager().login(wikiSession, "user"+suffix,"mypassword");
+        assertTrue("Could not lot in.", login);
+        
+        // Pass new values for the mutable fields (except the password).
+        // The e-mails, loginname and fullname should all change
+        trip.addParameter("profile.loginName", "wilma");
+        trip.addParameter("profile.fullname", "Wilma Flintstone");
+        trip.addParameter("profile.email", "wilma@flintstone.org");
+        trip.execute("save");
+        bean = trip.getActionBean(UserProfileActionBean.class);
+        assertEquals("wilma", bean.getProfile().getLoginName());
+        assertEquals("Wilma Flintstone", bean.getProfile().getFullname());
+        assertEquals("wilma@flintstone.org", bean.getProfile().getEmail());
+        assertNull(bean.getProfile().getPassword());
+        assertNull(bean.getPasswordAgain());
+        
+        // Delete the user we just created
+        m_engine.getUserManager().getUserDatabase().deleteByLoginName("wilma");
+    }
+    
+    public static Test suite()
+    {
+        return new TestSuite( UserProfileActionBeanTest.class );
+    }
+    
+    private boolean userExists(String name)
+    {
+        UserDatabase db = m_engine.getUserManager().getUserDatabase();
+        boolean found = false;
+        try 
+        {
+            db.find(name);
+            found = true;
+        }
+        catch (NoSuchPrincipalException e)
+        {
+            // Swallow
+        }
+        return found;
+    }
+    
+}

Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/ViewActionBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/ViewActionBeanTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/ViewActionBeanTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/ViewActionBeanTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,77 @@
+package com.ecyrd.jspwiki.action;
+
+import java.util.Properties;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import net.sourceforge.stripes.mock.MockRoundtrip;
+import net.sourceforge.stripes.mock.MockServletContext;
+
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.WikiPage;
+
+public class ViewActionBeanTest extends TestCase
+{
+    TestEngine m_engine;
+    
+    public void setUp()
+    {
+        // Start the WikiEngine, and stash reference
+        Properties props = new Properties();
+        try 
+        {
+            props.load( TestEngine.findTestProperties() );
+            m_engine = new TestEngine( props );
+        }
+        catch (Exception e)
+        {
+            throw new RuntimeException("Could not set up TestEngine: " + e.getMessage());
+        }
+    }
+    
+    public void testActionBean() throws Exception {
+        // Save page Main
+        m_engine.saveText("Test", "This is a test.");
+        WikiPage page = m_engine.getPage("Test");
+        assertNotNull("Did not save page Test!", page);
+        
+        // Set the 'page' request parameter to 'Main'...
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip = new MockRoundtrip(ctx, "/Wiki.action");
+        trip.setParameter("page", "Test");
+        trip.execute("view");
+
+        // ...we should automatically see Test bound to the ActionBean (nice!)
+        ViewActionBean bean = trip.getActionBean(ViewActionBean.class);
+        assertEquals( page, bean.getPage() );
+        
+        // ...and the destination should be Wiki.jsp (aka /View.action)
+        assertEquals("/Wiki.action", trip.getDestination() );
+    }
+    
+    public void testActionBeanNoParameter() throws Exception {
+        // Save page Main
+        m_engine.saveText("Main", "This is the main page.");
+        WikiPage page = m_engine.getPage("Main");
+        assertNotNull("Did not save page Main!", page);
+        
+        // Execute the request without specifying a page
+        MockServletContext ctx = m_engine.getServletContext();
+        MockRoundtrip trip = new MockRoundtrip(ctx, "/Wiki.action");
+        trip.execute("view");
+
+        // ...we should automatically see Main bound to the ActionBean (nice!)
+        ViewActionBean bean = trip.getActionBean(ViewActionBean.class);
+        page = m_engine.getPage("Main");
+        assertEquals( page, bean.getPage() );
+        
+        // ...and the destination should be Wiki.jsp (aka /View.action)
+        assertEquals("/Wiki.action", trip.getDestination() );
+    }
+    
+    public static Test suite()
+    {
+        return new TestSuite( ViewActionBeanTest.class );
+    }
+}

Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/WikiActionBeanFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/WikiActionBeanFactoryTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/WikiActionBeanFactoryTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/action/WikiActionBeanFactoryTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,160 @@
+/*
+ * (C) Janne Jalkanen 2005
+ * 
+ */
+
+package com.ecyrd.jspwiki.action;
+import java.util.Properties;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+import net.sourceforge.stripes.action.UrlBinding;
+import net.sourceforge.stripes.mock.MockHttpServletRequest;
+import net.sourceforge.stripes.mock.MockHttpServletResponse;
+import net.sourceforge.stripes.mock.MockHttpSession;
+import net.sourceforge.stripes.mock.MockRoundtrip;
+
+import com.ecyrd.jspwiki.*;
+import com.ecyrd.jspwiki.action.*;
+
+public class WikiActionBeanFactoryTest extends TestCase
+{
+    TestEngine testEngine;
+    WikiActionBeanFactory resolver;
+
+    protected void setUp() throws Exception
+    {
+        Properties props = new Properties();
+        props.load( TestEngine.findTestProperties() );
+        props.put( WikiEngine.PROP_MATCHPLURALS, "yes" );
+        testEngine = new TestEngine( props );
+        resolver = testEngine.getWikiActionBeanFactory();
+        testEngine.saveText( "SinglePage", "This is a test." );
+        testEngine.saveText( "PluralPages", "This is a test." );
+    }
+    
+    protected void tearDown() throws Exception
+    {
+        testEngine.deletePage( "TestPage" );
+    }
+    
+    public void testGetUrlPatterns()
+    {
+        // If we look for action with "edit" request context, we get EDIT action
+        assertEquals( WikiContext.EDIT, EditActionBean.class.getAnnotation(WikiRequestContext.class).value() );
+        
+        // Ditto for prefs context
+        assertEquals( WikiContext.PREFS, UserPreferencesActionBean.class.getAnnotation(WikiRequestContext.class).value() );
+        
+        // Ditto for group view context
+        assertEquals( WikiContext.VIEW_GROUP, GroupActionBean.class.getAnnotation(WikiRequestContext.class).value() );
+    }
+    
+    public void testActionBeansNoParams() throws WikiException
+    {
+        WikiActionBean bean;
+        MockRoundtrip trip = testEngine.guestTrip( ViewActionBean.class );
+        MockHttpServletRequest request = trip.getRequest();
+        MockHttpServletResponse response = trip.getResponse();
+        MockHttpSession session = (MockHttpSession)request.getSession();
+        
+        // Passing an EDIT request with no explicit page params means the EDIT action
+        bean = resolver.newActionBean( request, response, EditActionBean.class );
+        assertEquals( WikiContext.EDIT, bean.getRequestContext() );
+        assertNull( ((WikiContext)bean).getPage() );
+        
+        // Ditto for prefs context
+        bean = resolver.newActionBean( request, response, UserPreferencesActionBean.class );
+        assertEquals( WikiContext.PREFS, bean.getRequestContext() );
+        
+        // Ditto for group view context
+        bean = resolver.newActionBean( request, response, GroupActionBean.class );
+        assertEquals( WikiContext.VIEW_GROUP, bean.getRequestContext() );
+        assertNull( ((GroupContext)bean).getGroup() );
+        
+        // Request for "UserPreference.jsp" should resolve to PREFS action
+        request = new MockHttpServletRequest( testEngine.getServletContext().getServletContextName(), "/UserPreferences.jsp");
+        request.setSession( session );
+        bean = resolver.newActionBean( request, response, UserPreferencesActionBean.class );
+        assertEquals( WikiContext.PREFS, bean.getRequestContext() );
+        
+        // We don't care about JSPs not mapped to actions, because the bean we get only depends on the class we pass
+        // FIXME: this won't work because WikiActionBeanResolver doesn't keep a cache of URLBindings 
+        request = new MockHttpServletRequest( testEngine.getServletContext().getServletContextName(), "/NonExistent.jsp");
+        request.setSession( session );
+        bean = resolver.newActionBean( request, response, EditActionBean.class );
+        assertEquals( WikiContext.EDIT, bean.getRequestContext() );
+        assertNull( ((WikiContext)bean).getPage() );
+    }
+    
+    public void testActionBeansWithParams() throws Exception
+    {
+        WikiActionBean bean;
+        WikiPage page = testEngine.getPage( "SinglePage" );
+        MockRoundtrip trip = testEngine.guestTrip( ViewActionBean.class );
+        MockHttpServletRequest request = trip.getRequest();
+        MockHttpServletResponse response = trip.getResponse();
+        MockHttpSession session = (MockHttpSession)request.getSession();
+        
+        // Passing an EDIT request with page param yields an ActionBean with a non-null page property
+        request = new MockHttpServletRequest( testEngine.getServletContext().getServletContextName(), "/Edit.jsp");
+        request.setSession( session );
+        request.getParameterMap().put( "page", new String[]{"SinglePage"} );
+        bean = resolver.newActionBean( request, response, EditActionBean.class );
+        assertEquals( WikiContext.EDIT, bean.getRequestContext() );
+        assertEquals( page, ((WikiContext)bean).getPage());
+        
+        // Passing a VIEW request with page=FindPage yields an ordinary page name, not a special page or JSP
+        // FIXME: this won't work because WikiActionBeanResolver doesn't keep a cache of URLBindings 
+        request = new MockHttpServletRequest( testEngine.getServletContext().getServletContextName(), "/Wiki.jsp");
+        request.setSession( session );
+        request.getParameterMap().put( "page", new String[]{"FindPage"} );
+        bean = resolver.newActionBean( request, response, ViewActionBean.class );
+        assertEquals( WikiContext.VIEW, bean.getRequestContext() );
+        
+        // Passing a VIEW_GROUP request with group="Art" gets a ViewGroupActionBean
+        request = new MockHttpServletRequest( testEngine.getServletContext().getServletContextName(), "/Wiki.jsp");
+        request.setSession( session );
+        request.getParameterMap().put( "group", new String[]{"Art"} );
+        bean = resolver.newActionBean( request, response, GroupActionBean.class );
+        assertEquals( WikiContext.VIEW_GROUP, bean.getRequestContext() );
+        assertEquals( "/Group.action", bean.getClass().getAnnotation(UrlBinding.class).value() );
+    }
+    
+    public void testFinalPageName() throws Exception
+    {
+        String page;
+        page = resolver.getFinalPageName( "SinglePage" );
+        assertEquals( "SinglePage", page );
+        page = resolver.getFinalPageName( "SinglePages" );
+        assertEquals( "SinglePage", page );
+        
+        page = resolver.getFinalPageName( "PluralPages" );
+        assertEquals( "PluralPages", page );
+        page = resolver.getFinalPageName( "PluralPage" );
+        assertEquals( "PluralPages", page );
+        
+        page = resolver.getFinalPageName( "NonExistentPage" );
+        assertNull( page );
+    }
+    
+    public void testSpecialPageReference()
+    {
+        String url;
+        url = resolver.getSpecialPageReference( "RecentChanges" );
+        assertEquals( "RecentChanges.jsp", url );
+        
+        url = resolver.getSpecialPageReference( "FindPage" );
+        assertEquals( "Search.jsp", url );
+        
+        // UserPrefs doesn't exist in our test properties
+        url = resolver.getSpecialPageReference( "UserPrefs" );
+        assertNull( url );
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite( WikiActionBeanFactoryTest.class );
+    }
+}

Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/attachment/AllTests.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/attachment/AllTests.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/attachment/AllTests.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/attachment/AllTests.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,21 @@
+
+package com.ecyrd.jspwiki.attachment;
+
+import junit.framework.*;
+
+public class AllTests extends TestCase
+{
+    public AllTests( String s )
+    {
+        super( s );
+    }
+
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite("Attachment package");
+
+        suite.addTest( AttachmentManagerTest.suite() );
+
+        return suite;
+    }
+}

Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/attachment/AttachmentManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/attachment/AttachmentManagerTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/attachment/AttachmentManagerTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/attachment/AttachmentManagerTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,327 @@
+
+package com.ecyrd.jspwiki.attachment;
+
+import junit.framework.*;
+import java.io.*;
+import java.util.*;
+
+import com.ecyrd.jspwiki.*;
+
+public class AttachmentManagerTest extends TestCase
+{
+    public static final String NAME1 = "TestPage";
+    public static final String NAMEU = "TestPage\u00e6";
+
+    Properties props = new Properties();
+
+    TestEngine m_engine;
+    AttachmentManager m_manager;
+
+    static String c_fileContents = "ABCDEFGHIJKLMNOPQRSTUVWxyz";
+
+    public AttachmentManagerTest( String s )
+    {
+        super( s );
+    }
+
+    public void setUp()
+        throws Exception
+    {
+        props.load( TestEngine.findTestProperties() );
+
+        m_engine  = new TestEngine(props);
+        m_manager = m_engine.getAttachmentManager();
+
+        m_engine.saveText( NAME1, "Foobar" );
+        m_engine.saveText( NAMEU, "Foobar" );
+    }
+
+    private File makeAttachmentFile()
+        throws Exception
+    {
+        File tmpFile = File.createTempFile("test","txt");
+        tmpFile.deleteOnExit();
+
+        FileWriter out = new FileWriter( tmpFile );
+        
+        FileUtil.copyContents( new StringReader( c_fileContents ), out );
+
+        out.close();
+        
+        return tmpFile;
+    }
+
+    public void tearDown()
+    {
+        TestEngine.deleteTestPage( NAME1 );
+        TestEngine.deleteTestPage( NAMEU );
+
+        m_engine.deleteAttachments(NAME1);
+        m_engine.deleteAttachments(NAMEU);
+
+        TestEngine.emptyWorkDir();
+    }
+
+    public void testEnabled()        
+    {
+        assertTrue( "not enabled", m_manager.attachmentsEnabled() );
+    }
+
+    public void testSimpleStore()
+        throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAME1, "test1.txt" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        Attachment att2 = m_manager.getAttachmentInfo( m_engine.getWikiActionBeanFactory().newViewActionBean(
+                                                       new WikiPage(m_engine, NAME1)), 
+                                                       "test1.txt" );
+
+        assertNotNull( "attachment disappeared", att2 );
+        assertEquals( "name", att.getName(), att2.getName() );
+        assertEquals( "author", att.getAuthor(), att2.getAuthor() );
+        assertEquals( "size", c_fileContents.length(), att2.getSize() );
+
+        InputStream in = m_manager.getAttachmentStream( att2 );
+
+        assertNotNull( "stream", in );
+
+        StringWriter sout = new StringWriter();
+        FileUtil.copyContents( new InputStreamReader(in), sout );
+
+        in.close();
+        sout.close();
+
+        assertEquals( "contents", c_fileContents, sout.toString() );
+    }
+
+    public void testSimpleStoreSpace()
+        throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAME1, "test file.txt" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        Attachment att2 = m_manager.getAttachmentInfo( m_engine.getWikiActionBeanFactory().newViewActionBean(
+                                                                          new WikiPage(m_engine, NAME1)), 
+                                                       "test file.txt" );
+
+        assertNotNull( "attachment disappeared", att2 );
+        assertEquals( "name", att.getName(), att2.getName() );
+        assertEquals( "author", att.getAuthor(), att2.getAuthor() );
+        assertEquals( "size", c_fileContents.length(), att2.getSize() );
+
+        InputStream in = m_manager.getAttachmentStream( att2 );
+
+        assertNotNull( "stream", in );
+
+        StringWriter sout = new StringWriter();
+        FileUtil.copyContents( new InputStreamReader(in), sout );
+
+        in.close();
+        sout.close();
+
+        assertEquals( "contents", c_fileContents, sout.toString() );
+    }
+
+    public void testSimpleStoreByVersion()
+        throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAME1, "test1.txt" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        Attachment att2 = m_manager.getAttachmentInfo( m_engine.getWikiActionBeanFactory().newViewActionBean(
+                                                                          new WikiPage(m_engine, NAME1)), 
+                                                       "test1.txt", 1 );
+
+        assertNotNull( "attachment disappeared", att2 );
+        assertEquals( "version", 1, att2.getVersion() );
+        assertEquals( "name", att.getName(), att2.getName() );
+        assertEquals( "author", att.getAuthor(), att2.getAuthor() );
+        assertEquals( "size", c_fileContents.length(), att2.getSize() );
+
+        InputStream in = m_manager.getAttachmentStream( att2 );
+
+        assertNotNull( "stream", in );
+
+        StringWriter sout = new StringWriter();
+        FileUtil.copyContents( new InputStreamReader(in), sout );
+
+        in.close();
+        sout.close();
+
+        assertEquals( "contents", c_fileContents, sout.toString() );
+    }
+
+    public void testMultipleStore()
+        throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAME1, "test1.txt" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        att.setAuthor( "FooBar" );
+        m_manager.storeAttachment( att, makeAttachmentFile() );        
+
+        Attachment att2 = m_manager.getAttachmentInfo( m_engine.getWikiActionBeanFactory().newViewActionBean(
+                                                                          new WikiPage(m_engine, NAME1)), 
+                                                       "test1.txt" );
+
+        assertNotNull( "attachment disappeared", att2 );
+        assertEquals( "name", att.getName(), att2.getName() );
+        assertEquals( "author", att.getAuthor(), att2.getAuthor() );
+        assertEquals( "version", 2, att2.getVersion() );
+
+        InputStream in = m_manager.getAttachmentStream( att2 );
+
+        assertNotNull( "stream", in );
+
+        StringWriter sout = new StringWriter();
+        FileUtil.copyContents( new InputStreamReader(in), sout );
+
+        in.close();
+        sout.close();
+
+        assertEquals( "contents", c_fileContents, sout.toString() );
+
+
+        //
+        // Check that first author did not disappear
+        //
+
+        Attachment att3 = m_manager.getAttachmentInfo( m_engine.getWikiActionBeanFactory().newViewActionBean(
+                                                                          new WikiPage(m_engine, NAME1)), 
+                                                       "test1.txt",
+                                                       1 );
+        assertEquals( "version of v1", 1, att3.getVersion() );
+        assertEquals( "name of v1", "FirstPost", att3.getAuthor() );
+    }
+
+    public void testListAttachments()
+        throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAME1, "test1.txt" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        Collection c = m_manager.listAttachments( new WikiPage(m_engine, NAME1) );
+
+        assertEquals( "Length", 1, c.size() );
+
+        Attachment att2 = (Attachment) c.toArray()[0];
+
+        assertEquals( "name", att.getName(), att2.getName() );
+        assertEquals( "author", att.getAuthor(), att2.getAuthor() );        
+    }
+
+    public void testSimpleStoreWithoutExt() throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAME1, "test1" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        Attachment att2 = m_manager.getAttachmentInfo( m_engine.getWikiActionBeanFactory().newViewActionBean(
+                                                                          new WikiPage(m_engine, NAME1)),
+                                                       "test1" );
+
+        assertNotNull( "attachment disappeared", att2 );
+        assertEquals( "name", att.getName(), att2.getName() );
+        assertEquals( "author", "FirstPost", att2.getAuthor() );
+        assertEquals( "size", c_fileContents.length(), att2.getSize() );
+        assertEquals( "version", 1, att2.getVersion() );
+
+        InputStream in = m_manager.getAttachmentStream( att2 );
+
+        assertNotNull( "stream", in );
+
+        StringWriter sout = new StringWriter();
+        FileUtil.copyContents( new InputStreamReader(in), sout );
+
+        in.close();
+        sout.close();
+
+        assertEquals( "contents", c_fileContents, sout.toString() );
+    }
+
+
+    public void testExists() throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAME1, "test1" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        assertTrue( "attachment disappeared", 
+                    m_engine.pageExists( NAME1+"/test1" ) );
+    }
+
+    public void testExists2() throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAME1, "test1.bin" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        assertTrue( "attachment disappeared", 
+                    m_engine.pageExists( att.getName() ) );
+    }
+
+    public void testExistsSpace() throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAME1, "test file.bin" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        assertTrue( "attachment disappeared", 
+                    m_engine.pageExists( NAME1+"/test file.bin" ) );
+    }
+
+    public void testExistsUTF1() throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAME1, "test\u00e4.bin" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        assertTrue( "attachment disappeared", 
+                    m_engine.pageExists( att.getName() ) );
+    }
+
+    public void testExistsUTF2() throws Exception
+    {
+        Attachment att = new Attachment( m_engine, NAMEU, "test\u00e4.bin" );
+
+        att.setAuthor( "FirstPost" );
+
+        m_manager.storeAttachment( att, makeAttachmentFile() );
+
+        assertTrue( "attachment disappeared", 
+                    m_engine.pageExists( att.getName() ) );
+    }
+
+    public static Test suite()
+    {
+        return new TestSuite( AttachmentManagerTest.class );
+    }
+
+
+}

Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/AllTests.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/AllTests.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/AllTests.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/AllTests.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,36 @@
+
+package com.ecyrd.jspwiki.auth;
+
+import com.ecyrd.jspwiki.TextUtil;
+
+import junit.framework.*;
+
+public class AllTests extends TestCase
+{
+    public AllTests( String s )
+    {
+        super( s );
+    }
+
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite("AAA package tests");
+
+        String runTests = System.getProperty( "jspwiki.tests.auth", "false" );
+        
+        if( TextUtil.isPositive(runTests) )
+        {
+            suite.addTest( AuthenticationManagerTest.suite() );
+            suite.addTest( AuthorizationManagerTest.suite() );
+            suite.addTest( GroupManagerTest.suite() );
+            suite.addTest( com.ecyrd.jspwiki.auth.acl.AllTests.suite() );
+            suite.addTest( com.ecyrd.jspwiki.auth.authorize.AllTests.suite() );
+            suite.addTest( com.ecyrd.jspwiki.auth.login.AllTests.suite() );
+            suite.addTest( com.ecyrd.jspwiki.auth.permissions.AllTests.suite() );
+            suite.addTest( com.ecyrd.jspwiki.auth.user.AllTests.suite() );
+            suite.addTestSuite( com.ecyrd.jspwiki.auth.UserManagerTest.class );
+        }
+        
+        return suite;
+    }
+}

Added: incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/AuthenticationManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/AuthenticationManagerTest.java?rev=627271&view=auto
==============================================================================
--- incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/AuthenticationManagerTest.java (added)
+++ incubator/jspwiki/branches/JSPWIKI_STRIPES_BRANCH/tests/com/ecyrd/jspwiki/auth/AuthenticationManagerTest.java Tue Feb 12 22:24:02 2008
@@ -0,0 +1,134 @@
+package com.ecyrd.jspwiki.auth;
+
+import java.security.Principal;
+import java.util.Properties;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import com.ecyrd.jspwiki.TestEngine;
+import com.ecyrd.jspwiki.WikiSession;
+import com.ecyrd.jspwiki.WikiSessionTest;
+import com.ecyrd.jspwiki.auth.authorize.Group;
+import com.ecyrd.jspwiki.auth.authorize.GroupManager;
+import com.ecyrd.jspwiki.auth.authorize.Role;
+
+/**
+ * Tests the AuthorizationManager class.
+ * @author Janne Jalkanen
+ */
+public class AuthenticationManagerTest extends TestCase
+{
+    private AuthenticationManager m_auth;
+
+    private TestEngine            m_engine;
+    
+    private GroupManager          m_groupMgr;
+ 
+    private WikiSession           m_session;
+    
+    public AuthenticationManagerTest( String s )
+    {
+        super( s );
+    }
+
+    public void setUp() throws Exception
+    {
+        Properties props = new Properties();
+        props.load( TestEngine.findTestProperties() );
+        m_engine = new TestEngine( props );
+        m_auth = m_engine.getAuthenticationManager();
+        m_groupMgr = m_engine.getGroupManager();
+        m_session = WikiSessionTest.adminSession( m_engine );
+    }
+    
+    public void testIsUserPrincipal()
+    {
+        assertTrue( AuthenticationManager.isUserPrincipal( new WikiPrincipal( "Foo" ) ) );
+        assertFalse( AuthenticationManager.isUserPrincipal( new GroupPrincipal( "Group1" ) ) );
+        assertFalse( AuthenticationManager.isUserPrincipal( new Role( "Role1" ) ) );
+        assertFalse( AuthenticationManager.isUserPrincipal( Role.ANONYMOUS ) );
+    }
+    
+    public void testLoginCustom() throws Exception
+    {
+        WikiSession session = WikiSessionTest.authenticatedSession( m_engine, Users.JANNE, Users.JANNE_PASS );
+        assertTrue( session.hasPrincipal( Role.ALL ) );
+        assertTrue( session.hasPrincipal( Role.AUTHENTICATED ) );
+        assertTrue( session.hasPrincipal( new WikiPrincipal( Users.JANNE, WikiPrincipal.LOGIN_NAME ) ) );
+        assertTrue( session.hasPrincipal( new WikiPrincipal( "JanneJalkanen", WikiPrincipal.WIKI_NAME ) ) );
+        assertTrue( session.hasPrincipal( new WikiPrincipal( "Janne Jalkanen",  WikiPrincipal.FULL_NAME ) ) );
+    }
+    
+    public void testLoginCustomWithGroup() throws Exception
+    {
+        // Flush any pre-existing groups (left over from previous failures, perhaps)
+        try
+        {
+            m_groupMgr.removeGroup( "Test1" );
+            m_groupMgr.removeGroup( "Test2" );
+        }
+        catch ( NoSuchPrincipalException e )
+        {
+            
+        }
+        
+        // Log in 'janne' and verify there are 5 principals in the subject
+        // (ALL, AUTHENTICATED, login, fullname, wikiname Principals)
+        WikiSession session = WikiSession.guestSession( m_engine );
+        m_auth.login( session, Users.JANNE, Users.JANNE_PASS );
+        assertEquals( 3, session.getPrincipals().length );
+        assertEquals( 2, session.getRoles().length );
+        assertTrue( session.hasPrincipal( new WikiPrincipal( "JanneJalkanen",  WikiPrincipal.WIKI_NAME ) ) );
+        
+        // Listen for any manager group-add events
+        GroupManager manager = m_engine.getGroupManager();
+        SecurityEventTrap trap = new SecurityEventTrap();
+        manager.addWikiEventListener( trap );
+
+        // Create two groups; one with Janne in it, and one without
+        Group groupTest1 = m_groupMgr.parseGroup( "Test1", "JanneJalkanen \n Bob \n Charlie", true );
+        m_groupMgr.setGroup( m_session, groupTest1 );
+        groupTest1 = m_groupMgr.getGroup( "Test1" );
+        Principal principalTest1 = groupTest1.getPrincipal();
+        
+        Group groupTest2 = m_groupMgr.parseGroup( "Test2", "Alice \n Bob \n Charlie", true );
+        m_groupMgr.setGroup( m_session, groupTest2 );
+        groupTest2 = m_groupMgr.getGroup( "Test2" );
+        Principal principalTest2 = groupTest2.getPrincipal();
+        
+        // We should see two security events (one for each group create)
+        // We should also see a GroupPrincipal for group Test1, but not Test2
+        assertEquals( 2, trap.events().length );
+        assertTrue( session.hasPrincipal( principalTest1 ) );
+        assertFalse( session.hasPrincipal( principalTest2 ) );
+        
+        // If we remove Test1, the GroupPrincipal should disappear
+        m_groupMgr.removeGroup( "Test1" );
+        assertFalse( session.hasPrincipal( principalTest1 ) );
+        assertFalse( session.hasPrincipal( principalTest2 ) );
+        
+        // Now, add 'JanneJalkanen' to Test2 group manually; we should see the GroupPrincipal
+        groupTest2.add( new WikiPrincipal( "JanneJalkanen" ) );
+        m_groupMgr.setGroup( session, groupTest2 );
+        assertFalse( session.hasPrincipal( principalTest1 ) );
+        assertTrue( session.hasPrincipal( principalTest2 ) );
+        
+        // Remove 'JanneJalkenen' manually; the GroupPrincipal should disappear
+        groupTest2.remove( new WikiPrincipal( "JanneJalkanen" ) );
+        m_groupMgr.setGroup( session, groupTest2 );
+        assertFalse( session.hasPrincipal( principalTest1 ) );
+        assertFalse( session.hasPrincipal( principalTest2 ) );
+        
+        // Clean up
+        m_groupMgr.removeGroup( "Test2" );
+    }
+    
+    public static Test suite()
+    {
+        TestSuite suite = new TestSuite("Authentication Manager test");
+        suite.addTestSuite( AuthenticationManagerTest.class );
+        return suite;
+    }
+}
\ No newline at end of file