/*
This file is part of OpenMyEWB.
OpenMyEWB is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenMyEWB is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenMyEWB. If not, see <http://www.gnu.org/licenses/>.
OpenMyEWB is Copyright 2005-2009 Nicolas Kruchten (nicolas@kruchten.com), Francis Kung, Engineers Without Borders Canada, Michael Trauttmansdorff, Jon Fishbein, David Kadish
*/
package ca.myewb.tests;
import java.util.List;
import junit.framework.TestCase;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import ca.myewb.frame.Helpers;
import ca.myewb.frame.HibernateUtil;
import ca.myewb.model.GroupChapterModel;
import ca.myewb.model.GroupModel;
import ca.myewb.model.PageModel;
import ca.myewb.model.PostModel;
import ca.myewb.model.UserModel;
public class GroupTest extends TestCase
{
Session session;
Transaction tx;
public void setUp()
{
try
{
// Register DB
Class.forName("com.mysql.jdbc.Driver");
// Start a Hibernate session
HibernateUtil.createFactory("test");
session = HibernateUtil.currentSession();
tx = session.beginTransaction();
}
catch (Exception e)
{
System.err.println("Exception " + e);
e.printStackTrace();
}
}
public void tearDown()
{
try
{
tx.commit();
HibernateUtil.closeSession();
}
catch (Exception e)
{
System.err.println("Excpetion: " + e);
e.printStackTrace();
}
}
// Test general getters/setters
public void testGeneral()
{
try
{
GroupModel grp = GroupModel.newGroup();
Integer i = grp.getId();
grp.setName("Francis");
grp.setDescription("Testing time");
// New object to make sure info was written to database
GroupModel grp2 = (GroupModel)session.load(GroupModel.class, i);
assertEquals("The group name should be the one we set", "Francis", grp2.getName());
assertEquals("The group description should be the one we set", "Testing time", grp2.getDescription());
}
catch (HibernateException e)
{
System.err.println("Exception caught: " + e.getMessage());
e.printStackTrace();
fail("Unexpected Exception");
}
catch (Exception e)
{
e.printStackTrace();
fail("Unexpected Exception");
}
}
public void testPosts()
{
try
{
UserModel u = UserModel.newAssociateSignUp("a@b.com", "Test", "User", "123456");
GroupModel grp = GroupModel.newGroup();
Integer i = grp.getId();
// Try adding a post
PostModel p1 = PostModel.newPost(u, grp, "", "", "", "");
GroupModel grp2 = (GroupModel)session.load(GroupModel.class, i);
assertEquals(1, grp2.getPosts().size());
assertEquals(p1, grp2.getPosts().iterator().next());
// And a second one
PostModel p2 = PostModel.newPost(u, grp, "", "", "", "");
GroupModel grp3 = (GroupModel)session.load(GroupModel.class, i);
assertEquals(2, grp3.getPosts().size());
assertTrue(grp3.getPosts().contains(p1));
assertTrue(grp3.getPosts().contains(p2));
// No need to remove posts
}
catch (HibernateException e)
{
System.err.println("Exception caught: " + e.getMessage()
+ e.getStackTrace());
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void testPages()
{
try
{
GroupModel grp = GroupModel.newGroup();
Integer i = grp.getId();
// Add a page
PageModel pg = PageModel.newPage();
grp.addPage(pg);
GroupModel grp2 = (GroupModel)session.load(GroupModel.class, i);
assertTrue(grp2.getPages().contains(pg));
assertEquals(1, grp2.getPages().size());
assertTrue(pg.getGroups().contains(grp2));
// Try a second one
PageModel pg2 = PageModel.newPage();
grp.addPage(pg2);
session.flush();
GroupModel grp3 = (GroupModel)session.load(GroupModel.class, i);
assertTrue(grp3.getPages().contains(pg2));
assertEquals(2, grp3.getPages().size());
// And a third
PageModel pg3 = PageModel.newPage();
grp.addPage(pg3);
session.flush();
GroupModel grp4 = (GroupModel)session.load(GroupModel.class, i);
assertTrue(grp4.getPages().contains(pg3));
assertEquals(3, grp4.getPages().size());
}
catch (HibernateException e)
{
System.err.println("Exception caught: " + e.getMessage());
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void testChapterStuff()
{
try
{
GroupChapterModel chapter = GroupChapterModel.newChapter();
GroupModel exec = chapter.getExec();
int chapterid = (Integer)session.save(chapter);
assertTrue(chapter.isChapter());
assertFalse(chapter.isExecList());
assertFalse(exec.isChapter());
assertTrue(exec.isExecList());
GroupModel childGroup = GroupModel.newGroup(chapter);
GroupModel nonChildGroup = GroupModel.newGroup();
List<GroupModel> children = chapter.getChildGroups(true, true);
assertTrue(children.contains(childGroup));
assertTrue(children.contains(exec));
assertFalse(children.contains(nonChildGroup));
GroupModel test = (GroupModel)session.load(GroupModel.class, chapterid);
assertTrue(test.isChapter());
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void testSaveGroup()
{
try
{
GroupModel grp = GroupModel.newGroup();
int id = grp.getId();
grp.save("Test Group", "tg", "A test group", false);
GroupModel test = (GroupModel)session.load(GroupModel.class, id);
assertEquals("The group name should be what we set", "Test Group", test.getName());
assertEquals("The group short name should be what we set", "tg", test.getShortname());
assertEquals("The group description should be what we set", "A test group", test.getDescription());
assertFalse("The group name should be private, as set", test.getPublic());
assertFalse("The group should not be an admin group", test.getAdmin());
assertEquals("The group post name should be set up properly", "Anyone on the [" + Helpers.getEnShortName() + "-tg] list", test.getPostName());
} catch (Exception e)
{
e.printStackTrace();
fail("Unexpected Exception Thrown");
}
}
public void testDelete()
{
try
{
UserModel u = UserModel.newAssociateSignUp("a@b.com", "Test", "User", "123456");
GroupModel grp = GroupModel.newGroup();
u.addGroup(grp, 'r');
assertTrue("User should be added to the group", u.getGroups().contains(grp));
grp.delete();
assertFalse("Deleted groups should be invisible", grp.getVisible());
assertFalse("User should have been removed from group when the group was deleted", u.getGroups().contains(grp));
} catch (Exception e)
{
e.printStackTrace();
fail("Unexpected exception thrown");
}
}
public void testNewGroup()
{
try
{
// Non parent version
GroupModel g = GroupModel.newGroup();
assertNotNull("Group should exist", g);
assertNull("Group should have no parent", g.getParent());
//parent version
GroupChapterModel chapter = GroupChapterModel.newChapter();
g = GroupModel.newGroup(chapter);
assertNotNull("Group should exist", g);
assertEquals("Group's parent should be set to the chapter", chapter, g.getParent());
assertTrue("Group should be a child of the chapter", chapter.getChildGroups(true, true).contains(g));
} catch (Exception e)
{
e.printStackTrace();
fail("Unexpected exception thrown");
}
}
public void testWeirdCGLibError()
{
try
{
GroupChapterModel chapter = GroupChapterModel.newChapter();
GroupModel exec = chapter.getExec();
List result = session.createQuery("SELECT g FROM GroupModel g WHERE g.exec=?")
.setEntity(0, exec).list();
assertFalse(result.isEmpty());
UserModel u = UserModel.newAssociateSignUp(null, "a@b.com", "Test", "User", "123456");
u.joinChapter(chapter);
GroupModel chapgroup = (GroupModel)session.get(GroupModel.class, chapter.getId());
result = session.createQuery("SELECT r FROM RoleModel r WHERE r.group=? AND r.user=? AND r.end IS NULL AND r.level=?")
.setEntity(0, chapgroup).setEntity(1, u)
.setCharacter(2, 'm').list();
assertFalse(result.isEmpty());
result = session.createQuery("SELECT r FROM RoleModel r WHERE r.group=? AND r.user=? AND r.end IS NULL AND r.level=?")
.setEntity(0, chapgroup).setEntity(1, u)
.setCharacter(2, 'l').list();
assertTrue(result.isEmpty());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}