Skip to content

Commit 5f64e73

Browse files
committed
MODKBEKBJ-873: Fix missing access status type and tags values when filtering packages
1 parent 08bf4d1 commit 5f64e73

3 files changed

Lines changed: 83 additions & 4 deletions

File tree

‎NEWS.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
* Fix error messages format received from HoldingsIQ. ([MODKBEKBJ-826](https://folio-org.atlassian.net/browse/MODKBEKBJ-826))
2828
* Fix updater not returned on get access-types collection. ([MODKBEKBJ-842](https://folio-org.atlassian.net/browse/MODKBEKBJ-842))
2929
* Return 422 on post package validation errors ([MODKBEKBJ-862](https://folio-org.atlassian.net/browse/MODKBEKBJ-862))
30+
* Fix missing access status type and tags values when filtering packages. ([MODKBEKBJ-863](https://folio-org.atlassian.net/browse/MODKBEKBJ-873))
3031

3132
### Tech Dept
3233
* Set "permissions: contents: read" in maven.yml ([FOLIO-4553](https://folio-org.atlassian.net/browse/FOLIO-4553))

‎src/main/java/org/folio/rest/impl/EholdingsProvidersImpl.java‎

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.folio.rest.impl;
22

3-
import static java.util.Collections.emptyList;
43
import static java.util.concurrent.CompletableFuture.completedFuture;
54
import static org.folio.common.ListUtils.parseByComma;
65
import static org.folio.db.RowSetUtils.toUUID;
@@ -228,12 +227,13 @@ public void getEholdingsProvidersPackagesByProviderId(String providerId, String
228227

229228
var template = templateFactory.createTemplate(okapiHeaders, asyncResultHandler);
230229
if (filter.isTagsFilter()) {
231-
template.requestAction(
232-
context -> filteredEntitiesLoader.fetchPackagesByTagFilter(TagFilter.from(filter), context));
230+
template.requestAction(context -> filteredEntitiesLoader
231+
.fetchPackagesByTagFilter(TagFilter.from(filter), context)
232+
.thenCompose(result -> loadAccessTypes(result, includedObjects, context)));
233233
} else if (filter.isAccessTypeFilter()) {
234234
template.requestAction(context -> filteredEntitiesLoader
235235
.fetchPackagesByAccessTypeFilter(AccessTypeFilter.from(filter), context)
236-
.thenApply(packages -> new PackageCollectionResult(packages, emptyList())));
236+
.thenCompose(packages -> loadTagsAndAccessTypes(packages, includedObjects, context)));
237237
} else {
238238
template.requestAction(retrieveFilteredPackages(parsedProviderId, filter, includedObjects));
239239
}
@@ -255,6 +255,19 @@ private Function<RmApiTemplateContext, CompletableFuture<?>> retrieveFilteredPac
255255
.thenCompose(packages -> loadTagsAndAccessTypes(packages, includedObjects, context));
256256
}
257257

258+
private CompletableFuture<PackageCollectionResult> loadAccessTypes(PackageCollectionResult result,
259+
List<String> includedObjects,
260+
RmApiTemplateContext context) {
261+
if (!includedObjects.contains(ACCESS_TYPE_INCLUDE_PARAM)) {
262+
return completedFuture(result);
263+
}
264+
var packageIds = result.packages().getPackagesList().stream()
265+
.map(packageData -> packageData.getVendorId() + "-" + packageData.getPackageId())
266+
.toList();
267+
return relatedEntitiesLoader.loadAccessTypes(packageIds, RecordType.PACKAGE, context)
268+
.thenApply(accessTypes -> new PackageCollectionResult(result.packages(), result.dbPackages(), accessTypes));
269+
}
270+
258271
private CompletableFuture<PackageCollectionResult> loadTagsAndAccessTypes(Packages packages,
259272
List<String> includedObjects,
260273
RmApiTemplateContext context) {

‎src/test/java/org/folio/rest/impl/EholdingsProvidersImplIntegrationTest.java‎

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,71 @@ void shouldReturnPackagesOnSearchByProviderIdAndAccessTypeWithPagination() {
220220
assertEquals(STUB_PACKAGE_NAME, packages.getFirst().getAttributes().getName());
221221
}
222222

223+
@Test
224+
void shouldReturnTagsAndAccessTypeOnSearchByProviderIdAndAccessTypeWhenIncludeParamPassed() {
225+
var accessTypes = insertAccessTypes(testData(configuration.getId()), vertx);
226+
var expectedAccessTypeId = accessTypes.getFirst().getId();
227+
insertAccessTypeMapping(FULL_PACKAGE_ID, PACKAGE, expectedAccessTypeId, vertx);
228+
saveTag(vertx, FULL_PACKAGE_ID, PACKAGE, STUB_TAG_VALUE);
229+
230+
setUpPackage(vertx, configuration.getId(), STUB_PACKAGE_ID, STUB_VENDOR_ID, STUB_PACKAGE_NAME);
231+
232+
var endpoint = withAccessTypeFilters(PROVIDER_PACKAGES + "?include=accessType", STUB_ACCESS_TYPE_NAME);
233+
var packageItem = getWithOk(endpoint).as(PackageCollection.class).getData().getFirst();
234+
235+
assertThat(packageItem.getAttributes().getTags().getTagList(), containsInAnyOrder(STUB_TAG_VALUE));
236+
assertFalse(packageItem.getIncluded().isEmpty());
237+
assertEquals(expectedAccessTypeId, packageItem.getRelationships().getAccessType().getData().getId());
238+
}
239+
240+
@Test
241+
void shouldReturnTagsButNoAccessTypeOnSearchByProviderIdAndAccessTypeWhenIncludeParamNotPassed() {
242+
var accessTypes = insertAccessTypes(testData(configuration.getId()), vertx);
243+
insertAccessTypeMapping(FULL_PACKAGE_ID, PACKAGE, accessTypes.getFirst().getId(), vertx);
244+
saveTag(vertx, FULL_PACKAGE_ID, PACKAGE, STUB_TAG_VALUE);
245+
246+
setUpPackage(vertx, configuration.getId(), STUB_PACKAGE_ID, STUB_VENDOR_ID, STUB_PACKAGE_NAME);
247+
248+
var endpoint = withAccessTypeFilters(PROVIDER_PACKAGES, STUB_ACCESS_TYPE_NAME);
249+
var packageItem = getWithOk(endpoint).as(PackageCollection.class).getData().getFirst();
250+
251+
assertThat(packageItem.getAttributes().getTags().getTagList(), containsInAnyOrder(STUB_TAG_VALUE));
252+
assertTrue(packageItem.getIncluded().isEmpty());
253+
assertNull(packageItem.getRelationships().getAccessType());
254+
}
255+
256+
@Test
257+
void shouldReturnAccessTypeOnSearchByProviderIdAndTagsWhenIncludeParamPassed() {
258+
var accessTypes = insertAccessTypes(testData(configuration.getId()), vertx);
259+
var expectedAccessTypeId = accessTypes.getFirst().getId();
260+
insertAccessTypeMapping(FULL_PACKAGE_ID, PACKAGE, expectedAccessTypeId, vertx);
261+
saveTag(vertx, FULL_PACKAGE_ID, PACKAGE, STUB_TAG_VALUE);
262+
263+
setUpPackage(vertx, configuration.getId(), STUB_PACKAGE_ID, STUB_VENDOR_ID, STUB_PACKAGE_NAME);
264+
265+
var endpoint = withTagFilters(PROVIDER_PACKAGES + "?include=accessType", STUB_TAG_VALUE);
266+
var packageItem = getWithOk(endpoint).as(PackageCollection.class).getData().getFirst();
267+
268+
assertThat(packageItem.getAttributes().getTags().getTagList(), containsInAnyOrder(STUB_TAG_VALUE));
269+
assertFalse(packageItem.getIncluded().isEmpty());
270+
assertEquals(expectedAccessTypeId, packageItem.getRelationships().getAccessType().getData().getId());
271+
}
272+
273+
@Test
274+
void shouldReturnTagsOnUnfilteredProviderPackagesList() {
275+
saveTag(vertx, FULL_PACKAGE_ID, PACKAGE, STUB_TAG_VALUE);
276+
saveTag(vertx, FULL_PACKAGE_ID, PACKAGE, STUB_TAG_VALUE_2);
277+
setUpPackage(vertx, configuration.getId(), STUB_PACKAGE_ID, STUB_VENDOR_ID, STUB_PACKAGE_NAME);
278+
mockGet(matching(providerPackagesRmApi(STUB_VENDOR_ID) + ".*"),
279+
readFile("responses/rmapi/packages/get-packages-by-provider-id.json"));
280+
281+
var packages = getWithOk(PROVIDER_PACKAGES + "?include=accessType&page=1&count=100")
282+
.as(PackageCollection.class).getData();
283+
284+
assertThat(packages.getFirst().getAttributes().getTags().getTagList(),
285+
containsInAnyOrder(STUB_TAG_VALUE, STUB_TAG_VALUE_2));
286+
}
287+
223288
@Test
224289
void shouldReturnEmptyResponseWhenPackagesReturnedWithErrorOnSearchByAccessType() {
225290
var accessTypes = insertAccessTypes(testData(configuration.getId()), vertx);

0 commit comments

Comments
 (0)