package com.nvlad.yii2support.database;
import com.intellij.codeInsight.completion.CompletionType;
import com.intellij.database.psi.DbDataSource;
import com.intellij.database.psi.DbPsiFacade;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import com.jetbrains.php.lang.PhpFileType;
import com.nvlad.yii2support.database.fixtures.TestDataSource;
import java.io.File;
import java.util.List;
/**
* Created by oleg on 05.04.2017.
*/
public class ActiveQueryTest extends LightCodeInsightFixtureTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
myFixture.configureFromExistingVirtualFile(myFixture.copyFileToProject("classes.php"));
DbPsiFacade facade = DbPsiFacade.getInstance(myFixture.getProject());
if (facade.getDataSources().size() == 0) {
TestDataSource source = new TestDataSource(myFixture.getProject());
facade.getDataSources().add(source);
List<DbDataSource> dataSources = facade.getDataSources();
}
}
@Override
protected String getTestDataPath() {
return new File(this.getClass().getResource("fixtures").getFile()).getAbsolutePath();
}
public void testActiveQuery_Empty() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
"\\test\\PersonModel::find()->where('<caret>');");
myFixture.completeBasic();
assertEquals(5, myFixture.getLookupElementStrings().size());
}
public void testActiveQuery_Prefix() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
" \\test\\PersonModel::find()->where('per<caret>');");
myFixture.complete(CompletionType.BASIC);
assertEquals("'person'", myFixture.getFile().findElementAt(myFixture.getCaretOffset()).getParent().getText());
}
public void testActiveQuery_SuffixQuotingDbPrefix() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
" \\test\\PersonModel::find()->where('{{%per<caret>');");
myFixture.completeBasic();
assertEquals("'{{%person'", myFixture.getFile().findElementAt(myFixture.getCaretOffset()).getParent().getText());
}
public void testActiveQuery_Columns() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
" \\test\\PersonModel::find()->where('person.<caret>");
myFixture.completeBasic();
assertEquals(3, myFixture.getLookupElementStrings().size());
}
public void testActiveQuery_ColumnPrefix() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
" \\test\\PersonModel::find()->where('person.na<caret>");
myFixture.completeBasic();
assertEquals("name", myFixture.getLookupElementStrings().get(0));
assertEquals("surname", myFixture.getLookupElementStrings().get(1));
}
public void testActiveQuery_TableCompletionWithPrevCondition() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
" \\test\\PersonModel::find()->where('person.name AND per<caret>");
myFixture.completeBasic();
assertEquals("person.name AND person", myFixture.getFile().findElementAt(myFixture.getCaretOffset() - 1).getText());
}
public void testActiveQuery_TableCompletion() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
" \\test\\PersonModel::find()->where('<caret>");
myFixture.completeBasic();
assertEquals(5, myFixture.getLookupElementStrings().size());
}
public void testActiveQuery_ColumnPrefixWithPrevCondition() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
" \\test\\PersonModel::find()->where('person.surname AND person.na<caret>");
myFixture.completeBasic();
assertEquals("name", myFixture.getLookupElementStrings().get(0));
assertEquals("surname", myFixture.getLookupElementStrings().get(1));
}
public void testActiveQuery_ColumnPrefixTableQuoting() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
"var $query = \\test\\PersonModel::find();" +
"$query->where('{{person}}.na<caret>');");
myFixture.completeBasic();
assertEquals("name", myFixture.getLookupElementStrings().get(0));
assertEquals("surname", myFixture.getLookupElementStrings().get(1));
}
public void testActiveQuery_ColumnQuotingAndPrefixTableQuoting() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
" \\test\\PersonModel::find()->where('{{person}}.[[na<caret>');");
myFixture.completeBasic();
assertEquals("name", myFixture.getLookupElementStrings().get(0));
assertEquals("surname", myFixture.getLookupElementStrings().get(1));
}
public void testActiveQuery_ColumnQuotingAndPrefixTableQuotingDoubleQuote() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
" (new \\yii\\db\\Query())->where(\"{{person}}.[[na<caret>\");");
myFixture.completeBasic();
assertEquals("name", myFixture.getLookupElementStrings().get(0));
assertEquals("surname", myFixture.getLookupElementStrings().get(1));
}
public void testActiveQuery_ColumnArray() {
myFixture.configureByText(PhpFileType.INSTANCE, "<?php \n" +
" \\test\\PersonModel::find()->where(['<caret>");
myFixture.completeBasic();
assertEquals(5, myFixture.getLookupElementStrings().size());
}
}