package fr.adrienbrault.idea.symfony2plugin.tests.stubs.indexes;
import fr.adrienbrault.idea.symfony2plugin.doctrine.dict.DoctrineModelSerializable;
import fr.adrienbrault.idea.symfony2plugin.stubs.indexes.DoctrineMetadataFileStubIndex;
import fr.adrienbrault.idea.symfony2plugin.tests.SymfonyLightCodeInsightFixtureTestCase;
import org.jetbrains.annotations.NotNull;
import java.io.File;
/**
* @author Daniel Espendiller <daniel@espendiller.net>
*
* @see fr.adrienbrault.idea.symfony2plugin.stubs.indexes.DoctrineMetadataFileStubIndex
*/
public class DoctrineMetadataFileStubIndexTest extends SymfonyLightCodeInsightFixtureTestCase {
public void setUp() throws Exception {
super.setUp();
myFixture.configureByText("doctrine.mongodb.xml", "" +
"<doctrine-mongo-mapping >\n" +
" <document name=\"Documents\\Xml\\MongoUser\" db=\"documents\" collection=\"users\" repository-class=\"Documents\\Xml\\MongoUserRepository\"/>\n" +
" <document name=\"Documents\\User1\" db=\"documents\" collection=\"users\"/>\n" +
"</doctrine-mongo-mapping>"
);
myFixture.configureByText("doctrine.orm.xml",
"<doctrine-mapping>\n" +
" <entity name=\"Documents\\Xml\\OrmUser\" table=\"cms_users\" repository-class=\"Documents\\Xml\\OrmUserRepository\"/>\n" +
"</doctrine-mapping>"
);
myFixture.configureByText("doctrine.yml", "" +
"Documents\\Yml\\OdmUser:\n" +
" db: documents\n" +
"\n" +
"Documents\\Yml\\OrmUser:\n" +
" repositoryClass: Documents\\Yml\\OrmUserRepository"
);
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("doctrine.php"));
}
public String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
/**
* @see fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineUtil#getClassRepositoryPair
*/
public void testXmlMetadata() {
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "Documents\\Xml\\MongoUser");
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "Documents\\Xml\\OrmUser");
assertIndexContainsKeyWithValue(DoctrineMetadataFileStubIndex.KEY, "Documents\\Xml\\MongoUser", new IndexValueRepositoryClassEquals("Documents\\Xml\\MongoUserRepository"));
assertIndexContainsKeyWithValue(DoctrineMetadataFileStubIndex.KEY, "Documents\\Xml\\OrmUser", new IndexValueRepositoryClassEquals("Documents\\Xml\\OrmUserRepository"));
}
/**
* @see fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineUtil#getClassRepositoryPair
*/
public void testXmlMetadataInvalid() {
myFixture.configureByText("doctrine.mongodb.xml", "" +
"<foo-mongo-mapping >\n" +
" <document name=\"Documents\\Invalid\" db=\"documents\" collection=\"users\"/>\n" +
"</foo-mongo-mapping>"
);
assertIndexNotContains(DoctrineMetadataFileStubIndex.KEY, "Documents\\Invalid");
}
/**
* @see fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineUtil#getClassRepositoryPair
*/
public void testYamlMetadata() {
myFixture.configureByFile("doctrine.yml");
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "Documents\\Yml\\OdmUser");
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "Documents\\Yml\\OrmUser");
assertIndexContainsKeyWithValue(DoctrineMetadataFileStubIndex.KEY, "Documents\\Yml\\OrmUser", new IndexValueRepositoryClassEquals("Documents\\Yml\\OrmUserRepository"));
}
/**
* @see fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineUtil#getClassRepositoryPair
*/
public void testYamlMetadataValidByFilename() {
myFixture.configureByText("doctrine.orm.yml", "" +
"Filename:\n" +
" foo: foo"
);
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "Filename");
}
/**
* @see fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineUtil#getClassRepositoryPair
*/
public void testYamlMetadataValidByStructure() {
myFixture.configureByText("foo.yml", "" +
"FooFields:\n" +
" fields: ~"
);
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "FooFields");
myFixture.configureByText("foo.yml", "" +
"FooId:\n" +
" id: ~"
);
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "FooId");
myFixture.configureByText("foo.yml", "" +
"FooCollection:\n" +
" collection: ~"
);
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "FooCollection");
myFixture.configureByText("foo.yml", "" +
"FooDb:\n" +
" db: ~"
);
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "FooDb");
myFixture.configureByText("foo.yml", "" +
"FooIndexes:\n" +
" indexes: ~"
);
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "FooIndexes");
}
/**
* @see fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineUtil#getClassRepositoryPair
*/
public void testYamlMetadataInvalidByFilename() {
myFixture.configureByText("doctrine_foo.yml", "" +
"Documents\\Yml\\OrmUserInvalid:\n" +
" foo: ~"
);
assertIndexNotContains(DoctrineMetadataFileStubIndex.KEY, "Documents\\Yml\\OrmUserInvalid");
}
/**
* @see fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineUtil#getClassRepositoryPair
*/
public void testPhpOrmAnnotationMetadata() {
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "Doctrine\\Orm\\Annotation");
assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "Doctrine\\Flow\\Orm\\Annotation");
assertIndexContainsKeyWithValue(DoctrineMetadataFileStubIndex.KEY, "Doctrine\\Orm\\Annotation", new IndexValueRepositoryClassEquals("Foo"));
}
/**
* @see fr.adrienbrault.idea.symfony2plugin.doctrine.DoctrineUtil#getClassRepositoryPair
*/
public void testPhpOdmAnnotationMetadata() {
// @TODO: implement
//assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "Doctrine\\MongoDB\\Annotation");
//assertIndexContains(DoctrineMetadataFileStubIndex.KEY, "Doctrine\\CouchDB\\Annotation");
}
private static class IndexValueRepositoryClassEquals implements IndexValue.Assert<DoctrineModelSerializable> {
@NotNull
private final String repositoryClass;
public IndexValueRepositoryClassEquals(@NotNull String repositoryClass) {
this.repositoryClass = repositoryClass;
}
@Override
public boolean match(@NotNull DoctrineModelSerializable value) {
return repositoryClass.equals(value.getRepositoryClass());
}
}
}