Skip to content

Commit 7d9d13e

Browse files
author
Vitaliy
authored
Merge branch '1.0.1-develop' into issue-202-Cover-Plugin-DI-XML-generator
2 parents fcb8781 + 8984e1a commit 7d9d13e

File tree

10 files changed

+317
-2
lines changed

10 files changed

+317
-2
lines changed

src/com/magento/idea/magento2plugin/actions/generation/data/ObserverFileData.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
15
package com.magento.idea.magento2plugin.actions.generation.data;
26

37
public class ObserverFileData {
@@ -13,14 +17,14 @@ public ObserverFileData(
1317
String observerClassName,
1418
String observerModule,
1519
String targetEvent,
16-
String pluginClassFqn,
20+
String observerClassFqn,
1721
String namespace
1822
) {
1923
this.observerDirectory = observerDirectory;
2024
this.observerClassName = observerClassName;
2125
this.observerModule = observerModule;
2226
this.targetEvent = targetEvent;
23-
this.observerClassFqn = pluginClassFqn;
27+
this.observerClassFqn = observerClassFqn;
2428
this.namespace = namespace;
2529
}
2630

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
4+
namespace Foo\Bar\Observer;
5+
6+
use Magento\Framework\Event\ObserverInterface;
7+
use Magento\Framework\Event\Observer;
8+
9+
class TestObserver implements ObserverInterface
10+
{
11+
/**
12+
* Observer for test_event
13+
*
14+
* @param Observer $observer
15+
* @return void
16+
*/
17+
public function execute(Observer $observer)
18+
{
19+
$event = $observer->getEvent();
20+
// TODO: Implement observer method.
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0"?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
4+
<event name="test_event">
5+
<observer name="test_observer" instance="Foo\Bar\Observer\Test\TestEventObserver"/>
6+
</event>
7+
<event name="test_event_2">
8+
<observer name="test_observer_2" instance="Foo\Bar\Observer\Test\TestEventObserverTwo"/>
9+
</event>
10+
</config>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0"?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
4+
<event name="test_event">
5+
<observer name="test_observer" instance="Foo\Bar\Observer\Test\TestEventObserver"/>
6+
</event>
7+
</config>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0"?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
4+
<event name="test_event">
5+
<observer name="test_observer" instance="Foo\Bar\Observer\Test\TestEventObserver"/>
6+
</event>
7+
</config>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
4+
namespace Foo\Bar\Plugin;
5+
6+
7+
use Foo\Bar\Service\SimpleService;
8+
9+
class TestPlugin
10+
{
11+
12+
/**
13+
* @param \Foo\Bar\Service\SimpleService $subject
14+
* @param int $param1
15+
* @param string $param2
16+
* @return array
17+
*/
18+
public function beforeExecute(\Foo\Bar\Service\SimpleService $subject, int $param1, string $param2)
19+
{
20+
// TODO: Implement plugin method.
21+
return [$param1, $param2];
22+
}
23+
24+
/**
25+
* @param \Foo\Bar\Service\SimpleService $subject
26+
* @param callable $proceed
27+
* @param int $param1
28+
* @param string $param2
29+
*/
30+
public function aroundExecute(\Foo\Bar\Service\SimpleService $subject, callable $proceed, int $param1, string $param2)
31+
{
32+
// TODO: Implement plugin method.
33+
return $proceed($param1, $param2);
34+
}
35+
36+
/**
37+
* @param \Foo\Bar\Service\SimpleService $subject
38+
* @param $result
39+
* @param int $param1
40+
* @param string $param2
41+
*/
42+
public function afterExecute(\Foo\Bar\Service\SimpleService $subject, $result, int $param1, string $param2)
43+
{
44+
// TODO: Implement plugin method.
45+
return $result;
46+
}
47+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
namespace Foo\Bar\Service;
3+
4+
class SimpleService
5+
{
6+
public function execute(int $param1, string $param2)
7+
{
8+
9+
}
10+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
package com.magento.idea.magento2plugin.actions.generation.generator;
6+
7+
import com.intellij.openapi.project.Project;
8+
import com.intellij.psi.PsiFile;
9+
import com.magento.idea.magento2plugin.actions.generation.data.ObserverFileData;
10+
11+
public class ObserverClassGeneratorTest extends BaseGeneratorTestCase {
12+
13+
public void testGenerateObserverClass()
14+
{
15+
Project project = myFixture.getProject();
16+
ObserverFileData observerData = new ObserverFileData(
17+
"Observer",
18+
"TestObserver",
19+
"Foo_Bar",
20+
"test_event",
21+
"Foo\\Bar\\Observer\\TestObserver",
22+
"Foo\\Bar\\Observer"
23+
);
24+
ObserverClassGenerator observerClassGenerator = new ObserverClassGenerator(
25+
observerData,
26+
project
27+
);
28+
PsiFile observerClassFile = observerClassGenerator.generate("test");
29+
30+
String filePath = this.getFixturePath("TestObserver.php");
31+
PsiFile expectedFile = myFixture.configureByFile(filePath);
32+
33+
assertGeneratedFileIsCorrect(
34+
expectedFile,
35+
"src/app/code/Foo/Bar/Observer",
36+
observerClassFile
37+
);
38+
}
39+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
package com.magento.idea.magento2plugin.actions.generation.generator;
6+
7+
import com.intellij.openapi.project.Project;
8+
import com.intellij.psi.PsiFile;
9+
import com.magento.idea.magento2plugin.actions.generation.data.ObserverEventsXmlData;
10+
import com.magento.idea.magento2plugin.magento.files.ModuleEventsXml;
11+
import com.magento.idea.magento2plugin.magento.packages.File;
12+
import com.magento.idea.magento2plugin.magento.packages.Package;
13+
14+
public class ObserverEventsXmlGeneratorTest extends BaseGeneratorTestCase {
15+
private static final String moduleName = "Foo_Bar";
16+
private static final String moduleDir = "src/app/code/Foo/Bar/";
17+
18+
public void testGenerateEventsXmlInBaseAreaFile() {
19+
String filePath = this.getFixturePath(ModuleEventsXml.FILE_NAME);
20+
PsiFile expectedFile = myFixture.configureByFile(filePath);
21+
Project project = myFixture.getProject();
22+
String area = Package.Areas.base.toString();
23+
PsiFile eventsXml = addEventToEventsXml(
24+
project,
25+
area,
26+
"test_event",
27+
"test_observer",
28+
"Foo\\Bar\\Observer\\Test\\TestEventObserver"
29+
);
30+
31+
assertGeneratedFileIsCorrect(
32+
expectedFile,
33+
moduleDir + Package.MODULE_BASE_AREA_DIR,
34+
eventsXml
35+
);
36+
}
37+
38+
public void testGenerateEventsXmlInAdminhtmlAreaFile() {
39+
String filePath = this.getFixturePath(ModuleEventsXml.FILE_NAME);
40+
PsiFile expectedFile = myFixture.configureByFile(filePath);
41+
Project project = myFixture.getProject();
42+
String area = Package.Areas.adminhtml.toString();
43+
PsiFile eventsXml = addEventToEventsXml(
44+
project,
45+
area,
46+
"test_event",
47+
"test_observer",
48+
"Foo\\Bar\\Observer\\Test\\TestEventObserver"
49+
);
50+
51+
assertGeneratedFileIsCorrect(
52+
expectedFile,
53+
moduleDir + Package.MODULE_BASE_AREA_DIR + File.separator + area,
54+
eventsXml
55+
);
56+
}
57+
58+
public void testAddTwoObserversToOneEventsXml() {
59+
String filePath = this.getFixturePath(ModuleEventsXml.FILE_NAME);
60+
PsiFile expectedFile = myFixture.configureByFile(filePath);
61+
Project project = myFixture.getProject();
62+
addEventToEventsXml(
63+
project,
64+
Package.Areas.frontend.toString(),
65+
"test_event",
66+
"test_observer",
67+
"Foo\\Bar\\Observer\\Test\\TestEventObserver"
68+
);
69+
PsiFile eventsXml = addEventToEventsXml(
70+
project,
71+
Package.Areas.frontend.toString(),
72+
"test_event_2",
73+
"test_observer_2",
74+
"Foo\\Bar\\Observer\\Test\\TestEventObserverTwo"
75+
);
76+
77+
assertGeneratedFileIsCorrect(
78+
expectedFile,
79+
moduleDir + Package.MODULE_BASE_AREA_DIR + File.separator + Package.Areas.frontend.toString(),
80+
eventsXml
81+
);
82+
}
83+
84+
private PsiFile addEventToEventsXml(
85+
Project project,
86+
String area,
87+
String eventName,
88+
String observerName,
89+
String observerClassFqn
90+
) {
91+
ObserverEventsXmlData observerEventsXmlData = new ObserverEventsXmlData(
92+
area,
93+
moduleName,
94+
eventName,
95+
observerName,
96+
observerClassFqn
97+
);
98+
ObserverEventsXmlGenerator observerEventsXmlGenerator = new ObserverEventsXmlGenerator(
99+
observerEventsXmlData,
100+
project
101+
);
102+
103+
return observerEventsXmlGenerator.generate("test");
104+
}
105+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
package com.magento.idea.magento2plugin.actions.generation.generator;
6+
7+
import com.intellij.openapi.project.Project;
8+
import com.intellij.psi.PsiFile;
9+
import com.jetbrains.php.lang.psi.elements.Method;
10+
import com.jetbrains.php.lang.psi.elements.PhpClass;
11+
import com.magento.idea.magento2plugin.actions.generation.data.PluginFileData;
12+
import com.magento.idea.magento2plugin.magento.files.Plugin;
13+
import com.magento.idea.magento2plugin.util.GetPhpClassByFQN;
14+
15+
public class PluginClassGeneratorTest extends BaseGeneratorTestCase {
16+
private static final String targetClassFnq = "Foo\\Bar\\Service\\SimpleService";
17+
private static final String targetMethodName = "execute";
18+
private static final String module = "Foo_Bar";
19+
private static final String pluginNamespace = "Foo\\Bar\\Plugin";
20+
private static final String pluginFqn = "Foo\\Bar\\Plugin\\TestPlugin";
21+
private static final String pluginClassName = "TestPlugin";
22+
private static final String pluginDir = "Plugin";
23+
24+
public void testGeneratePluginClassFile()
25+
{
26+
PsiFile pluginClassFile;
27+
addPluginToTargetClass(Plugin.PluginType.before.toString());
28+
addPluginToTargetClass(Plugin.PluginType.around.toString());
29+
pluginClassFile = addPluginToTargetClass(Plugin.PluginType.after.toString());
30+
31+
String filePath = this.getFixturePath(pluginClassName.concat(".php"));
32+
PsiFile expectedFile = myFixture.configureByFile(filePath);
33+
34+
assertGeneratedFileIsCorrect(
35+
expectedFile,
36+
"src/app/code/Foo/Bar/Plugin",
37+
pluginClassFile
38+
);
39+
}
40+
41+
private PsiFile addPluginToTargetClass(String pluginType)
42+
{
43+
Project project = myFixture.getProject();
44+
PhpClass targetClass = GetPhpClassByFQN.getInstance(project).execute(targetClassFnq);
45+
Method targetMethod = targetClass.findMethodByName(targetMethodName);
46+
47+
PluginFileData pluginClass = new PluginFileData(
48+
pluginDir,
49+
pluginClassName,
50+
pluginType,
51+
module,
52+
targetClass,
53+
targetMethod,
54+
pluginFqn,
55+
pluginNamespace
56+
);
57+
PluginClassGenerator pluginClassGenerator = new PluginClassGenerator(
58+
pluginClass,
59+
project
60+
);
61+
62+
return pluginClassGenerator.generate("test");
63+
}
64+
}

0 commit comments

Comments
 (0)