Skip to content

Commit 4facb87

Browse files
committed
Handle configurable TL code_support
1 parent a430ee2 commit 4facb87

File tree

3 files changed

+90
-27
lines changed

3 files changed

+90
-27
lines changed

config/titelive-client.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
'times' => env('TITELIVE_CLIENT_BOOK_DIRECTORY_API_RETRY_TIMES', 5),
1515
'sleep_milliseconds' => env('TITELIVE_CLIENT_BOOK_DIRECTORY_API_RETRY_SLEEP_MILLISECONDS', 2000),
1616
],
17+
'params' => [
18+
'code_support' => env('TITELIVE_CLIENT_API_PARAM_CODE_SUPPORT'),
19+
],
1720
],
1821
],
1922
'book_model_class' => \Code16\LaravelTiteliveClient\Models\Book::class,

src/Api/Clients/TiteLive/TiteLiveClient.php

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ private function buildParamsForRequest(): string
173173
{
174174
$this->params['stocks'] = 1;
175175
$this->params['base'] = 'paper';
176-
$this->params['code_support'] = 'T,P,BL';
176+
$this->params['code_support'] = config('titelive-client.book_directory.api.params.code_support'); // 'T,P,BL';
177177

178178
return '?'.http_build_query($this->params);
179179
}
@@ -255,12 +255,17 @@ private function normalizeValue($value, string $param): string
255255
private function makeOneBookFromTiteLiveResult(array $result): ?Book
256256
{
257257
$edition = collect($result['article'] ?? [])
258-
->when(isset($result['gencod']), function ($query) use ($result) {
259-
return $query->where('gencod', $result['gencod']);
260-
})
261-
->filter(function ($edition) {
262-
return in_array($edition['codesupport'] ?? [], ['T', 'P', 'BL']);
263-
})
258+
->when(isset($result['gencod']), fn ($query) => $query
259+
->where('gencod', $result['gencod'])
260+
)
261+
->when(
262+
config('titelive-client.book_directory.api.params.code_support'),
263+
fn (Collection $collection, string $codes) => $collection
264+
->filter(fn (array $edition) => in_array(
265+
$edition['codesupport'] ?? [],
266+
explode(',', $codes)
267+
))
268+
)
264269
->first();
265270

266271
if (! $edition) {
@@ -273,12 +278,15 @@ private function makeOneBookFromTiteLiveResult(array $result): ?Book
273278
private function makeAllEditionsFromTiteLiveResult(array $result): Collection
274279
{
275280
return collect($result['article'])
276-
->filter(function ($edition) {
277-
return in_array($edition['codesupport'] ?? [], ['T', 'P', 'BL']);
278-
})
279-
->map(function ($edition) use ($result) {
280-
return $this->mapBookFromApiResult($result, $edition);
281-
});
281+
->when(
282+
config('titelive-client.book_directory.api.params.code_support'),
283+
fn (Collection $collection, string $codes) => $collection
284+
->filter(fn (array $edition) => in_array(
285+
$edition['codesupport'] ?? [],
286+
explode(',', $codes)
287+
))
288+
)
289+
->map(fn ($edition) => $this->mapBookFromApiResult($result, $edition));
282290
}
283291

284292
private function mapBookFromApiResult(array $book, array $edition): ?Book
@@ -314,10 +322,15 @@ private function mapBookFromApiResult(array $book, array $edition): ?Book
314322
'availability' => $edition['dispo'] ?? 4,
315323
'stock' => $edition['stock'] ?? 0,
316324
'editions' => collect($book['article'] ?? [])
317-
->filter(function ($otherEdition) use ($edition) {
318-
return in_array($otherEdition['codesupport'] ?? [], ['T', 'P', 'BL'])
319-
&& $otherEdition['gencod'] != $edition['gencod'];
320-
})
325+
->filter(fn (array $otherEdition) => $otherEdition['gencod'] != $edition['gencod'])
326+
->when(
327+
config('titelive-client.book_directory.api.params.code_support'),
328+
fn (Collection $collection, string $codes) => $collection
329+
->filter(fn (array $edition) => in_array(
330+
$edition['codesupport'] ?? [],
331+
explode(',', $codes)
332+
))
333+
)
321334
->pluck('gencod')
322335
->values()
323336
->toArray(),

tests/Api/Clients/TiteliveClientTest.php

Lines changed: 57 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,30 @@
3838

3939
expect($result)
4040
->toBeInstanceOf(Book::class)
41-
->and($result->price)->toEqual($this->doFindFixture['oeuvre']['article'][0]['prix'] * 100);
41+
->id->toEqual($this->doFindFixture['oeuvre']['article'][0]['gencod']);
42+
});
43+
44+
it('doesn’t find a book on an unconfigured code_support', function () {
45+
$client = new TiteLiveClient('find.example', 'login.example', '[email protected]', 'pwd');
46+
47+
expect($client
48+
->setParam(BookDirectoryClient::GENCOD, '123')
49+
->doFind()
50+
)->toBeInstanceOf(Book::class);
51+
52+
config()->set('titelive-client.book_directory.api.params.code_support', 'PS,BL');
53+
54+
expect($client
55+
->setParam(BookDirectoryClient::GENCOD, '123')
56+
->doFind()
57+
)->toBeNull();
58+
59+
config()->set('titelive-client.book_directory.api.params.code_support', 'PS,BL,T');
60+
61+
expect($client
62+
->setParam(BookDirectoryClient::GENCOD, '123')
63+
->doFind()
64+
)->toBeInstanceOf(Book::class);
4265
});
4366

