Skip to content

Commit

Permalink
OXDEV-8462 Change oxNew factory example
Browse files Browse the repository at this point in the history
  • Loading branch information
TitaKoleva committed Aug 8, 2024
1 parent 8b984e5 commit 412c292
Show file tree
Hide file tree
Showing 11 changed files with 101 additions and 35 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ If you need to extend the shop class chain by overwriting, try to stick to the p
* event subscriber (`OxidEsales\ModuleTemplate\Subscriber\BeforeModelUpdate`)
* model with a database (`OxidEsales\ModuleTemplate\Model\GreetingTracker`)
* DI service examples
* ``oxNew`` object factory example (`OxidEsales\ModuleTemplate\Greeting\Infrastructure\CoreRequestFactory`)
* ``oxNew`` object factory example (`OxidEsales\ModuleTemplate\Infrastructure\UserModelFactory`)

#### Whatever you do, ensure it is covered with tests
* unit/integration test
Expand Down
10 changes: 8 additions & 2 deletions services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ services:
_defaults:
public: false
autowire: true
bind:
OxidEsales\Eshop\Core\Request: '@=service("OxidEsales\\ModuleTemplate\\Core\\Registry").getRequest()'

OxidEsales\ModuleTemplate\Core\Registry:
class: OxidEsales\Eshop\Core\Registry
Expand Down Expand Up @@ -44,5 +46,9 @@ services:
class: OxidEsales\ModuleTemplate\Subscriber\BeforeModelUpdate
tags: [ 'kernel.event_subscriber' ]

OxidEsales\ModuleTemplate\Infrastructure\CoreRequestFactoryInterface:
class: OxidEsales\ModuleTemplate\Infrastructure\CoreRequestFactory
OxidEsales\ModuleTemplate\Infrastructure\UserModelFactoryInterface:
class: OxidEsales\ModuleTemplate\Infrastructure\UserModelFactory

OxidEsales\ModuleTemplate\Service\UserServiceInterface:
class: OxidEsales\ModuleTemplate\Service\UserService
public: true
14 changes: 10 additions & 4 deletions src/Controller/Admin/GreetingAdminController.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?php

/**
* Copyright © MB Arbatos Klubas. All rights reserved.
* Copyright © OXID eSales AG. All rights reserved.
* See LICENSE file for license details.
*/

Expand All @@ -10,17 +10,23 @@
namespace OxidEsales\ModuleTemplate\Controller\Admin;

use OxidEsales\ModuleTemplate\Core\Module as ModuleCore;
use OxidEsales\ModuleTemplate\Model\User;
use OxidEsales\Eshop\Application\Controller\Admin\AdminController;
use OxidEsales\ModuleTemplate\Model\User as TemplateModelUser;
use OxidEsales\ModuleTemplate\Service\UserServiceInterface;
use OxidEsales\ModuleTemplate\Traits\ServiceContainer;

