package org.aegee.runanddine.registrationvalidation;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import org.aegee.runanddine.AbstractDbEnabledTest;
import org.aegee.runanddine.util.data.ModelNotExistingException;
import org.junit.Test;

public class RegistrationValidationMailTemplateManagerTest extends AbstractDbEnabledTest
{
	/**
	 * Test of getInstance()
	 * 
	 * @throws Exception
	 */
	@Test
	public void testGetInstance()
	{
		RegistrationValidationMailTemplateManager mtm1 = RegistrationValidationMailTemplateManager.getInstance();
		RegistrationValidationMailTemplateManager mtm2 = RegistrationValidationMailTemplateManager.getInstance();
		assertNotNull(mtm1);
		assertTrue(mtm1 == mtm2);
	}

	/**
	 * Test of getById() with id for existing entry
	 */
	@Test
	public void testGetByIdExisting() throws ModelNotExistingException
	{
		RegistrationValidationMailTemplateManager mtm = RegistrationValidationMailTemplateManager.getInstance();
		RegistrationValidationMailTemplate mt = new RegistrationValidationMailTemplate();
		mtm.save(mt);
		mtm.getById(mt.getId());
		mtm.delete(mt);
	}

	/**
	 * Test getById() with id for existing entry
	 */
	@Test(expected = ModelNotExistingException.class)
	public void testGetByIdNotExisting() throws ModelNotExistingException
	{
		int id = 1;
		RegistrationValidationMailTemplateManager mtm = RegistrationValidationMailTemplateManager.getInstance();
		RegistrationValidationMailTemplate mt = mtm.getById(id);
	}

	/**
	 * Test get with existing template
	 */
	@Test
	public void testGetExisting() throws ModelNotExistingException
	{
		RegistrationValidationMailTemplateManager mtm = RegistrationValidationMailTemplateManager.getInstance();
		RegistrationValidationMailTemplate mt = new RegistrationValidationMailTemplate();
		mtm.save(mt);
		mtm.get();
		mtm.delete(mt);
	}

	/**
	 * Test get for not existing template
	 */
	@Test(expected = ModelNotExistingException.class)
	public void testGetNotExisting() throws ModelNotExistingException
	{
		RegistrationValidationMailTemplateManager mtm = RegistrationValidationMailTemplateManager.getInstance();
		mtm.get();
	}

	/**
	 * Test getAll with existing models
	 */
	@Test(expected = UnsupportedOperationException.class)
	public void testGetAll()
	{
		RegistrationValidationMailTemplateManager mtm = RegistrationValidationMailTemplateManager.getInstance();
		mtm.getAll();
	}

	/**
	 * Test save() creating entry
	 */
	@Test
	public void testSaveCreate()
	{
		RegistrationValidationMailTemplateManager mtm = RegistrationValidationMailTemplateManager.getInstance();
		RegistrationValidationMailTemplate mt = new RegistrationValidationMailTemplate();
		mtm.save(mt);
		assertTrue(mt.getId() != 0);
		mtm.delete(mt);
	}

	/**
	 * Test save() updating entry
	 */
	@Test
	public void testSaveUpdate() throws ModelNotExistingException
	{
		RegistrationValidationMailTemplateManager mtm = RegistrationValidationMailTemplateManager.getInstance();
		RegistrationValidationMailTemplate mt = new RegistrationValidationMailTemplate();
		mt.setContent("foo");
		mtm.save(mt);
		mt.setContent("bar");
		mtm.save(mt);
		assertTrue(mtm.get().getContent().equals("bar"));
		mtm.delete(mt);
	}

	/**
	 * Test delete()
	 */
	@Test(expected = ModelNotExistingException.class)
	public void testDelete() throws ModelNotExistingException
	{
		RegistrationValidationMailTemplateManager mtm = RegistrationValidationMailTemplateManager.getInstance();
		RegistrationValidationMailTemplate mt = new RegistrationValidationMailTemplate();
		mtm.save(mt);
		mtm.delete(mt);
		mtm.get();
	}

	/**
	 * Test newObject()
	 */
	@Test
	public void testNewObject() throws Exception
	{
		RegistrationValidationMailTemplateManager mtm = RegistrationValidationMailTemplateManager.getInstance();
		assertNotNull(mtm.newObject());
	}
}
