Skip to content

Commit 5739478

Browse files
author
Sergiy Zhovnir
committed
#issue-203-204 Added test coverage for class preference generator and preference di.xml generator
1 parent f1cf7d2 commit 5739478

File tree

9 files changed

+243
-0
lines changed

9 files changed

+243
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
namespace Foo\Bar\Model\Override;
4+
5+
class SimpleModelOneOverride
6+
{
7+
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace Foo\Bar\Model\Override;
4+
5+
use Foo\Bar\Model\SimpleModelTwo;
6+
7+
class SimpleModelTwoOverride extends SimpleModelTwo
8+
{
9+
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0"?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
4+
<preference for="Foo\Bar\Model\SimpleModelOne" type="Foo\Bar\Model\Override\SimpleModelOne"/>
5+
<preference for="Foo\Bar\Model\SimpleModelTwo" type="Foo\Bar\Model\Override\SimpleModelTwo"/>
6+
</config>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0"?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
4+
<preference for="Foo\Bar\Model\SimpleModelOne" type="Foo\Bar\Model\Override\SimpleModelOne"/>
5+
</config>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0"?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
4+
<preference for="Foo\Bar\Model\SimpleModelTwo" type="Foo\Bar\Model\Override\SimpleModelTwo"/>
5+
</config>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace Foo\Bar\Model;
4+
5+
class SimpleModelOne
6+
{
7+
public function execute()
8+
{
9+
}
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace Foo\Bar\Model;
4+
5+
class SimpleModelTwo
6+
{
7+
public function execute()
8+
{
9+
}
10+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.magento.idea.magento2plugin.actions.generation.generator;
2+
3+
import com.intellij.openapi.project.Project;
4+
import com.intellij.psi.PsiFile;
5+
import com.jetbrains.php.lang.psi.elements.PhpClass;
6+
import com.magento.idea.magento2plugin.actions.generation.data.PreferenceFileData;
7+
import com.magento.idea.magento2plugin.util.GetPhpClassByFQN;
8+
9+
public class PreferenceClassGeneratorTest extends BaseGeneratorTestCase {
10+
private static final String module = "Foo_Bar";
11+
private static final String targetSimpleModelOneClassFqn = "Foo\\Bar\\Model\\SimpleModelOne";
12+
private static final String targetSimpleModelTwoClassFqn = "Foo\\Bar\\Model\\SimpleModelTwo";
13+
14+
public void testGeneratePreferenceClassFile()
15+
{
16+
PsiFile preferenceClassFile = createPreferenceClassFile(
17+
targetSimpleModelOneClassFqn,
18+
"Model/Override",
19+
"SimpleModelOneOverride",
20+
"Foo\\Bar\\Model\\Override\\SimpleModelOneOverride",
21+
"Foo\\Bar\\Model\\Override",
22+
false
23+
);
24+
String filePath = this.getFixturePath("SimpleModelOneOverride.php");
25+
PsiFile expectedFile = myFixture.configureByFile(filePath);
26+
27+
assertGeneratedFileIsCorrect(
28+
expectedFile,
29+
"src/app/code/Foo/Bar/Model/Override",
30+
preferenceClassFile
31+
);
32+
}
33+
34+
public void testGeneratePreferenceClassFileWithInheritance()
35+
{
36+
PsiFile preferenceClassFile = createPreferenceClassFile(
37+
targetSimpleModelTwoClassFqn,
38+
"Model/Override",
39+
"SimpleModelTwoOverride",
40+
"Foo\\Bar\\Model\\Override\\SimpleModelTwoOverride",
41+
"Foo\\Bar\\Model\\Override",
42+
true
43+
);
44+
String filePath = this.getFixturePath("SimpleModelTwoOverride.php");
45+
PsiFile expectedFile = myFixture.configureByFile(filePath);
46+
47+
assertGeneratedFileIsCorrect(
48+
expectedFile,
49+
"src/app/code/Foo/Bar/Model/Override",
50+
preferenceClassFile
51+
);
52+
}
53+
54+
private PsiFile createPreferenceClassFile(
55+
String targetClassFnq,
56+
String preferenceDirectory,
57+
String preferenceClassName,
58+
String preferenceFqn,
59+
String namespace,
60+
Boolean inheritClass
61+
) {
62+
Project project = myFixture.getProject();
63+
PhpClass targetClass = GetPhpClassByFQN.getInstance(project).execute(targetClassFnq);
64+
PreferenceFileData preferenceFileData = new PreferenceFileData(
65+
preferenceDirectory,
66+
preferenceClassName,
67+
module,
68+
targetClass,
69+
preferenceFqn,
70+
namespace,
71+
inheritClass
72+
);
73+
PreferenceClassGenerator preferenceClassGenerator = new PreferenceClassGenerator(preferenceFileData, project);
74+
75+
return preferenceClassGenerator.generate("test");
76+
}
77+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package com.magento.idea.magento2plugin.actions.generation.generator;
2+
3+
import com.intellij.openapi.project.Project;
4+
import com.intellij.psi.PsiFile;
5+
import com.jetbrains.php.lang.psi.elements.PhpClass;
6+
import com.magento.idea.magento2plugin.actions.generation.data.PreferenceDiXmFileData;
7+
import com.magento.idea.magento2plugin.magento.files.ModuleDiXml;
8+
import com.magento.idea.magento2plugin.magento.packages.File;
9+
import com.magento.idea.magento2plugin.magento.packages.Package;
10+
import com.magento.idea.magento2plugin.util.GetPhpClassByFQN;
11+
12+
public class PreferenceDiXmlGeneratorTest extends BaseGeneratorTestCase {
13+
private static final String module = "Foo_Bar";
14+
private static final String moduleDir = "src/app/code/Foo/Bar/";
15+
private static final String targetSimpleModelOneClassFqn = "Foo\\Bar\\Model\\SimpleModelOne";
16+
private static final String targetSimpleModelTwoClassFqn = "Foo\\Bar\\Model\\SimpleModelTwo";
17+
18+
public void testGeneratePreferenceDiXml()
19+
{
20+
String area = Package.Areas.base.toString();
21+
PsiFile preferenceDiXmlFile = addPreferenceDiXml(
22+
targetSimpleModelOneClassFqn,
23+
"Foo\\Bar\\Model\\Override\\SimpleModelOne",
24+
area,
25+
"Foo\\Bar\\Model\\Override"
26+
);
27+
28+
String filePath = this.getFixturePath(ModuleDiXml.FILE_NAME);
29+
PsiFile expectedFile = myFixture.configureByFile(filePath);
30+
31+
assertGeneratedFileIsCorrect(
32+
expectedFile,
33+
getExpectedDirectory(area),
34+
preferenceDiXmlFile
35+
);
36+
}
37+
38+
public void testGeneratePreferenceDiXmlForAdminhtmlArea()
39+
{
40+
String area = Package.Areas.adminhtml.toString();
41+
PsiFile preferenceDiXmlFile = addPreferenceDiXml(
42+
targetSimpleModelTwoClassFqn,
43+
"Foo\\Bar\\Model\\Override\\SimpleModelTwo",
44+
area,
45+
"Foo\\Bar\\Model\\Override"
46+
);
47+
48+
String filePath = this.getFixturePath(ModuleDiXml.FILE_NAME);
49+
PsiFile expectedFile = myFixture.configureByFile(filePath);
50+
51+
assertGeneratedFileIsCorrect(
52+
expectedFile,
53+
getExpectedDirectory(area),
54+
preferenceDiXmlFile
55+
);
56+
}
57+
58+
public void testAddTwoPreferencesToOneDiXmlFile()
59+
{
60+
String area = Package.Areas.frontend.toString();
61+
addPreferenceDiXml(
62+
targetSimpleModelOneClassFqn,
63+
"Foo\\Bar\\Model\\Override\\SimpleModelOne",
64+
area,
65+
"Foo\\Bar\\Model\\Override"
66+
);
67+
PsiFile preferenceDiXmlFile = addPreferenceDiXml(
68+
targetSimpleModelTwoClassFqn,
69+
"Foo\\Bar\\Model\\Override\\SimpleModelTwo",
70+
area,
71+
"Foo\\Bar\\Model\\Override"
72+
);
73+
74+
String filePath = this.getFixturePath(ModuleDiXml.FILE_NAME);
75+
PsiFile expectedFile = myFixture.configureByFile(filePath);
76+
77+
assertGeneratedFileIsCorrect(
78+
expectedFile,
79+
getExpectedDirectory(area),
80+
preferenceDiXmlFile
81+
);
82+
}
83+
84+
private PsiFile addPreferenceDiXml(
85+
String targetClassFnq,
86+
String preferenceFqn,
87+
String area,
88+
String namespace
89+
) {
90+
Project project = myFixture.getProject();
91+
PhpClass targetClass = GetPhpClassByFQN.getInstance(project).execute(targetClassFnq);
92+
PreferenceDiXmFileData preferenceDiXmlFileData = new PreferenceDiXmFileData(
93+
module,
94+
targetClass,
95+
preferenceFqn,
96+
namespace,
97+
area
98+
);
99+
PreferenceDiXmlGenerator moduleXmlGenerator = new PreferenceDiXmlGenerator(preferenceDiXmlFileData, project);
100+
101+
return moduleXmlGenerator.generate("test");
102+
}
103+
104+
private String getExpectedDirectory(String area)
105+
{
106+
if (area.equals(Package.Areas.base.toString())) {
107+
return moduleDir + Package.MODULE_BASE_AREA_DIR;
108+
}
109+
110+
return moduleDir + Package.MODULE_BASE_AREA_DIR + File.separator + area;
111+
}
112+
}

0 commit comments

Comments
 (0)