/*
* Copyright (C) 2012 maartenl
*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package mmud.testing.tests;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import mmud.database.entities.characters.Person;
import mmud.database.entities.characters.User;
import mmud.database.entities.game.Admin;
import mmud.database.entities.game.Area;
import mmud.database.entities.game.Mail;
import mmud.database.entities.game.Room;
import mmud.database.entities.items.Item;
import mmud.database.entities.items.ItemDefinition;
import mmud.database.entities.web.CharacterInfo;
import mmud.database.entities.web.Family;
import mmud.database.entities.web.FamilyPK;
import mmud.database.entities.web.FamilyValue;
import mmud.exceptions.ErrorDetails;
import mmud.exceptions.MudException;
import mmud.exceptions.MudWebException;
import mmud.rest.services.MailBean;
import mmud.rest.services.PrivateBean;
import mmud.rest.webentities.PrivateMail;
import mmud.rest.webentities.PrivatePerson;
import mmud.testing.TestingConstants;
import mmud.testing.TestingUtils;
import mockit.Deencapsulation;
import mockit.Delegate;
import mockit.Expectations;
import mockit.Mocked;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.fail;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
*
* @author maartenl
*/
public class PrivateBeanTest
{
// Obtain a suitable logger.
private static final Logger logger = Logger.getLogger(PrivateBeanTest.class.getName());
@Mocked
EntityManager entityManager;
@Mocked(
{
"ok", "status"
})
javax.ws.rs.core.Response response;
@Mocked
MudWebException webApplicationException;
@Mocked
ErrorDetails errorDetails;
@Mocked
ResponseBuilder responseBuilder;
@Mocked
Query query;
private Person hotblack;
private Person marvin;
public PrivateBeanTest()
{
}
@BeforeClass
public void setUpClass()
{
}
@AfterClass
public void tearDownClass()
{
}
@BeforeMethod
public void setUp() throws MudException
{
Area aArea = TestingConstants.getArea();
Room aRoom = TestingConstants.getRoom(aArea);
hotblack = TestingConstants.getHotblack(aRoom);
marvin = TestingConstants.getMarvin(aRoom);
}
@AfterMethod
public void tearDown()
{
}
private void compare(PrivateMail actual, PrivateMail expected)
{
if (TestingUtils.compareBase(actual, expected))
{
return;
}
assertEquals(actual.body, expected.body, "body:");
assertEquals(actual.deleted, expected.deleted, "deleted");
assertEquals(actual.haveread, expected.haveread, "haveread");
assertEquals(actual.id, expected.id, "id");
assertEquals(actual.item_id, expected.item_id, "item_id");
assertEquals(actual.name, expected.name, "name");
assertEquals(actual.newmail, expected.newmail, "newmail");
assertEquals(actual.subject, expected.subject, "subject");
assertEquals(actual.toname, expected.toname, "toname");
assertEquals(actual.whensent, expected.whensent, "whensent");
}
/**
* Person not found, cannot authenticate. WebApplicationException expected.
*/
@Test
public void listMailAuthenticate2()
{
logger.fine("listMailAuthenticate2");
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = null;
}
};
// Unit under test is exercised.
try
{
List<PrivateMail> result = privateBean.listMail("Marvin", null);
fail("We are supposed to get an exception here.");
} catch (WebApplicationException result)
{
// Yay! We get an exception!
}
}
@Test
public void listMailEmpty()
{
logger.fine("listMailEmpty");
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.createNamedQuery("Mail.listmail");
result = query;
query.setParameter("name", marvin);
query.setMaxResults(20);
query.getResultList();
entityManager.createNamedQuery("Mail.nonewmail");
result = query;
query.setParameter("name", marvin);
query.executeUpdate();
}
};
// Unit under test is exercised.
List<PrivateMail> result = privateBean.listMail("Marvin", null);
// Verification code (JUnit/TestNG asserts), if any.
assertEquals(result.size(), 0);
}
@Test
public void listMail()
{
logger.fine("listMail");
Date secondDate = new Date();
Date firstDate = new Date(secondDate.getTime() - 1_000_000);
final List<Mail> list = new ArrayList<>();
Mail mail = new Mail();
mail.setId(1l);
mail.setSubject("Subject");
mail.setBody("First mail");
mail.setToname(hotblack);
mail.setName(marvin);
mail.setDeleted(false);
mail.setHaveread(false);
mail.setNewmail(true);
mail.setWhensent(firstDate);
list.add(mail);
mail = new Mail();
mail.setId(2l);
mail.setSubject("Subject2");
mail.setBody("Second mail");
mail.setToname(hotblack);
mail.setName(marvin);
mail.setDeleted(false);
mail.setHaveread(true);
mail.setNewmail(false);
mail.setWhensent(secondDate);
list.add(mail);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.createNamedQuery("Mail.listmail");
result = query;
query.setParameter("name", marvin);
query.setMaxResults(20);
query.getResultList();
result = list;
entityManager.createNamedQuery("Mail.nonewmail");
result = query;
query.setParameter("name", marvin);
query.executeUpdate();
result = 1;
}
};
// Unit under test is exercised.
List<PrivateMail> result = privateBean.listMail("Marvin", null);
// Verification code (JUnit/TestNG asserts), if any.
assertEquals(result.size(), 2);
PrivateMail expected = new PrivateMail();
expected.body = "First mail";
expected.subject = "Subject";
expected.haveread = false;
expected.id = 1l;
expected.item_id = null;
expected.name = "Marvin";
expected.newmail = true;
expected.toname = "Hotblack";
expected.whensent = firstDate;
expected.deleted = false;
compare(result.get(0), expected);
expected = new PrivateMail();
expected.body = "Second mail";
expected.subject = "Subject2";
expected.haveread = true;
expected.id = 2l;
expected.item_id = null;
expected.name = "Marvin";
expected.newmail = false;
expected.toname = "Hotblack";
expected.whensent = secondDate;
expected.deleted = false;
compare(result.get(1), expected);
}
@Test
public void hasNewMail()
{
logger.fine("hasNewMail");
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
Deencapsulation.setField(privateBean, "mailBean", new MailBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
});
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.createNamedQuery("Mail.hasnewmail");
result = query;
query.setParameter("name", marvin);
query.getSingleResult();
result = 1l;
}
};
responseOkExpectations();
// Unit under test is exercised.
privateBean.hasNewMail("Marvin");
// Verification code (JUnit/TestNG asserts), if any.
}
//TODO : fix this
// @Test
public void hasNoNewMail()
{
logger.fine("hasNoNewMail");
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
Deencapsulation.setField(privateBean, "mailBean", new MailBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
});
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.createNamedQuery("Mail.hasnewmail");
result = query;
query.setParameter("name", marvin);
query.getSingleResult();
result = 0l;
}
};
// Unit under test is exercised.
privateBean.hasNewMail("Marvin");
// Verification code (JUnit/TestNG asserts), if any.
}
@Test
public void newMail()
{
logger.fine("newMail");
PrivateMail privateMail = new PrivateMail();
privateMail.body = "First mail";
privateMail.subject = "Subject";
privateMail.toname = "Hotblack";
// all other props are ignored by the method under test
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(User.class, "Hotblack");
result = hotblack;
entityManager.persist((Mail) any);
result = new Delegate()
{
// The name of this method can actually be anything.
void persist(Mail mail)
{
assertNotNull(mail);
assertEquals(mail.getBody(), "First mail");
assertEquals(mail.getSubject(), "Subject");
assertEquals(mail.getHaveread(), Boolean.FALSE);
assertEquals(mail.getId(), null);
assertEquals(mail.getItemDefinition(), null);
assertEquals(mail.getName(), marvin);
assertEquals(mail.getNewmail(), Boolean.TRUE);
assertEquals(mail.getToname(), hotblack);
// unable to assertEquals getWhensent. As it is using the current date/time.
assertEquals(mail.getDeleted(), Boolean.FALSE);
}
};
}
};
responseOkExpectations();
// Unit under test is exercised.
Response result = privateBean.newMail(privateMail, "Marvin");
// Verification code (JUnit/TestNG asserts), if any.
}
@Test
public void newMailToUnknownUser()
{
logger.fine("newMailToUnknownUser");
PrivateMail privateMail = new PrivateMail();
privateMail.body = "First mail";
privateMail.subject = "Subject";
privateMail.toname = "Unknown";
// all other props are ignored by the method under test
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(User.class, "Unknown");
result = null;
}
};
// Unit under test is exercised.
try
{
Response result = privateBean.newMail(privateMail, "Marvin");
fail("Exception expected");
} catch (WebApplicationException result)
{
// Yay! We get an exception!
}
// Verification code (JUnit/TestNG asserts), if any.
}
@Test
public void getMailDoesnotExist()
{
logger.fine("getMailDoesnotExist");
// all other props are ignored by the method under test
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = null;
}
};
// Unit under test is exercised.
try
{
PrivateMail actual = privateBean.getMailInfo("Marvin", 1l);
fail("Exception expected");
} catch (WebApplicationException result)
{
// Yay! We get an exception!
}
// Verification code (JUnit/TestNG asserts), if any.
}
@Test
public void getMailSomeoneElse()
{
logger.fine("getMailSomeoneElse");
final Mail mail = new Mail();
mail.setToname(hotblack);
mail.setName(hotblack);
mail.setBody("First mail");
mail.setSubject("Subject");
mail.setDeleted(Boolean.TRUE);
mail.setHaveread(Boolean.TRUE);
// all other props are ignored by the method under test
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = mail;
}
};
// Unit under test is exercised.
try
{
PrivateMail actual = privateBean.getMailInfo("Marvin", 1l);
fail("Exception expected");
} catch (WebApplicationException result)
{
// Yay! We get an exception!
}
// Verification code (JUnit/TestNG asserts), if any.
}
@Test
public void getMailDeleted()
{
logger.fine("getMailDeleted");
final Mail mail = new Mail();
mail.setToname(marvin);
mail.setName(hotblack);
mail.setBody("First mail");
mail.setSubject("Subject");
mail.setDeleted(Boolean.TRUE);
mail.setHaveread(Boolean.TRUE);
// all other props are ignored by the method under test
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = mail;
}
};
// Unit under test is exercised.
try
{
PrivateMail actual = privateBean.getMailInfo("Marvin", 1l);
fail("Exception expected");
} catch (WebApplicationException result)
{
// Yay! We get an exception!
}
// Verification code (JUnit/TestNG asserts), if any.
}
@Test
public void getMail()
{
logger.fine("getMail");
final Mail mail = new Mail();
mail.setToname(marvin);
mail.setName(hotblack);
mail.setBody("First mail");
mail.setSubject("Subject");
mail.setDeleted(Boolean.FALSE);
mail.setHaveread(Boolean.FALSE);
// all other props are ignored by the method under test
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = mail;
}
};
// Unit under test is exercised.
PrivateMail actual = privateBean.getMailInfo("Marvin", 1l);
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(actual);
PrivateMail expected = new PrivateMail();
expected.body = "First mail";
expected.subject = "Subject";
expected.toname = "Marvin";
expected.name = "Hotblack";
expected.deleted = false;
expected.haveread = true;
compare(actual, expected);
}
// TODO : Fix this!
//@Test
public void createMailItem()
{
logger.fine("createMailItem");
final Admin admin = TestingConstants.getAdmin();
final ItemDefinition itemDef = new ItemDefinition();
itemDef.setId(8009);
itemDef.setReaddescription("this is letterhead.</p><p>letterbody</p><p>letterfoot</p>");
itemDef.setName("paper");
itemDef.setAdject1("small");
itemDef.setAdject2("piece");
itemDef.setAdject3("of");
itemDef.setGetable(true);
itemDef.setDropable(true);
itemDef.setVisible(true);
itemDef.setCopper(1);
itemDef.setOwner(admin);
itemDef.setNotes("Some notes");
final Mail mail = new Mail();
mail.setToname(marvin);
mail.setName(hotblack);
mail.setBody("First mail");
mail.setSubject("Subject");
mail.setDeleted(Boolean.FALSE);
mail.setHaveread(Boolean.FALSE);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = mail;
entityManager.find(ItemDefinition.class, 8009);
result = itemDef;
entityManager.createNamedQuery("ItemDefinition.maxid");
result = query;
query.getSingleResult();
result = Integer.valueOf(5);
entityManager.persist((ItemDefinition) any);
result = new Delegate()
{
// The name of this method can actually be anything.
void persist(ItemDefinition newItemDef)
{
assertNotNull(newItemDef);
assertEquals(newItemDef.getId(), Integer.valueOf(6));
assertEquals(newItemDef.getShortDescription(), itemDef.getShortDescription());
assertEquals(newItemDef.getReaddescription(), "this is <div id=\"karchan_letterhead\">Subject</div>.</p><p><div id=\"karchan_letterbody\">First mail</div></p><p>letterfoot</p>");
assertEquals(newItemDef.getName(), itemDef.getName());
assertEquals(newItemDef.getAdject1(), itemDef.getAdject1());
assertEquals(newItemDef.getAdject2(), itemDef.getAdject2());
assertEquals(newItemDef.getAdject3(), itemDef.getAdject3());
assertEquals(newItemDef.getGetable(), itemDef.getGetable());
assertEquals(newItemDef.getDropable(), itemDef.getDropable());
assertEquals(newItemDef.getVisible(), itemDef.getVisible());
assertEquals(newItemDef.getCopper(), itemDef.getCopper());
assertEquals(newItemDef.getOwner(), itemDef.getOwner());
assertEquals(newItemDef.getNotes(), itemDef.getNotes());
}
};
entityManager.find(Admin.class, Admin.DEFAULT_OWNER);
result = TestingConstants.getAdmin();
entityManager.persist((Item) any);
result = new Delegate()
{
// The name of this method can actually be anything.
void persist(Item item)
{
assertNotNull(item);
// assertEquals(item.getCreation(), new Date());
assertNull(item.getId());
assertEquals(item.getItemDefinition().getId(), Integer.valueOf(6));
assertEquals(item.getOwner(), admin);
}
};
}
};
// Unit under test is exercised.
Response response = privateBean.createMailItem("Marvin", 1l, 1);
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(response);
assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
}
// TODO : Fix this!
//@Test
public void createSecondMailItem() throws MudException
{
logger.fine("createSecondMailItem");
final Admin admin = TestingConstants.getAdmin();
final ItemDefinition itemDef = new ItemDefinition();
itemDef.setId(12);
itemDef.setReaddescription("Dear people,</p><p>Blahblah</p><p>Regards, Karn.</p>");
itemDef.setName("paper");
itemDef.setAdject1("small");
itemDef.setAdject2("piece");
itemDef.setAdject3("of");
itemDef.setGetable(true);
itemDef.setDropable(true);
itemDef.setVisible(true);
itemDef.setCopper(1);
itemDef.setOwner(admin);
itemDef.setNotes("Some notes");
final Mail mail = new Mail();
mail.setToname(marvin);
mail.setName(hotblack);
mail.setBody("First mail");
mail.setSubject("Subject");
mail.setDeleted(Boolean.FALSE);
mail.setHaveread(Boolean.FALSE);
mail.setItemDefinition(itemDef);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = mail;
entityManager.find(Admin.class, Admin.DEFAULT_OWNER);
result = TestingConstants.getAdmin();
entityManager.persist((Item) any);
result = new Delegate()
{
// The name of this method can actually be anything.
void persist(Item item)
{
assertNotNull(item);
// assertEquals(item.getCreation(), new Date());
assertNull(item.getId());
assertEquals(item.getItemDefinition().getId(), Integer.valueOf(12));
assertEquals(item.getOwner(), admin);
}
};
}
};
// Unit under test is exercised.
Response response = privateBean.createMailItem("Marvin", 1l, 1);
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(response);
assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
}
// TODO : Fix this!
//@Test
public void createMailItemError1() throws MudException
{
logger.fine("createMailItemError1");
final Mail mail = new Mail();
mail.setToname(marvin);
mail.setName(hotblack);
mail.setBody("First mail");
mail.setSubject("Subject");
mail.setDeleted(Boolean.FALSE);
mail.setHaveread(Boolean.FALSE);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = mail;
}
};
try
{
// Unit under test is exercised.
Response response = privateBean.createMailItem("Marvin", 1l, -1);
fail("Exception expected");
} catch (WebApplicationException result)
{
assertEquals(result.getResponse().getStatus(), Response.Status.BAD_REQUEST.getStatusCode());
}
// Verification code (JUnit/TestNG asserts), if any.
}
// TODO : Fix this!
//@Test
public void createMailItemError2() throws MudException
{
logger.fine("createMailItemError1");
final Mail mail = new Mail();
mail.setToname(marvin);
mail.setName(hotblack);
mail.setBody("First mail");
mail.setSubject("Subject");
mail.setDeleted(Boolean.FALSE);
mail.setHaveread(Boolean.FALSE);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = mail;
}
};
try
{
// Unit under test is exercised.
Response response = privateBean.createMailItem("Marvin", 1l, 8);
fail("Exception expected");
} catch (WebApplicationException result)
{
assertEquals(result.getResponse().getStatus(), Response.Status.BAD_REQUEST.getStatusCode());
}
// Verification code (JUnit/TestNG asserts), if any.
}
@Test
public void deleteMail() throws MudException
{
logger.fine("deleteMail");
final Mail mail = new Mail();
mail.setId(1l);
mail.setToname(marvin);
mail.setName(hotblack);
mail.setBody("First mail");
mail.setSubject("Subject");
mail.setDeleted(Boolean.FALSE);
mail.setHaveread(Boolean.FALSE);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = mail;
}
};
responseOkExpectations();
// Unit under test is exercised.
Response response = privateBean.deleteMail("Marvin", 1l);
// Verification code (JUnit/TestNG asserts), if any.
assertEquals(mail.getDeleted(), Boolean.TRUE);
}
@Test
public void deleteMailNotYours() throws MudException
{
logger.fine("deleteMail");
final Mail mail = new Mail();
mail.setId(1l);
mail.setToname(hotblack);
mail.setName(marvin);
mail.setBody("First mail");
mail.setSubject("Subject");
mail.setDeleted(Boolean.FALSE);
mail.setHaveread(Boolean.FALSE);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = mail;
}
};
// Unit under test is exercised.
try
{
privateBean.deleteMail("Marvin", 1l);
fail("Exception expected");
} catch (WebApplicationException result)
{
// Yay! We get an exception!
}// Verification code (JUnit/TestNG asserts), if any.
assertEquals(mail.getDeleted(), Boolean.FALSE);
}
@Test
public void deleteMailNotFound() throws MudException
{
logger.fine("deleteMail");
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Mail.class, 1l);
result = null;
}
};
try
{
// Unit under test is exercised.
Response response = privateBean.deleteMail("Marvin", 1l);
// Verification code (JUnit/TestNG asserts), if any.
fail("Exception expected");
} catch (WebApplicationException result)
{
// Yay! We get an exception!
}
}
@Test
public void updateCharacterSheet() throws MudException
{
logger.fine("updateCharacterSheet");
final CharacterInfo cinfo = new CharacterInfo();
cinfo.setName("Marvin");
cinfo.setImageurl("http://www.images.com/image.jpg");
cinfo.setHomepageurl("http://www.homepages.com");
cinfo.setDateofbirth("none");
cinfo.setCityofbirth("none");
cinfo.setStoryline("none");
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(CharacterInfo.class, "Marvin");
result = cinfo;
}
};
responseOkExpectations();
// Unit under test is exercised.
final PrivatePerson person = new PrivatePerson();
person.name = "Marvin";
person.imageurl = "http://www.images.com/newimage.jpg";
person.homepageurl = "http://www.homepages.com/homepage.html";
person.dateofbirth = "Beginning of time";
person.cityofbirth = "Sirius";
person.storyline = "Life, don't talk to me about life.";
Response response = privateBean.updateCharacterSheet("Marvin", person);
// Verification code (JUnit/TestNG asserts), if any.
assertEquals(cinfo.getName(), person.name);
assertEquals(cinfo.getImageurl(), person.imageurl);
assertEquals(cinfo.getHomepageurl(), person.homepageurl);
assertEquals(cinfo.getDateofbirth(), person.dateofbirth);
assertEquals(cinfo.getCityofbirth(), person.cityofbirth);
assertEquals(cinfo.getStoryline(), person.storyline);
}
@Test
public void newCharacterSheet() throws MudException
{
logger.fine("newCharacterSheet");
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(CharacterInfo.class, "Marvin");
result = null;
entityManager.persist((CharacterInfo) any);
result = new Delegate()
{
// The name of this method can actually be anything.
void persist(CharacterInfo cinfo)
{
assertNotNull(cinfo);
assertEquals(cinfo.getName(), "Marvin");
assertEquals(cinfo.getImageurl(), "http://www.images.com/newimage.jpg");
assertEquals(cinfo.getHomepageurl(), "http://www.homepages.com/homepage.html");
assertEquals(cinfo.getDateofbirth(), "Beginning of time");
assertEquals(cinfo.getCityofbirth(), "Sirius");
assertEquals(cinfo.getStoryline(), "Life, don't talk to me about life.");
}
};
}
};
responseOkExpectations();
// Unit under test is exercised.
final PrivatePerson person = new PrivatePerson();
person.name = "Marvin";
person.imageurl = "http://www.images.com/newimage.jpg";
person.homepageurl = "http://www.homepages.com/homepage.html";
person.dateofbirth = "Beginning of time";
person.cityofbirth = "Sirius";
person.storyline = "Life, don't talk to me about life.";
privateBean.updateCharacterSheet("Marvin", person);
// Verification code (JUnit/TestNG asserts), if any.
}
@Test
public void updateCharacterSheetScriptInjection() throws MudException
{
logger.fine("updateCharacterSheetScriptInjection");
final CharacterInfo cinfo = new CharacterInfo();
cinfo.setName("Marvin");
cinfo.setImageurl("http://www.images.com/image.jpg");
cinfo.setHomepageurl("http://www.homepages.com");
cinfo.setDateofbirth("none");
cinfo.setCityofbirth("none");
cinfo.setStoryline("none");
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(CharacterInfo.class, "Marvin");
result = cinfo;
}
};
responseOkExpectations(); // Unit under test is exercised.
final PrivatePerson person = new PrivatePerson();
person.name = "Marvin";
person.imageurl = "http://www.images.com/newimage.jpg";
person.homepageurl = "http://www.homepages.com/homepage.html";
person.dateofbirth = "Beginning of time";
person.cityofbirth = "Sirius";
person.storyline = "Life, don't talk to me about <script>alert('woaj');</script>life.";
Response response = privateBean.updateCharacterSheet("Marvin", person);
// Verification code (JUnit/TestNG asserts), if any.
assertEquals(cinfo.getName(), person.name);
assertEquals(cinfo.getImageurl(), person.imageurl);
assertEquals(cinfo.getHomepageurl(), person.homepageurl);
assertEquals(cinfo.getDateofbirth(), person.dateofbirth);
assertEquals(cinfo.getCityofbirth(), person.cityofbirth);
assertEquals(cinfo.getStoryline(), "Life, don't talk to me about life.");
}
@Test
public void updateCharacterSheetOfSomebodyElse() throws MudException
{
logger.fine("updateCharacterSheetOfSomebodyElse");
final CharacterInfo cinfo = new CharacterInfo();
cinfo.setName("Marvin");
cinfo.setImageurl("http://www.images.com/image.jpg");
cinfo.setHomepageurl("http://www.homepages.com");
cinfo.setDateofbirth("none");
cinfo.setCityofbirth("none");
cinfo.setStoryline("none");
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
}
};
// Unit under test is exercised.
final PrivatePerson person = new PrivatePerson();
person.name = "Hotblack";
person.imageurl = "http://www.images.com/newimage.jpg";
person.homepageurl = "http://www.homepages.com/homepage.html";
person.dateofbirth = "Beginning of time";
person.cityofbirth = "Sirius";
person.storyline = "Life, don't talk to me about <script>alert('woaj');</script>life.";
try
{
Response response = privateBean.updateCharacterSheet("Marvin", person);
fail("We are supposed to get an exception here.");
} catch (WebApplicationException result)
{
// Yay! We get an exception!
}
}
@Test
public void updateFamilyvalues() throws MudException
{
logger.fine("updateFamilyvalues");
final FamilyValue value = new FamilyValue();
value.setDescription("friend");
value.setId(1);
final FamilyValue value2 = new FamilyValue();
value2.setDescription("bff");
value2.setId(2);
final Family family = new Family();
family.setDescription(value);
FamilyPK pk = new FamilyPK();
pk.setName("Marvin");
pk.setToname("Hotblack");
family.setFamilyPK(pk);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Person.class, "Hotblack");
result = hotblack;
entityManager.find(FamilyValue.class, 2);
result = value2;
entityManager.find(Family.class, (FamilyPK) any);
result = family;
}
};
responseOkExpectations(); // Unit under test is exercised.
Response response = privateBean.updateFamilyvalues("Marvin", "Hotblack", 2);
// Verification code (JUnit/TestNG asserts), if any.
assertEquals(family.getDescription(), value2);
}
@Test
public void updateFamilyvaluesNotFound() throws MudException
{
logger.fine("updateFamilyvaluesNotFound");
final FamilyValue value = new FamilyValue();
value.setDescription("friend");
value.setId(1);
final FamilyValue value2 = new FamilyValue();
value2.setDescription("bff");
value2.setId(2);
final Family family = new Family();
family.setDescription(value);
FamilyPK pk = new FamilyPK();
pk.setName("Marvin");
pk.setToname("Hotblack");
family.setFamilyPK(pk);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Person.class, "Hotblack");
result = hotblack;
entityManager.find(FamilyValue.class, 12);
result = null;
}
};
try
{
// Unit under test is exercised.
Response response = privateBean.updateFamilyvalues("Marvin", "Hotblack", 12);
fail("We are supposed to get an exception here.");
} catch (WebApplicationException result)
{
// Yay! We get an exception!
}
}
@Test
public void newFamilyvalues() throws MudException
{
logger.fine("newFamilyvalues");
final FamilyValue value = new FamilyValue();
value.setDescription("friend");
value.setId(1);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Person.class, "Hotblack");
result = hotblack;
entityManager.find(FamilyValue.class, 1);
result = value;
entityManager.find(Family.class, (FamilyPK) any);
result = null;
entityManager.persist((Family) any);
result = new Delegate()
{
// The name of this method can actually be anything.
void persist(Family fam)
{
assertNotNull(fam);
assertEquals(fam.getDescription(), value);
assertEquals(fam.getFamilyPK().getName(), "Marvin");
assertEquals(fam.getFamilyPK().getToname(), "Hotblack");
}
};
}
};
responseOkExpectations();
// Unit under test is exercised.
Response response = privateBean.updateFamilyvalues("Marvin", "Hotblack", 1);
// Verification code (JUnit/TestNG asserts), if any.
}
@Test
public void deleteFamilyvalues() throws MudException
{
logger.fine("deleteFamilyvalues");
final FamilyValue value = new FamilyValue();
value.setDescription("friend");
value.setId(1);
final FamilyValue value2 = new FamilyValue();
value2.setDescription("bff");
value2.setId(2);
final Family family = new Family();
family.setDescription(value);
FamilyPK pk = new FamilyPK();
pk.setName("Marvin");
pk.setToname("Hotblack");
family.setFamilyPK(pk);
PrivateBean privateBean = new PrivateBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
@Override
protected String getPlayerName() throws IllegalStateException
{
return "Marvin";
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(Family.class, (FamilyPK) any);
result = family;
entityManager.remove(family);
}
};
responseOkExpectations();
// Unit under test is exercised.
privateBean.deleteFamilyvalues("Marvin", "Hotblack");
// Verification code (JUnit/TestNG asserts), if any.
}
private void responseOkExpectations()
{
new Expectations() // an "expectation block"
{
{
Response.ok();
result = responseBuilder;
responseBuilder.build();
}
};
}
private void responseNoContentExpectations()
{
new Expectations() // an "expectation block"
{
{
Response.noContent();
result = responseBuilder;
responseBuilder.build();
}
};
}
}