4467
it('lists books of a category', function () {
@@ -73,7 +96,7 @@
7396
->setParam(BookDirectoryClient::SEARCH_PAGE, 1)
7497
->setParam(BookDirectoryClient::SEARCH_TOTAL_COUNT, 10)
7598
->setParam(BookDirectoryClient::SEARCH_QUERY, 'my search')
76-
->doSearch(true);
99+
->doSearch(groupEditions: true);
77100

78101
Http::assertSent(function (Request $request) {
79102
return $request->hasHeader('User-Agent', 'qdb/v1.0')
@@ -91,9 +114,10 @@
91114
// Check that the first book has all its editions gencod in ->editions
92115
$this->assertEqualsCanonicalizing(
93116
collect($this->doSearchFixture['result'][0]['article'])
94-
->filter(fn ($edition) => in_array($edition['codesupport'], ['T', 'P'])
95-
&& $edition['gencod'] != $this->doSearchFixture['result'][0]['gencod']
96-
)
117+
// ->filter(fn ($edition) => in_array($edition['codesupport'], ['T', 'P'])
118+
// && $edition['gencod'] != $this->doSearchFixture['result'][0]['gencod']
119+
// )
120+
->filter(fn ($edition) => $edition['gencod'] != $this->doSearchFixture['result'][0]['gencod'])
97121
->pluck('gencod')
98122
->values()
99123
->toArray(),
@@ -107,22 +131,45 @@
107131
$searchResults = $client
108132
->setParam(BookDirectoryClient::SEARCH_AVAILABILITY, 'all')
109133
->setParam(BookDirectoryClient::SEARCH_PAGE, 1)
110-
->setParam(BookDirectoryClient::SEARCH_TOTAL_COUNT, 100)
134+
->setParam(BookDirectoryClient::SEARCH_TOTAL_COUNT, 150)
135+
->setParam(BookDirectoryClient::SEARCH_QUERY, 'my search')
136+
->doSearch();
137+
138+
$editionCount = collect($this->doSearchFixture['result'])
139+
->sum(fn ($book) => collect($book['article'])->count());
140+
141+
expect($searchResults)
142+
->toBeInstanceOf(Collection::class)
143+
->count()->toEqual($editionCount);
144+
145+
collect($this->doSearchFixture['result'][0]['article'])
146+
->pluck('gencod')
147+
->values()
148+
->each(fn ($gencod, $index) => expect($searchResults[$index]->id)->toEqual($gencod));
149+
});
150+
151+
it('filters search results on code_support when configured', function () {
152+
$client = new TiteLiveClient('search.example', 'login.example', '[email protected]', 'pwd');
153+
154+
config()->set('titelive-client.book_directory.api.params.code_support', 'T,P');
155+
156+
$searchResults = $client
157+
->setParam(BookDirectoryClient::SEARCH_AVAILABILITY, 'all')
158+
->setParam(BookDirectoryClient::SEARCH_PAGE, 1)
159+
->setParam(BookDirectoryClient::SEARCH_TOTAL_COUNT, 150)
111160
->setParam(BookDirectoryClient::SEARCH_QUERY, 'my search')
112161
->doSearch();
113162

114163
$editionCount = collect($this->doSearchFixture['result'])
115164
->sum(function ($book) {
116165
return collect($book['article'])
117-
->filter(function ($edition) {
118-
return in_array($edition['codesupport'], ['T', 'P']);
119-
})
166+
->filter(fn ($edition) => in_array($edition['codesupport'], ['T', 'P']))
120167
->count();
121168
});
122169

123170
expect($searchResults)
124171
->toBeInstanceOf(Collection::class)
125-
->and($searchResults->count())->toEqual($editionCount);
172+
->count()->toEqual($editionCount);
126173

127174
collect($this->doSearchFixture['result'][0]['article'])
128175
->filter(fn ($edition) => in_array($edition['codesupport'], ['T', 'P']))

0 commit comments

Comments
 (0)