/*
 * Created on 14-Feb-2005
 */
package org.bodington.server.realm;

import java.security.acl.NotOwnerException;
import java.util.Enumeration;

import org.bodington.server.BuildingContext;
import org.bodington.server.BuildingServerException;
import org.bodington.server.BuildingServerTest;
import org.bodington.server.resources.Resource;

/**
 * @author buckett
 */
public class GroupTest extends BuildingServerTest
{
    private Group group;
    
   public void setUp() throws Exception{
       super.setUp();
       group = new Group();
       group.setDescription("Test");
       group.setName("test");
       group.setResourceId(resource.getPrimaryKey());
       group.save();
   }
   
    public void testMembersEmpty() throws BuildingServerException
    {
        Enumeration members = group.members();
        assertFalse(members.hasMoreElements());
        
    }
    
      public void testMembersOne() throws BuildingServerException 
      {
        group.addMember(user);
        group.save();
        
        Enumeration members = group.members();
        User member = (User)members.nextElement();
        assertTrue(member != null);
        assertFalse(members.hasMoreElements());
    }
      
      public void testMembersTwo() throws BuildingServerException
      {
          User other = new User();
          other.setInitials("O");
          other.setSurname("Test");
          other.setName("O");
          other.setZone(zone);
          other.save();
          
          group.addMember(user);
          group.addMember(other);
          group.save();
          
          Enumeration members = group.members();
          members.nextElement();
          members.nextElement();
          assertFalse(members.hasMoreElements());
      }
      
      public void testMembersSpecial() throws BuildingServerException
      {
          group.setSpecialGroup(new Integer(1));
          group.save();
          
          user.addToGroup(group);
          user.save();
          
          Enumeration members = group.members();
          assertTrue(members.hasMoreElements());
          members.nextElement();
          assertFalse(members.hasMoreElements());
          
      }
      
      public void testMembersChecked() throws BuildingServerException, NotOwnerException
      {
          Enumeration members;
          
          members = group.membersChecked();
          assertNull(members);

          AclEntry aclEntry;
          BuildingContext.getContext().setUser(user);
          Resource resource = new Resource("name", "title", "description", "introduction");
          Acl acl = new Acl(user, resource);
          acl.save();

          members = resource.getAcl().getOwnerGroup().membersChecked();
          assertNotNull(members);
          assertEquals(user, members.nextElement());
          
          
      }
      
      public void testRemoveEmpty() throws BuildingServerException
      {
          group.remove();
      }
      
      public void testRemoveOneMember() throws BuildingServerException
      {
          group.addMember(user);
          group.save();
          
          group.remove();
      }

      public void testMembersIsMember() throws BuildingServerException
      {
          assertFalse(group.isMember(user));
          assertTrue (group.isMember(group));
          
          Group group2 = new Group();
          group2.setDescription("Test");
          group2.setName("test");
          group2.setResourceId(resource.getPrimaryKey());
          group2.save();
          
          assertFalse(group.isMember(group2));
          
          group.addMember(user);
          group.save();
          assertTrue(group.isMember(user));
      }
}