class GreetingAdminController extends AdminController
{
use ServiceContainer;

protected $_sThisTemplate = '@oe_moduletemplate/admin/user_greetings';

public function render()
{
$oUser = oxNew(User::class);
if ($oUser->load($this->getEditObjectId())) {
$userService = $this->getServiceFromContainer(UserServiceInterface::class);
if ($this->getEditObjectId()) {
/** @var TemplateModelUser $oUser */
$oUser = $userService->getUserById($this->getEditObjectId());
$this->addTplParam(ModuleCore::OEMT_ADMIN_GREETING_TEMPLATE_VARNAME, $oUser->getPersonalGreeting());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@

namespace OxidEsales\ModuleTemplate\Infrastructure;

use OxidEsales\Eshop\Core\Request;
use OxidEsales\Eshop\Application\Model\User;

class CoreRequestFactory implements CoreRequestFactoryInterface
class UserModelFactory implements UserModelFactoryInterface
{
/**
* @inheritDoc
*/
public function create(): Request
public function create(): User
{
return oxNew(Request::class);
return oxNew(User::class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@

namespace OxidEsales\ModuleTemplate\Infrastructure;

use OxidEsales\Eshop\Core\Request;
use OxidEsales\Eshop\Application\Model\User;

interface CoreRequestFactoryInterface
interface UserModelFactoryInterface
{
/**
* @return Request
* @return User
*/
public function create(): Request;
public function create(): User;
}
13 changes: 6 additions & 7 deletions src/Service/GreetingMessage.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
namespace OxidEsales\ModuleTemplate\Service;

use OxidEsales\Eshop\Application\Model\User as EshopModelUser;
use OxidEsales\Eshop\Core\Request as EshopRequest;
use OxidEsales\ModuleTemplate\Core\Module as ModuleCore;
use OxidEsales\ModuleTemplate\Infrastructure\CoreRequestFactoryInterface;
use OxidEsales\ModuleTemplate\Model\User as TemplateModelUser;
use OxidEsales\ModuleTemplate\Service\ModuleSettings as ModuleSettingsService;

Expand All @@ -26,16 +26,16 @@ class GreetingMessage
private $settings;

/**
* @var CoreRequestFactoryInterface
* @var EshopRequest
*/
private $coreRequestFactory;
private $request;

public function __construct(
ModuleSettingsService $settings,
CoreRequestFactoryInterface $coreRequestFactory
EshopRequest $request
) {
$this->settings = $settings;
$this->coreRequestFactory = $coreRequestFactory;
$this->request = $request;
}

public function getGreeting(?EshopModelUser $user = null): string
Expand All @@ -59,8 +59,7 @@ public function saveGreeting(EshopModelUser $user): bool

private function getRequestOemtGreeting(): string
{
$coreRequestService = $this->coreRequestFactory->create();
$input = (string)$coreRequestService->getRequestParameter(ModuleCore::OEMT_GREETING_TEMPLATE_VARNAME);
$input = (string)$this->request->getRequestParameter(ModuleCore::OEMT_GREETING_TEMPLATE_VARNAME);

//in real life add some input validation
return (string)substr($input, 0, 253);
Expand Down
38 changes: 38 additions & 0 deletions src/Service/UserService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

/**
* Copyright © OXID eSales AG. All rights reserved.
* See LICENSE file for license details.
*/

declare(strict_types=1);

namespace OxidEsales\ModuleTemplate\Service;

use OxidEsales\Eshop\Application\Model\User as EshopModelUser;
use OxidEsales\ModuleTemplate\Infrastructure\UserModelFactoryInterface;

/**
* @extendable-class
*/
class UserService implements UserServiceInterface
{
/**
* @var UserModelFactoryInterface
*/
private $userModelFactory;

public function __construct(
UserModelFactoryInterface $userModelFactory
) {
$this->userModelFactory = $userModelFactory;
}

public function getUserById(string $userId): EshopModelUser
{
$userModel = $this->userModelFactory->create();
$userModel->load($userId);

return $userModel;
}
}
17 changes: 17 additions & 0 deletions src/Service/UserServiceInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

/**
* Copyright © OXID eSales AG. All rights reserved.
* See LICENSE file for license details.
*/

declare(strict_types=1);

namespace OxidEsales\ModuleTemplate\Service;

use OxidEsales\Eshop\Application\Model\User as EshopModelUser;

interface UserServiceInterface
{
public function getUserById(string $userId): EshopModelUser;
}
10 changes: 5 additions & 5 deletions tests/Integration/Service/GreetingMessageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
namespace OxidEsales\ModuleTemplate\Tests\Integration\Service;

use OxidEsales\Eshop\Application\Model\User as EshopModelUser;
use OxidEsales\Eshop\Core\Request as CoreRequest;
use OxidEsales\ModuleTemplate\Core\Module as ModuleCore;
use OxidEsales\ModuleTemplate\Infrastructure\CoreRequestFactoryInterface;
use OxidEsales\ModuleTemplate\Service\GreetingMessage;
use OxidEsales\ModuleTemplate\Service\ModuleSettings;
use OxidEsales\ModuleTemplate\Tests\Integration\IntegrationTestCase;
Expand All @@ -22,7 +22,7 @@ public function testModuleGenericGreetingModeEmptyUser(): void
{
$service = new GreetingMessage(
$this->getSettingsMock(ModuleSettings::GREETING_MODE_GENERIC),
$this->createMock(CoreRequestFactoryInterface::class)
$this->createStub(CoreRequest::class)
);
$user = oxNew(EshopModelUser::class);

Expand All @@ -33,7 +33,7 @@ public function testModulePersonalGreetingModeEmptyUser(): void
{
$service = new GreetingMessage(
$this->getSettingsMock(),
$this->createMock(CoreRequestFactoryInterface::class)
$this->createStub(CoreRequest::class)
);
$user = oxNew(EshopModelUser::class);

Expand All @@ -44,7 +44,7 @@ public function testModuleGenericGreeting(): void
{
$service = new GreetingMessage(
$this->getSettingsMock(ModuleSettings::GREETING_MODE_GENERIC),
$this->createMock(CoreRequestFactoryInterface::class)
$this->createStub(CoreRequest::class)
);
$user = oxNew(EshopModelUser::class);
$user->setPersonalGreeting('Hi sweetie!');
Expand All @@ -56,7 +56,7 @@ public function testModulePersonalGreeting(): void
{
$service = new GreetingMessage(
$this->getSettingsMock(),
$this->createMock(CoreRequestFactoryInterface::class)
$this->createStub(CoreRequest::class)
);
$user = oxNew(EshopModelUser::class);
$user->setPersonalGreeting('Hi sweetie!');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,21 @@

namespace OxidEsales\ModuleTemplate\Tests\Unit\Infrastructure;

use OxidEsales\ModuleTemplate\Infrastructure\CoreRequestFactory;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\ModuleTemplate\Infrastructure\UserModelFactory;
use PHPUnit\Framework\TestCase;
use OxidEsales\Eshop\Core\Request;

/**
* @covers \OxidEsales\ModuleTemplate\Infrastructure\CoreRequestFactory
* @covers \OxidEsales\ModuleTemplate\Infrastructure\UserModelFactory
*/
class CoreRequestFactoryTest extends TestCase
class UserModelFactoryTest extends TestCase
{
public function testCreateProducesCorrectTypeOfObjects(): void
{
$coreRequestFactoryMock = $this->getMockBuilder(CoreRequestFactory::class)
$coreRequestFactoryMock = $this->getMockBuilder(UserModelFactory::class)
->onlyMethods(['create'])
->getMock();

$this->assertInstanceOf(Request::class, $coreRequestFactoryMock->create());
$this->assertInstanceOf(User::class, $coreRequestFactoryMock->create());
}
}
4 changes: 2 additions & 2 deletions tests/Unit/Service/GreetingMessageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

namespace OxidEsales\ModuleTemplate\Tests\Unit\Service;

use OxidEsales\Eshop\Core\Request as CoreRequest;
use OxidEsales\ModuleTemplate\Core\Module as ModuleCore;
use OxidEsales\ModuleTemplate\Infrastructure\CoreRequestFactoryInterface;
use OxidEsales\ModuleTemplate\Service\GreetingMessage;
use OxidEsales\ModuleTemplate\Service\ModuleSettings;
use PHPUnit\Framework\TestCase;
Expand All @@ -24,7 +24,7 @@ public function testGenericGreetingNoUser(string $mode, string $expected): void
{
$service = new GreetingMessage(
$this->createConfiguredMock(ModuleSettings::class, ['getGreetingMode' => $mode]),
$this->createMock(CoreRequestFactoryInterface::class)
$this->createStub(CoreRequest::class)
);

$this->assertSame($expected, $service->getGreeting());
Expand Down

0 comments on commit 412c292

Please sign in to comment.