package fr.adrienbrault.idea.symfony2plugin.tests.security.utils;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.php.lang.psi.elements.ClassConstantReference;
import fr.adrienbrault.idea.symfony2plugin.security.utils.VoterUtil;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import java.io.File;
import java.util.Set;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*
* @see fr.adrienbrault.idea.symfony2plugin.security.utils.VoterUtil
*/
public class VoterUtilTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.copyFileToProject("classes.php");
myFixture.copyFileToProject("security.yml");
}
protected String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
/**
* @see VoterUtil#visitAttribute
*/
public void testVoterAttributeForPhpFile() {
VoterUtil.StringPairConsumer consumer = new VoterUtil.StringPairConsumer();
VoterUtil.visitAttribute(getProject(), consumer);
assertContainsElements(consumer.getValues(), "FOOBAR_IF_1", "FOOBAR_IF_2", "FOOBAR_IF_3", "FOOBAR_IF_4");
assertContainsElements(consumer.getValues(), "FOOBAR_ARRAY_1", "FOOBAR_ARRAY_2");
assertContainsElements(consumer.getValues(), "FOOBAR_ARRAY_3", "FOOBAR_ARRAY_4");
assertContainsElements(consumer.getValues(), "FOOBAR_CASE_1", "FOOBAR_CASE_2");
assertContainsElements(consumer.getValues(), "FOOBAR_ATTRIBUTES_IN_CONST_1", "FOOBAR_ATTRIBUTES_IN_PROPERTY_1");
}
/**
* @see VoterUtil#visitAttribute
*/
public void testVoterAttributeForPhpFileInForeach() {
VoterUtil.StringPairConsumer consumer = new VoterUtil.StringPairConsumer();
VoterUtil.visitAttribute(getProject(), consumer);
assertContainsElements(consumer.getValues(), "FOOBAR_EACH_1", "FOOBAR_ATTRIBUTES_IN_ARRAY");
}
public void testVoterAttributeForPhpFileWithTarget() {
VoterUtil.TargetPairConsumer consumer = new VoterUtil.TargetPairConsumer("FOOBAR_IF_1");
VoterUtil.visitAttribute(getProject(), consumer);
assertNotNull(ContainerUtil.filter(consumer.getValues(), psiElement ->
psiElement instanceof ClassConstantReference)
);
}
/**
* @see VoterUtil#visitAttribute
*/
public void testVoterAttributeForYamlSecurityFile() {
VoterUtil.StringPairConsumer consumer = new VoterUtil.StringPairConsumer();
VoterUtil.visitAttribute(getProject(), consumer);
Set<String> values = consumer.getValues();
assertContainsElements(values, "YAML_ROLE_ADMIN", "YAML_ROLE_ALLOWED_TO_SWITCH", "YAML_ROLE_SUPER_ADMIN");
assertContainsElements(values, "YAML_ROLE_USER_FOOBAR", "YAML_ROLE_USER_FOOBAR_1");
assertContainsElements(values, "YAML_ROLE_FOOBAR_ARRAY_1", "YAML_ROLE_FOOBAR_ARRAY_2");
}
}