/*
* 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.text.ParseException;
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 mmud.database.entities.characters.Person;
import mmud.database.entities.characters.User;
import mmud.database.entities.game.Area;
import mmud.database.entities.game.BoardMessage;
import mmud.database.entities.game.Guild;
import mmud.database.entities.game.Room;
import mmud.database.entities.web.CharacterInfo;
import mmud.exceptions.ErrorDetails;
import mmud.exceptions.MudException;
import mmud.exceptions.MudWebException;
import mmud.rest.services.BoardBean;
import mmud.rest.services.PersonBean;
import mmud.rest.services.PublicBean;
import mmud.rest.webentities.Fortune;
import mmud.rest.webentities.News;
import mmud.rest.webentities.PublicGuild;
import mmud.rest.webentities.PublicPerson;
import mmud.testing.TestingConstants;
import mmud.testing.TestingUtils;
import mockit.Deencapsulation;
import mockit.Expectations;
import mockit.Mocked;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
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 PublicBeanTest
{
// Obtain a suitable logger.
private static final Logger logger = Logger.getLogger(PublicBeanTest.class.getName());
@Mocked
EntityManager entityManager;
@Mocked
Query query;
@Mocked
MudWebException webApplicationException;
@Mocked
ErrorDetails errorDetails;
private User hotblack;
private User marvin;
public PublicBeanTest()
{
}
@BeforeClass
public void setUpClass()
{
}
@AfterClass
public void tearDownClass()
{
}
@BeforeMethod
public void setUp() throws MudException
{
Area aArea = TestingConstants.getSpecialArea();
Room aRoom = TestingConstants.getRoom(aArea);
hotblack = (User) TestingConstants.getHotblack(aRoom);
marvin = (User) TestingConstants.getMarvin(aRoom);
marvin.setSleep(true);
}
@AfterMethod
public void tearDown()
{
}
@Test
public void hello()
{
assertEquals(2, 2);
}
private void compare(Fortune actual, Fortune expected)
{
if (TestingUtils.compareBase(actual, expected))
{
return;
}
assertEquals(actual.gold, expected.gold, "gold");
assertEquals(actual.silver, expected.silver, "silver");
assertEquals(actual.copper, expected.copper, "copper");
assertEquals(actual.name, expected.name, "name");
}
private void compare(PublicPerson actual, PublicPerson expected)
{
if (TestingUtils.compareBase(actual, expected))
{
return;
}
assertEquals(actual.name, expected.name, "name");
assertEquals(actual.title, expected.title, "title");
assertEquals(actual.sleep, expected.sleep, "sleep");
assertEquals(actual.area, expected.area, "area");
assertEquals(actual.min, expected.min, "min");
assertEquals(actual.sec, expected.sec, "sec");
assertEquals(actual.sex, expected.sex);
assertEquals(actual.imageurl, expected.imageurl);
assertEquals(actual.homepageurl, expected.homepageurl);
assertEquals(actual.dateofbirth, expected.dateofbirth);
assertEquals(actual.cityofbirth, expected.cityofbirth);
assertEquals(actual.storyline, expected.storyline);
assertEquals(actual.url, expected.url, "sec");
assertEquals(actual.description, expected.description, "#" + actual.description + "##" + expected.description + "#");
}
private void compare(PublicGuild actual, PublicGuild expected)
{
if (TestingUtils.compareBase(actual, expected))
{
return;
}
assertEquals(actual.title, expected.title, "title");
assertEquals(actual.guildurl, expected.guildurl, "guildurl");
assertEquals(actual.guilddescription, expected.guilddescription, "guilddescription");
assertEquals(actual.creation, expected.creation, "creation");
assertEquals(actual.bossname, expected.bossname, "bossname");
}
private void compare(News actual, News expected)
{
if (TestingUtils.compareBase(actual, expected))
{
return;
}
assertEquals(actual.name, expected.name, "name");
assertEquals(actual.message, expected.message, "message");
if (TestingUtils.compareBase(actual.posttime, expected.posttime))
{
return;
}
assertEquals(actual.posttime.getTime(), expected.posttime.getTime(), "posttime");
}
@Test
public void fortunesEmptyTest()
{
logger.fine("fortunesEmptyTest");
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("User.fortunes");
result = query;
}
};
// Unit under test is exercised.
List<Fortune> result = publicBean.fortunes();
// Verification code (JUnit/TestNG asserts), if any.
assertEquals(result.size(), 0);
}
@Test
public void fortunesTest()
{
logger.fine("fortunesTest");
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
final Object[] one =
{
"Hotblack", Integer.valueOf(34567)
};
final Object[] two =
{
"Marvin",
Integer.valueOf(345674)
};
final List<Object[]> list = new ArrayList<>();
list.add(one);
list.add(two);
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("User.fortunes");
result = query;
query.setMaxResults(100);
query.getResultList();
result = list;
}
};
// Unit under test is exercised.
List<Fortune> result = publicBean.fortunes();
// Verification code (JUnit/TestNG asserts), if any.
assertEquals(result.size(), 2);
Fortune expected = new Fortune();
expected.name = "Hotblack";
expected.gold = 345;
expected.silver = 6;
expected.copper = 7;
compare(result.get(0), expected);
expected = new Fortune();
expected.name = "Marvin";
expected.gold = 3456;
expected.silver = 7;
expected.copper = 4;
compare(result.get(1), expected);
}
@Test
public void whoEmptyTest()
{
logger.fine("whoEmptyTest");
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
Deencapsulation.setField(publicBean, "personBean", new PersonBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
});
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("User.who");
result = query;
}
};
// Unit under test is exercised.
List<PublicPerson> result = publicBean.who();
// Verification code (JUnit/TestNG asserts), if any.
assertEquals(result.size(), 0);
}
@Test
public void whoTest()
{
logger.fine("whoTest");
final List<Person> list = new ArrayList<>();
list.add(hotblack);
list.add(marvin);
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
Deencapsulation.setField(publicBean, "personBean", new PersonBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
});
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("User.who");
result = query;
query.getResultList();
result = list;
}
};
// Unit under test is exercised.
List<PublicPerson> result = publicBean.who();
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(result, "list expected");
assertEquals(result.size(), 2);
PublicPerson expected = new PublicPerson();
expected.name = "Hotblack";
expected.sleep = "";
expected.area = "On board the Starship Heart of Gold";
expected.min = 16l;
expected.sec = 40l;
expected.title = "Guitar keyboard player of the rock group Disaster Area";
compare(result.get(0), expected);
expected = new PublicPerson();
expected.name = "Marvin";
expected.sleep = "sleeping";
expected.area = "On board the Starship Heart of Gold";
expected.min = 33l;
expected.sec = 20l;
expected.title = "The Paranoid Android";
compare(result.get(1), expected);
}
@Test
public void newsEmptyTest() throws ParseException
{
logger.fine("newsEmptyTest");
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
Deencapsulation.setField(publicBean, "boardBean", new BoardBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
});
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("BoardMessage.news");
result = query;
query.getResultList();
}
};
// Unit under test is exercised.
List<News> result = publicBean.news();
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(result, "list expected");
assertEquals(result.size(), 0);
}
@Test
public void newsTest() throws ParseException
{
logger.fine("newsTest");
Date secondDate = new Date();
Date firstDate = new Date(secondDate.getTime() - 1_000_000);
final List<BoardMessage> list = new ArrayList<>();
BoardMessage message = new BoardMessage();
message.setId(1);
message.setPerson(hotblack);
message.setMessage("First post!");
message.setPosttime(firstDate);
message.setRemoved(Boolean.FALSE);
list.add(message);
message = new BoardMessage();
message.setId(2);
message.setPerson(marvin);
message.setMessage("Damn!");
message.setPosttime(secondDate);
message.setRemoved(Boolean.FALSE);
list.add(message);
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
Deencapsulation.setField(publicBean, "boardBean", new BoardBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
});
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("BoardMessage.news");
result = query;
query.getResultList();
result = list;
}
};
// Unit under test is exercised.
List<News> result = publicBean.news();
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(result, "list expected");
assertEquals(result.size(), 2);
News expected = new News();
expected.name = "Hotblack";
expected.message = "First post!";
expected.posttime = firstDate;
compare(result.get(0), expected);
expected = new News();
expected.name = "Marvin";
expected.message = "Damn!";
expected.posttime = secondDate;
compare(result.get(1), expected);
}
@Test
public void statusEmptyTest()
{
logger.fine("statusEmptyTest");
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("User.status");
result = query;
query.getResultList();
}
};
// Unit under test is exercised.
List<PublicPerson> result = publicBean.status();
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(result, "list expected");
assertEquals(result.size(), 0);
}
@Test
public void statusTest()
{
logger.fine("statusTest");
final List<Person> list = new ArrayList<>();
list.add(hotblack);
list.add(marvin);
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("User.status");
result = query;
query.getResultList();
result = list;
}
};
// Unit under test is exercised.
List<PublicPerson> result = publicBean.status();
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(result, "list expected");
assertEquals(result.size(), 2);
PublicPerson expected = new PublicPerson();
expected.name = "Hotblack";
expected.title = "Guitar keyboard player of the rock group Disaster Area";
compare(result.get(0), expected);
expected = new PublicPerson();
expected.name = "Marvin";
expected.title = "The Paranoid Android";
compare(result.get(1), expected);
}
@Test
public void guildsEmptyTest()
{
logger.fine("guildsEmptyTest");
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("Guild.findAll");
result = query;
query.getResultList();
}
};
// Unit under test is exercised.
List<PublicGuild> result = publicBean.guilds();
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(result, "list expected");
assertEquals(result.size(), 0);
}
@Test
public void guildsTest() throws MudException
{
logger.fine("guildsTest");
Date secondDate = new Date();
Date firstDate = new Date(secondDate.getTime() - 1_000_000);
final List<Guild> list = new ArrayList<>();
Guild guild = new Guild();
guild.setName("disasterarea");
guild.setTitle("Disaster Area");
guild.setBoss(hotblack);
guild.setCreation(firstDate);
guild.setHomepage("http://www.disasterarea.com");
guild.setDescription("This is just a description");
list.add(guild);
guild = new Guild();
guild.setName("sirius");
guild.setTitle("Sirius Cybernetics Corporation");
guild.setBoss(marvin);
guild.setCreation(secondDate);
guild.setHomepage("http://www.scc.com");
guild.setDescription("This is just a description");
list.add(guild);
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("Guild.findAll");
result = query;
query.getResultList();
result = list;
}
};
// Unit under test is exercised.
List<PublicGuild> result = publicBean.guilds();
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(result, "list expected");
assertEquals(result.size(), 2);
PublicGuild expected = new PublicGuild();
expected.title = "Disaster Area";
expected.guildurl = "http://www.disasterarea.com";
expected.guilddescription = "This is just a description";
expected.creation = firstDate;
expected.bossname = "Hotblack";
compare(result.get(0), expected);
expected = new PublicGuild();
expected.title = "Sirius Cybernetics Corporation";
expected.guildurl = "http://www.scc.com";
expected.guilddescription = "This is just a description";
expected.creation = secondDate;
expected.bossname = "Marvin";
compare(result.get(1), expected);
}
@Test
public void charactersheetNotFoundTest()
{
logger.fine("charactersheetNotFoundTest");
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = null;
}
};
// Unit under test is exercised.
try
{
PublicPerson person = publicBean.charactersheet("Marvin");
fail("We expected a not found exception");
} catch (MudWebException e)
{
// Yay! We get an exception!
}
// Verification code (JUnit/TestNG asserts), if any.
}
@Test
public void charactersheetTest() throws MudException
{
logger.fine("charactersheetTest");
Date secondDate = new Date();
Date firstDate = new Date(secondDate.getTime() - 1_000_000);
final CharacterInfo charinfo = new CharacterInfo();
charinfo.setImageurl("http://www.images.com/imageurl.jpg");
charinfo.setHomepageurl("http://www.homepage.com/");
charinfo.setDateofbirth("0000");
charinfo.setCityofbirth("Sirius");
charinfo.setStoryline("An android");
charinfo.setName("Marvin");
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.find(User.class, "Marvin");
result = marvin;
entityManager.find(CharacterInfo.class, marvin.getName());
result = charinfo;
entityManager.createNamedQuery("Family.findByName");
result = query;
query.setParameter("name", marvin.getName());
query.getResultList();
}
};
// Unit under test is exercised.
PublicPerson person = publicBean.charactersheet("Marvin");
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(person, "person expected");
PublicPerson expected = new PublicPerson();
expected.name = "Marvin";
expected.title = "The Paranoid Android";
expected.sex = "male";
expected.description = "young, tall, slender, swarthy, black-eyed, long-faced, black-haired, long-faced male android";
expected.imageurl = "http://www.images.com/imageurl.jpg";
expected.homepageurl = "http://www.homepage.com/";
expected.dateofbirth = "0000";
expected.cityofbirth = "Sirius";
expected.storyline = "An android";
compare(person, expected);
}
@Test
public void charactersheetsEmptyTest()
{
logger.fine("charactersheetsEmptyTest");
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("CharacterInfo.charactersheets");
result = query;
query.getResultList();
}
};
// Unit under test is exercised.
List<PublicPerson> result = publicBean.charactersheets();
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(result, "list expected");
assertEquals(result.size(), 0);
}
@Test
public void charactersheetsTest()
{
logger.fine("charactersheetsTest");
final List<String> list = new ArrayList<>();
list.add("Marvin");
list.add("Hotblack");
PublicBean publicBean = new PublicBean()
{
@Override
protected EntityManager getEntityManager()
{
return entityManager;
}
};
new Expectations() // an "expectation block"
{
{
entityManager.createNamedQuery("CharacterInfo.charactersheets");
result = query;
query.getResultList();
result = list;
}
};
// Unit under test is exercised.
List<PublicPerson> result = publicBean.charactersheets();
// Verification code (JUnit/TestNG asserts), if any.
assertNotNull(result, "list expected");
assertEquals(result.size(), 2);
PublicPerson expected = new PublicPerson();
expected.name = "Marvin";
expected.url = "/karchangame/resources/public/charactersheets/Marvin";
compare(result.get(0), expected);
expected = new PublicPerson();
expected.name = "Hotblack";
expected.url = "/karchangame/resources/public/charactersheets/Hotblack";
compare(result.get(1), expected);
}
}