Skip to content

Commit e8ed4be

Browse files
author
Vitaliy
authored
Merge branch '1.0.1-develop' into 243-adjusting-path-detection
2 parents 2cc7e77 + cddca4a commit e8ed4be

File tree

9 files changed

+293
-0
lines changed

9 files changed

+293
-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: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.actions.generation.generator;
7+
8+
import com.intellij.openapi.project.Project;
9+
import com.intellij.psi.PsiFile;
10+
import com.jetbrains.php.lang.psi.elements.PhpClass;
11+
import com.magento.idea.magento2plugin.actions.generation.data.PreferenceFileData;
12+
import com.magento.idea.magento2plugin.util.GetPhpClassByFQN;
13+
14+
public class PreferenceClassGeneratorTest extends BaseGeneratorTestCase {
15+
private static final String MODULE = "Foo_Bar";
16+
private static final String TARGET_MODEL_ONE_CLASS_FQN = "Foo\\Bar\\Model\\SimpleModelOne";
17+
private static final String TARGET_MODEL_TWO_CLASS_FQN = "Foo\\Bar\\Model\\SimpleModelTwo";
18+
19+
/**
20+
* Test preference class file generation.
21+
*/
22+
public void testGeneratePreferenceClassFile() {
23+
final PsiFile preferenceClassFile = createPreferenceClassFile(
24+
TARGET_MODEL_ONE_CLASS_FQN,
25+
"Model/Override",
26+
"SimpleModelOneOverride",
27+
"Foo\\Bar\\Model\\Override\\SimpleModelOneOverride",
28+
"Foo\\Bar\\Model\\Override",
29+
false
30+
);
31+
final String filePath = this.getFixturePath("SimpleModelOneOverride.php");
32+
final PsiFile expectedFile = myFixture.configureByFile(filePath);
33+
34+
assertGeneratedFileIsCorrect(
35+
expectedFile,
36+
"src/app/code/Foo/Bar/Model/Override",
37+
preferenceClassFile
38+
);
39+
}
40+
41+
/**
42+
* Test preference class file generation with inheritance.
43+
*/
44+
public void testGeneratePreferenceClassFileWithInheritance() {
45+
final PsiFile preferenceClassFile = createPreferenceClassFile(
46+
TARGET_MODEL_TWO_CLASS_FQN,
47+
"Model/Override",
48+
"SimpleModelTwoOverride",
49+
"Foo\\Bar\\Model\\Override\\SimpleModelTwoOverride",
50+
"Foo\\Bar\\Model\\Override",
51+
true
52+
);
53+
final String filePath = this.getFixturePath("SimpleModelTwoOverride.php");
54+
final PsiFile expectedFile = myFixture.configureByFile(filePath);
55+
56+
assertGeneratedFileIsCorrect(
57+
expectedFile,
58+
"src/app/code/Foo/Bar/Model/Override",
59+
preferenceClassFile
60+
);
61+
}
62+
63+
/**
64+
* Create preference class file.
65+
*
66+
* @param targetClassFnq Target Class FQN
67+
* @param preferenceDirectory Preference Directory
68+
* @param preferenceClassName Preference Class Name
69+
* @param preferenceFqn Preference FQN
70+
* @param namespace Namespace
71+
* @param inheritClass Inherit target class
72+
* @return PsiFile
73+
*/
74+
private PsiFile createPreferenceClassFile(
75+
final String targetClassFnq,
76+
final String preferenceDirectory,
77+
final String preferenceClassName,
78+
final String preferenceFqn,
79+
final String namespace,
80+
final Boolean inheritClass
81+
) {
82+
final Project project = myFixture.getProject();
83+
final PhpClass targetClass = GetPhpClassByFQN.getInstance(project).execute(targetClassFnq);
84+
final PreferenceFileData preferenceFileData = new PreferenceFileData(
85+
preferenceDirectory,
86+
preferenceClassName,
87+
MODULE,
88+
targetClass,
89+
preferenceFqn,
90+
namespace,
91+
inheritClass
92+
);
93+
final PreferenceClassGenerator preferenceClassGenerator = new PreferenceClassGenerator(
94+
preferenceFileData,
95+
project
96+
);
97+
98+
return preferenceClassGenerator.generate("test");
99+
}
100+
}
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.actions.generation.generator;
7+
8+
import com.intellij.openapi.project.Project;
9+
import com.intellij.psi.PsiFile;
10+
import com.jetbrains.php.lang.psi.elements.PhpClass;
11+
import com.magento.idea.magento2plugin.actions.generation.data.PreferenceDiXmFileData;
12+
import com.magento.idea.magento2plugin.magento.files.ModuleDiXml;
13+
import com.magento.idea.magento2plugin.magento.packages.File;
14+
import com.magento.idea.magento2plugin.magento.packages.Package;
15+
import com.magento.idea.magento2plugin.util.GetPhpClassByFQN;
16+
17+
public class PreferenceDiXmlGeneratorTest extends BaseGeneratorTestCase {
18+
private static final String MODULE = "Foo_Bar";
19+
private static final String MODULE_DIR = "src/app/code/Foo/Bar/";
20+
private static final String TARGET_MODEL_ONE_CLASS_FQN = "Foo\\Bar\\Model\\SimpleModelOne";
21+
private static final String TARGET_MODEL_TWO_CLASS_FQN = "Foo\\Bar\\Model\\SimpleModelTwo";
22+
private static final String NAMESPACE = "Foo\\Bar\\Model\\Override";
23+
24+
/**
25+
* Test preference DI XML file generation.
26+
*/
27+
public void testGeneratePreferenceDiXml() {
28+
final String area = Package.Areas.base.toString();
29+
final PsiFile preferenceDiXmlFile = addPreferenceDiXml(
30+
TARGET_MODEL_ONE_CLASS_FQN,
31+
"Foo\\Bar\\Model\\Override\\SimpleModelOne",
32+
area
33+
);
34+
35+
final String filePath = this.getFixturePath(ModuleDiXml.FILE_NAME);
36+
final PsiFile expectedFile = myFixture.configureByFile(filePath);
37+
38+
assertGeneratedFileIsCorrect(
39+
expectedFile,
40+
getExpectedDirectory(area),
41+
preferenceDiXmlFile
42+
);
43+
}
44+
45+
/**
46+
* Test preference DI XML file generation for adminhtml area.
47+
*/
48+
public void testGeneratePreferenceDiXmlForAdminhtmlArea() {
49+
final String area = Package.Areas.adminhtml.toString();
50+
final PsiFile preferenceDiXmlFile = addPreferenceDiXml(
51+
TARGET_MODEL_TWO_CLASS_FQN,
52+
"Foo\\Bar\\Model\\Override\\SimpleModelTwo",
53+
area
54+
);
55+
56+
final String filePath = this.getFixturePath(ModuleDiXml.FILE_NAME);
57+
final PsiFile expectedFile = myFixture.configureByFile(filePath);
58+
59+
assertGeneratedFileIsCorrect(
60+
expectedFile,
61+
getExpectedDirectory(area),
62+
preferenceDiXmlFile
63+
);
64+
}
65+
66+
/**
67+
* Test the adding of two preferences to one DI XML file.
68+
*/
69+
public void testAddTwoPreferencesToOneDiXmlFile() {
70+
final String area = Package.Areas.frontend.toString();
71+
addPreferenceDiXml(
72+
TARGET_MODEL_ONE_CLASS_FQN,
73+
"Foo\\Bar\\Model\\Override\\SimpleModelOne",
74+
area
75+
);
76+
final PsiFile preferenceDiXmlFile = addPreferenceDiXml(
77+
TARGET_MODEL_TWO_CLASS_FQN,
78+
"Foo\\Bar\\Model\\Override\\SimpleModelTwo",
79+
area
80+
);
81+
82+
final String filePath = this.getFixturePath(ModuleDiXml.FILE_NAME);
83+
final PsiFile expectedFile = myFixture.configureByFile(filePath);
84+
85+
assertGeneratedFileIsCorrect(
86+
expectedFile,
87+
getExpectedDirectory(area),
88+
preferenceDiXmlFile
89+
);
90+
}
91+
92+
/**
93+
* Add preference to XML file.
94+
*
95+
* @param targetClassFnq Target class FQN
96+
* @param preferenceFqn Preference FQN
97+
* @param area Area
98+
* @return PsiFile
99+
*/
100+
private PsiFile addPreferenceDiXml(
101+
final String targetClassFnq,
102+
final String preferenceFqn,
103+
final String area
104+
) {
105+
final Project project = myFixture.getProject();
106+
final PhpClass targetClass = GetPhpClassByFQN.getInstance(project).execute(targetClassFnq);
107+
final PreferenceDiXmFileData preferenceDiXmlFileData = new PreferenceDiXmFileData(
108+
MODULE,
109+
targetClass,
110+
preferenceFqn,
111+
NAMESPACE,
112+
area
113+
);
114+
final PreferenceDiXmlGenerator moduleXmlGenerator = new PreferenceDiXmlGenerator(
115+
preferenceDiXmlFileData,
116+
project
117+
);
118+
119+
return moduleXmlGenerator.generate("test");
120+
}
121+
122+
/**
123+
* Get expected directory based on provided area.
124+
*
125+
* @param area Area name
126+
* @return String
127+
*/
128+
private String getExpectedDirectory(final String area) {
129+
String expectedDirectory;
130+
131+
if (area.equals(Package.Areas.base.toString())) {
132+
expectedDirectory = MODULE_DIR + Package.MODULE_BASE_AREA_DIR;
133+
} else {
134+
expectedDirectory = MODULE_DIR + Package.MODULE_BASE_AREA_DIR + File.separator + area;
135+
}
136+
137+
return expectedDirectory;
138+
}
139+
}

0 commit comments

Comments
 (0)