7
7
use FactorioItemBrowser \Api \Client \Transfer \GenericEntityWithRecipes ;
8
8
use FactorioItemBrowser \Api \Client \Request \Search \SearchQueryRequest ;
9
9
use FactorioItemBrowser \Api \Client \Response \Search \SearchQueryResponse ;
10
+ use FactorioItemBrowser \Api \Database \Entity \Combination ;
11
+ use FactorioItemBrowser \Api \Database \Entity \Mod ;
10
12
use FactorioItemBrowser \Api \Search \Collection \PaginatedResultCollection ;
11
13
use FactorioItemBrowser \Api \Search \Entity \Query ;
12
14
use FactorioItemBrowser \Api \Search \Entity \Result \ResultInterface ;
13
15
use FactorioItemBrowser \Api \Search \SearchManagerInterface ;
14
16
use FactorioItemBrowser \Api \Server \Handler \Search \SearchQueryHandler ;
15
17
use FactorioItemBrowser \Api \Server \Response \ClientResponse ;
16
18
use FactorioItemBrowser \Api \Server \Service \SearchDecoratorService ;
19
+ use FactorioItemBrowser \Api \Server \Service \TrackingService ;
20
+ use FactorioItemBrowser \Api \Server \Tracking \Event \SearchEvent ;
17
21
use PHPUnit \Framework \MockObject \MockObject ;
18
22
use PHPUnit \Framework \TestCase ;
19
23
use Psr \Http \Message \ServerRequestInterface ;
@@ -32,11 +36,14 @@ class SearchQueryHandlerTest extends TestCase
32
36
private SearchDecoratorService $ searchDecoratorService ;
33
37
/** @var SearchManagerInterface&MockObject */
34
38
private SearchManagerInterface $ searchManager ;
39
+ /** @var TrackingService&MockObject */
40
+ private TrackingService $ trackingService ;
35
41
36
42
protected function setUp (): void
37
43
{
38
44
$ this ->searchDecoratorService = $ this ->createMock (SearchDecoratorService::class);
39
45
$ this ->searchManager = $ this ->createMock (SearchManagerInterface::class);
46
+ $ this ->trackingService = $ this ->createMock (TrackingService::class);
40
47
}
41
48
42
49
/**
@@ -51,6 +58,7 @@ private function createInstance(array $mockedMethods = []): SearchQueryHandler
51
58
->setConstructorArgs ([
52
59
$ this ->searchDecoratorService ,
53
60
$ this ->searchManager ,
61
+ $ this ->trackingService ,
54
62
])
55
63
->getMock ();
56
64
}
@@ -65,6 +73,9 @@ public function testHandle(): void
65
73
$ locale = 'def ' ;
66
74
$ countResults = 7331 ;
67
75
76
+ $ combination = new Combination ();
77
+ $ combination ->getMods ()->add (new Mod ());
78
+ $ combination ->getMods ()->add (new Mod ());
68
79
$ searchQuery = $ this ->createMock (Query::class);
69
80
70
81
$ currentSearchResults = [
@@ -96,11 +107,26 @@ public function testHandle(): void
96
107
$ searchResults ->expects ($ this ->once ())
97
108
->method ('count ' )
98
109
->willReturn ($ countResults );
110
+ $ searchResults ->expects ($ this ->any ())
111
+ ->method ('getIsCached ' )
112
+ ->willReturn (true );
113
+
114
+ $ expectedEvent = new SearchEvent ();
115
+ $ expectedEvent ->combinationId = $ combinationId ;
116
+ $ expectedEvent ->modCount = 2 ;
117
+ $ expectedEvent ->locale = $ locale ;
118
+ $ expectedEvent ->queryString = $ query ;
119
+ $ expectedEvent ->resultCount = $ countResults ;
120
+ $ expectedEvent ->cached = true ;
99
121
100
122
$ request = $ this ->createMock (ServerRequestInterface::class);
101
123
$ request ->expects ($ this ->once ())
102
124
->method ('getParsedBody ' )
103
125
->willReturn ($ clientRequest );
126
+ $ request ->expects ($ this ->once ())
127
+ ->method ('getAttribute ' )
128
+ ->with ($ this ->identicalTo (Combination::class))
129
+ ->willReturn ($ combination );
104
130
105
131
$ this ->searchManager ->expects ($ this ->once ())
106
132
->method ('parseQuery ' )
@@ -123,6 +149,16 @@ public function testHandle(): void
123
149
)
124
150
->willReturn ($ decoratedSearchResults );
125
151
152
+ $ this ->trackingService ->expects ($ this ->once ())
153
+ ->method ('addEvent ' )
154
+ ->with ($ this ->callback (function (SearchEvent $ event ) use ($ expectedEvent ): bool {
155
+ $ this ->assertGreaterThan (0 , $ event ->runtime );
156
+ $ event ->runtime = null ;
157
+
158
+ $ this ->assertEquals ($ expectedEvent , $ event );
159
+ return true ;
160
+ }));
161
+
126
162
$ instance = $ this ->createInstance ();
127
163
$ result = $ instance ->handle ($ request );
128
164
0 commit comments