package org.molgenis.dataexplorer.freemarker;
import com.google.common.collect.Maps;
import freemarker.core.Environment;
import freemarker.template.*;
import org.molgenis.data.DataService;
import org.molgenis.dataexplorer.controller.DataExplorerController;
import org.molgenis.framework.ui.MolgenisPlugin;
import org.molgenis.framework.ui.MolgenisPluginRegistry;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
public class DataExplorerHyperlinkDirectiveTest
{
private DataService dataService;
private DataExplorerHyperlinkDirective directive;
private StringWriter envWriter;
private Template fakeTemplate;
@BeforeMethod
public void setUp()
{
MolgenisPluginRegistry mpr = mock(MolgenisPluginRegistry.class);
when(mpr.getPlugin(DataExplorerController.ID))
.thenReturn(new MolgenisPlugin("dataex", "dataex", "dataex", "/menu/data/dataex"));
dataService = mock(DataService.class);
when(dataService.hasRepository("thedataset")).thenReturn(true);
directive = new DataExplorerHyperlinkDirective(mpr, dataService);
envWriter = new StringWriter();
fakeTemplate = Template
.getPlainTextTemplate("name", "content", new Configuration(Configuration.VERSION_2_3_21));
}
@Test
public void execute() throws TemplateException, IOException
{
when(dataService.hasRepository("thedataset")).thenReturn(true);
Map<String, String> params = Maps.newHashMap();
params.put("entityName", "thedataset");
params.put("class", "class1 class2");
directive.execute(new Environment(fakeTemplate, null, envWriter), params, new TemplateModel[0],
new TemplateDirectiveBody()
{
@Override
public void render(Writer out) throws TemplateException, IOException
{
out.write("explore data");
}
});
assertEquals(envWriter.toString(),
"<a href='/menu/data/dataex?entity=thedataset' class='class1 class2' >explore data</a>");
}
@Test
public void executeWithMissingDataset() throws TemplateException, IOException
{
when(dataService.hasRepository("thedataset")).thenReturn(false);
Map<String, String> params = Maps.newHashMap();
params.put("entityName", "thedataset");
params.put("class", "class1 class2");
params.put("alternativeText", "alt");
directive.execute(new Environment(fakeTemplate, null, envWriter), params, new TemplateModel[0],
new TemplateDirectiveBody()
{
@Override
public void render(Writer out) throws TemplateException, IOException
{
out.write("explore data");
}
});
assertEquals(envWriter.toString(), "alt");
}
}