package org.molgenis.security.freemarker; import com.google.common.collect.Maps; import freemarker.core.Environment; import freemarker.template.*; import org.molgenis.security.core.MolgenisPermissionService; import org.molgenis.security.core.Permission; 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 HasPermissionDirectiveTest { private HasPermissionDirective directive; private MolgenisPermissionService molgenisPermissionService; private StringWriter envWriter; private Template fakeTemplate; @BeforeMethod public void setUp() { molgenisPermissionService = mock(MolgenisPermissionService.class); directive = new HasPermissionDirective(molgenisPermissionService); envWriter = new StringWriter(); fakeTemplate = Template .getPlainTextTemplate("name", "content", new Configuration(Configuration.VERSION_2_3_21)); } @Test public void executeWithPermission() throws TemplateException, IOException { when(molgenisPermissionService.hasPermissionOnEntity("entity", Permission.COUNT)).thenReturn(true); Map<String, Object> params = Maps.newHashMap(); params.put("entityName", "entity"); params.put("permission", "COUNT"); directive.execute(new Environment(fakeTemplate, null, envWriter), params, new TemplateModel[0], new TemplateDirectiveBody() { @Override public void render(Writer out) throws TemplateException, IOException { out.write("PERMISSION"); } }); assertEquals(envWriter.toString(), "PERMISSION"); } @Test public void executeWithoutPermission() throws TemplateException, IOException { when(molgenisPermissionService.hasPermissionOnEntity("entity", Permission.WRITE)).thenReturn(false); Map<String, Object> params = Maps.newHashMap(); params.put("entityName", "entity"); params.put("permission", "WRITE"); directive.execute(new Environment(fakeTemplate, null, envWriter), params, new TemplateModel[0], new TemplateDirectiveBody() { @Override public void render(Writer out) throws TemplateException, IOException { out.write("PERMISSION"); } }); assertEquals(envWriter.toString(), ""); } }