1111
1212use OxidEsales \Eshop \Application \Model \User as EshopModelUser ;
1313use OxidEsales \Eshop \Core \Registry ;
14- use OxidEsales \EshopCommunity \Internal \Container \ContainerFactory ;
1514use OxidEsales \ExamplesModule \Core \Module as ModuleCore ;
1615use OxidEsales \ExamplesModule \Extension \Model \User as ModuleUser ;
1716use OxidEsales \ExamplesModule \Greeting \Controller \GreetingController ;
17+ use OxidEsales \ExamplesModule \Greeting \Service \GreetingMessageServiceInterface ;
1818use OxidEsales \ExamplesModule \Settings \Service \ModuleSettingsServiceInterface ;
1919use OxidEsales \ExamplesModule \Tests \Integration \IntegrationTestCase ;
2020use OxidEsales \ExamplesModule \Tracker \Model \TrackerModel ;
@@ -56,21 +56,47 @@ public function tearDown(): void
5656 */
5757 public function testUpdateGreeting (bool $ hasUser , string $ mode , string $ expected , int $ count ): void
5858 {
59- $ moduleSettings = $ this ->get (ModuleSettingsServiceInterface::class);
60- $ moduleSettings ->saveGreetingMode ($ mode );
61- $ _POST [ModuleCore::OEEM_GREETING_TEMPLATE_VARNAME ] = $ expected ;
59+ $ moduleSettingsServiceStub = $ this ->createStub (ModuleSettingsServiceInterface::class);
60+ $ moduleSettingsServiceStub
61+ ->method ('isPersonalGreetingMode ' )
62+ ->willReturn ($ mode === ModuleSettingsServiceInterface::GREETING_MODE_PERSONAL );
6263
63- $ controller = oxNew (GreetingController::class);
64+ $ trackerStub = $ this ->createMock (TrackerModel::class);
65+ $ trackerStub ->method ('getCount ' )->willReturn ($ count );
66+
67+ $ trackerRepositoryMock = $ this ->createStub (TrackerRepositoryInterface::class);
68+ $ trackerRepositoryMock
69+ ->method ('getTrackerByUserId ' )
70+ ->with (self ::TEST_USER_ID )
71+ ->willReturn ($ trackerStub );
72+
73+ $ greetingServiceMock = $ this ->createMock (GreetingMessageServiceInterface::class);
74+ if ($ hasUser && $ mode === ModuleSettingsServiceInterface::GREETING_MODE_PERSONAL ) {
75+ $ greetingServiceMock
76+ ->method ('saveGreeting ' )
77+ ->willReturnCallback (function (EshopModelUser $ user ) use ($ expected ): bool {
78+ $ user ->assign (['oeemgreeting ' => $ expected ]);
79+ $ user ->save ();
80+ return true ;
81+ });
82+ } else {
83+ $ greetingServiceMock ->expects ($ this ->never ())->method ('saveGreeting ' );
84+ }
85+
86+ $ sut = $ this ->getSut (
87+ moduleSettings: $ moduleSettingsServiceStub ,
88+ trackerRepository: $ trackerRepositoryMock ,
89+ greetingMessageService: $ greetingServiceMock ,
90+ );
6491
6592 if ($ hasUser ) {
66- $ controller ->setUser ($ this ->createTestUser ());
93+ $ sut ->setUser ($ this ->createTestUser ());
6794 }
6895
69- $ controller ->updateGreeting ();
96+ $ sut ->updateGreeting ();
7097
7198 /** @var ModuleUser $user */
72- $ user = oxNew (EshopModelUser::class);
73- $ user ->load (self ::TEST_USER_ID );
99+ $ user = $ this ->loadTestUser ();
74100 $ this ->assertSame ($ expected , $ user ->getPersonalGreeting ());
75101
76102 $ tracker = $ this ->get (TrackerRepositoryInterface::class)
@@ -83,20 +109,34 @@ public function testUpdateGreeting(bool $hasUser, string $mode, string $expected
83109 */
84110 public function testRender (bool $ hasUser , string $ mode , array $ expected ): void
85111 {
86- $ this ->createTestTracker ();
112+ $ this ->createTestTracker ($ expected ['counter ' ]);
113+
114+ $ moduleSettingsServiceStub = $ this ->createStub (ModuleSettingsServiceInterface::class);
115+ $ moduleSettingsServiceStub
116+ ->method ('isPersonalGreetingMode ' )
117+ ->willReturn ($ mode === ModuleSettingsServiceInterface::GREETING_MODE_PERSONAL );
87118
88- $ moduleSettings = $ this ->get (ModuleSettingsServiceInterface ::class);
89- $ moduleSettings -> saveGreetingMode ( $ mode );
119+ $ trackerStub = $ this ->createMock (TrackerModel ::class);
120+ $ trackerStub -> method ( ' getCount ' )-> willReturn ( $ expected [ ' counter ' ] );
90121
91- $ controller = oxNew (GreetingController::class);
122+ $ trackerRepositoryMock = $ this ->createStub (TrackerRepositoryInterface::class);
123+ $ trackerRepositoryMock
124+ ->method ('getTrackerByUserId ' )
125+ ->with (self ::TEST_USER_ID )
126+ ->willReturn ($ trackerStub );
127+
128+ $ sut = $ this ->getSut (
129+ moduleSettings: $ moduleSettingsServiceStub ,
130+ trackerRepository: $ this ->get (TrackerRepositoryInterface::class),
131+ );
92132
93133 if ($ hasUser ) {
94- $ controller ->setUser ($ this ->createTestUser ());
134+ $ sut ->setUser ($ this ->createTestUser ());
95135 }
96136
97- $ this ->assertSame ('@oe_examples_module/templates/greetingtemplate ' , $ controller ->render ());
137+ $ this ->assertSame ('@oe_examples_module/templates/greetingtemplate ' , $ sut ->render ());
98138
99- $ viewData = $ controller ->getViewData ();
139+ $ viewData = $ sut ->getViewData ();
100140 $ this ->assertSame ($ expected ['greeting ' ], $ viewData [ModuleCore::OEEM_GREETING_TEMPLATE_VARNAME ]);
101141 $ this ->assertSame ($ expected ['counter ' ], $ viewData [ModuleCore::OEEM_COUNTER_TEMPLATE_VARNAME ]);
102142 }
@@ -183,16 +223,38 @@ private function createTestUser(): EshopModelUser
183223 return $ user ;
184224 }
185225
186- private function createTestTracker (): void
226+ private function createTestTracker (? int $ count ): void
187227 {
188228 $ tracker = oxNew (TrackerModel::class);
189229 $ tracker ->assign (
190230 [
191231 'oxuserid ' => self ::TEST_USER_ID ,
192232 'oxshopid ' => 1 ,
193- 'oeemcount ' => ' 67 ' ,
233+ 'oeemcount ' => $ count ?? rand ( 1 , 100 ) ,
194234 ]
195235 );
196236 $ tracker ->save ();
197237 }
238+
239+ private function loadTestUser (): EshopModelUser
240+ {
241+ $ user = oxNew (EshopModelUser::class);
242+ $ user ->load (self ::TEST_USER_ID );
243+ return $ user ;
244+ }
245+
246+ private function getSut (
247+ ?ModuleSettingsServiceInterface $ moduleSettings = null ,
248+ ?TrackerRepositoryInterface $ trackerRepository = null ,
249+ ?GreetingMessageServiceInterface $ greetingMessageService = null ,
250+ ): GreetingController {
251+ $ moduleSettings ??= $ this ->createStub (ModuleSettingsServiceInterface::class);
252+ $ trackerRepository ??= $ this ->createStub (TrackerRepositoryInterface::class);
253+ $ greetingMessageService ??= $ this ->createStub (GreetingMessageServiceInterface::class);
254+ return new GreetingController (
255+ moduleSettings: $ moduleSettings ,
256+ trackerRepository: $ trackerRepository ,
257+ greetingService: $ greetingMessageService ,
258+ );
259+ }
198260}
0 commit comments