package blog.blogEntry;
import javax.enterprise.context.*;
import javax.validation.*;
import org.junit.*;
import static org.junit.Assert.*;
import blog.common.*;
public final class BlogEntryServiceTest
{
@TestData BlogEntryTestData blogEntryData;
@ObjectUnderTest BlogEntryService blogEntryService;
@Dependency Conversation conversation;
@Test
public void beginNewBlogEntry()
{
assertTrue(conversation.isTransient());
blogEntryService.newInstance();
BlogEntry instance = blogEntryService.getInstance();
assertNull(instance.getId());
assertNotNull(instance.getAuthor());
assertNull(blogEntryService.getId());
assertFalse(conversation.isTransient());
}
@Test
public void persistNewBlogEntry()
{
blogEntryService.newInstance();
BlogEntry instance = blogEntryService.getInstance();
String title = "title";
instance.setTitle(title);
String content = "content";
instance.setContent(content);
blogEntryService.save();
blogEntryData.assertSavedToDB(instance);
assertEquals(title, instance.getTitle());
assertEquals(content, instance.getContent());
assertEquals(content, instance.getShortContent());
assertNotNull(instance.getCreated());
assertNotNull(instance.getVersion());
assertTrue(instance.getComments().isEmpty());
}
@Test(expected = ConstraintViolationException.class)
public void attemptToSaveWithoutAuthor()
{
blogEntryService.newInstance();
BlogEntry instance = blogEntryService.getInstance();
instance.setAuthor(null);
blogEntryService.save();
}
@Test
public void selectBlogEntryById()
{
BlogEntry blogEntry = blogEntryData.buildAndSave();
assertTrue(conversation.isTransient());
blogEntryService.setId(blogEntry.getId());
BlogEntry instance = blogEntryService.getInstance();
assertEquals(blogEntry.getId(), instance.getId());
String shortContent = instance.getShortContent();
assertTrue(shortContent.length() < instance.getContent().length());
assertTrue(shortContent.endsWith("..."));
assertFalse(conversation.isTransient());
}
@Test
public void selectADifferentBlogEntry()
{
BlogEntry blogEntry1 = blogEntryData.withTitle("Blog entry 1").buildAndSave();
BlogEntry blogEntry2 = blogEntryData.withTitle("Blog entry 2").buildAndSave();
blogEntryService.setId(blogEntry1.getId());
BlogEntry instance1 = blogEntryService.getInstance();
blogEntryService.setId(blogEntry2.getId());
BlogEntry instance2 = blogEntryService.getInstance();
assertSame(blogEntry1, instance1);
assertSame(blogEntry2, instance2);
}
@Test
public void modifyABlogEntry()
{
BlogEntry blogEntry = blogEntryData.buildAndSave();
blogEntryService.setId(blogEntry.getId());
BlogEntry instance = blogEntryService.getInstance();
String newContent = "Modified content";
instance.setContent(newContent);
blogEntryService.save();
BlogEntry fromDB = blogEntryData.assertSavedToDB(instance);
assertEquals(newContent, fromDB.getContent());
assertEquals(blogEntry.getId(), blogEntryService.getId());
}
@Test
public void deleteSelectedBlogEntry()
{
BlogEntry blogEntry = blogEntryData.buildAndSave();
blogEntryService.setId(blogEntry.getId());
blogEntryService.getInstance();
blogEntryService.delete();
assertTrue(conversation.isTransient());
blogEntryData.assertDeletedFromDB(blogEntry);
}
@Test
public void deleteSelectedBlogEntry_withDetachedInstance()
{
BlogEntry blogEntry = blogEntryData.buildAndSave();
blogEntryService.setId(blogEntry.getId());
BlogEntry instance = blogEntryService.getInstance();
blogEntryData.detachFromPersistenceContext(instance);
blogEntryService.delete();
blogEntryData.assertDeletedFromDB(instance);
}
}