package test.org.korsakow.command;
import java.util.Collection;
import org.junit.Assert;
import org.dsrg.soenea.domain.interf.IDomainObject;
import org.dsrg.soenea.uow.UoW;
import org.junit.Test;
import org.korsakow.domain.ImageFactory;
import org.korsakow.domain.InterfaceFactory;
import org.korsakow.domain.ProjectFactory;
import org.korsakow.domain.SnuFactory;
import org.korsakow.domain.SoundFactory;
import org.korsakow.domain.VideoFactory;
import org.korsakow.domain.command.DeleteImageCommand;
import org.korsakow.domain.command.DeleteSoundCommand;
import org.korsakow.domain.command.DeleteVideoCommand;
import org.korsakow.domain.command.Request;
import org.korsakow.domain.command.Response;
import org.korsakow.domain.interf.IImage;
import org.korsakow.domain.interf.IInterface;
import org.korsakow.domain.interf.IMedia;
import org.korsakow.domain.interf.IProject;
import org.korsakow.domain.interf.IResource;
import org.korsakow.domain.interf.ISnu;
import org.korsakow.domain.interf.ISound;
import test.org.korsakow.domain.AbstractDomainObjectTestCase;
public class TestDeleteCommandWhenReferenced extends AbstractDomainObjectTestCase
{
@Test public void testDeleteSnuMainMediaFailure() throws Exception
{
IMedia media = VideoFactory.createNew();
ISnu snu = SnuFactory.createNew();
snu.setMainMedia(media);
UoW.getCurrent().commit();
UoW.newCurrent();
Request request = new Request();
request.set("id", media.getId());
Response response = new Response();
new DeleteVideoCommand(request, response).execute();
assertInUse(response, snu);
}
@Test public void testDeleteSnuPreviewFailure() throws Exception
{
IMedia media = VideoFactory.createNew();
ISnu snu = SnuFactory.createNew();
snu.setPreviewMedia(media);
UoW.getCurrent().commit();
UoW.newCurrent();
Request request = new Request();
request.set("id", media.getId());
Response response = new Response();
new DeleteVideoCommand(request, response).execute();
assertInUse(response, snu);
}
@Test public void testDeleteSnuMainMediaAndPreviewFailure() throws Exception
{
IMedia media = VideoFactory.createNew();
ISnu snu = SnuFactory.createNew();
snu.setMainMedia(media);
snu.setPreviewMedia(media);
UoW.getCurrent().commit();
UoW.newCurrent();
Request request = new Request();
request.set("id", media.getId());
Response response = new Response();
new DeleteVideoCommand(request, response).execute();
assertInUse(response, snu);
}
@Test public void testDeleteSnuBackgroundSoundFailure() throws Exception
{
ISound media = SoundFactory.createNew();
ISnu snu = SnuFactory.createNew();
snu.setBackgroundSound(media);
UoW.getCurrent().commit();
UoW.newCurrent();
Request request = new Request();
request.set("id", media.getId());
Response response = new Response();
new DeleteSoundCommand(request, response).execute();
assertInUse(response, snu);
}
@Test public void testDeleteProjectBackgroundSoundFailure() throws Exception
{
ISound media = SoundFactory.createNew();
IProject project = ProjectFactory.createNew();
project.setBackgroundSound(media);
UoW.getCurrent().commit();
UoW.newCurrent();
Request request = new Request();
request.set("id", media.getId());
Response response = new Response();
new DeleteSoundCommand(request, response).execute();
assertInUse(response, project);
}
@Test public void testDeleteProjectClickSoundFailure() throws Exception
{
ISound media = SoundFactory.createNew();
IProject project = ProjectFactory.createNew();
project.setClickSound(media);
UoW.getCurrent().commit();
UoW.newCurrent();
Request request = new Request();
request.set("id", media.getId());
Response response = new Response();
new DeleteSoundCommand(request, response).execute();
assertInUse(response, project);
}
@Test public void testDeleteProjectSplashScreenFailure() throws Exception
{
IImage media = ImageFactory.createNew();
IProject project = ProjectFactory.createNew();
project.setSplashScreenMedia(media);
UoW.getCurrent().commit();
UoW.newCurrent();
Request request = new Request();
request.set("id", media.getId());
Response response = new Response();
new DeleteImageCommand(request, response).execute();
assertInUse(response, project);
}
@Test public void testDeleteInterfaceClickSoundFailure() throws Exception
{
ISound media = SoundFactory.createNew();
IInterface interf = InterfaceFactory.createNew();
interf.setClickSound(media);
UoW.getCurrent().commit();
UoW.newCurrent();
Request request = new Request();
request.set("id", media.getId());
Response response = new Response();
new DeleteSoundCommand(request, response).execute();
assertInUse(response, interf);
}
private void assertInUse(Response response, IDomainObject<Long> referer)
{
assertInUse(response, referer, 1);
}
private void assertInUse(Response response, IDomainObject<Long> referer, long expectedUseCount)
{
Boolean resourceInUse = response.has("resourceInUse") && response.getBoolean("resourceInUse");
Collection<IResource> references = (Collection<IResource>)response.get("references");
Assert.assertEquals(Boolean.TRUE, resourceInUse);
Assert.assertEquals(expectedUseCount, references.size());
Assert.assertEquals(referer, references.iterator().next());
}
}