ACS-4633: Duplicated tag is not detected when tag string contains upper case (#1750)

This commit is contained in:
Krystian Dabrowski
2023-02-15 18:13:19 +01:00
committed by GitHub
parent 7c3e8a2549
commit 23de0fefd7
2 changed files with 17 additions and 9 deletions

View File

@@ -128,7 +128,7 @@ public class CreateTagsTests extends RestTest
final String repeatedTagName = getRandomName(TAG_NAME_PREFIX).toLowerCase();
final List<RestTagModel> tagModels = List.of(
createTagModelWithName(repeatedTagName),
createTagModelWithRandomName(),
createTagModelWithName(getRandomName(TAG_NAME_PREFIX).toLowerCase()),
createTagModelWithName(repeatedTagName)
);
@@ -173,13 +173,17 @@ public class CreateTagsTests extends RestTest
public void testCreateTag_usingAlreadyExistingTagName()
{
STEP("Create some tag in the system");
final RestTagModel alreadyExistingTag = prepareOrphanTag();
final RestTagModel tagToCreate = createTagModelWithRandomName();
final RestTagModel alreadyExistingTag = prepareOrphanTag(tagToCreate);
// set original name instead the case lowered one
alreadyExistingTag.setTag(tagToCreate.getTag());
STEP("Try to use already existing tag to create duplicate and expect 409");
restClient.authenticateUser(admin).withCoreAPI().createSingleTag(alreadyExistingTag);
restClient.assertStatusCodeIs(CONFLICT);
restClient.assertLastError().containsSummary("Duplicate child name not allowed: " + alreadyExistingTag.getTag());
restClient
.assertStatusCodeIs(CONFLICT)
.assertLastError().containsSummary("Duplicate child name not allowed: " + alreadyExistingTag.getTag().toLowerCase());
}
/**
@@ -189,7 +193,7 @@ public class CreateTagsTests extends RestTest
public void testCreateTag_includingCount()
{
STEP("Create single tag as admin including count and verify if it is 0");
final RestTagModel tagModel = createTagModelWithRandomName();
final RestTagModel tagModel = createTagModelWithName(getRandomName(TAG_NAME_PREFIX).toLowerCase());
final RestTagModel createdTag = restClient.authenticateUser(admin).withCoreAPI().include(FIELD_COUNT).createSingleTag(tagModel);
restClient.assertStatusCodeIs(CREATED);
@@ -198,9 +202,13 @@ public class CreateTagsTests extends RestTest
.assertThat().field(FIELD_COUNT).is(0);
}
private RestTagModel prepareOrphanTag()
private RestTagModel prepareOrphanTagWithRandomName()
{
return prepareOrphanTag(createTagModelWithRandomName());
}
private RestTagModel prepareOrphanTag(final RestTagModel tagModel)
{
final RestTagModel tagModel = createTagModelWithRandomName();
final RestTagModel tag = restClient.authenticateUser(admin).withCoreAPI().createSingleTag(tagModel);
restClient.assertStatusCodeIs(CREATED);
return tag;
@@ -208,7 +216,7 @@ public class CreateTagsTests extends RestTest
private static RestTagModel createTagModelWithRandomName()
{
return createTagModelWithName(getRandomName(TAG_NAME_PREFIX).toLowerCase());
return createTagModelWithName(getRandomName(TAG_NAME_PREFIX));
}
private static RestTagModel createTagModelWithName(final String tagName)

View File

@@ -1586,11 +1586,11 @@ public class TaggingServiceImpl implements TaggingService,
try
{
return tagNames.stream()
.map(String::toLowerCase)
.peek(tagName -> categoryService.getRootCategories(storeRef, ContentModel.ASPECT_TAGGABLE, tagName, false).stream()
.filter(association -> Objects.nonNull(association.getChildRef()))
.findAny()
.ifPresent(association -> { throw new DuplicateChildNodeNameException(association.getParentRef(), association.getTypeQName(), tagName, null); }))
.map(String::toLowerCase)
.map(tagName -> new Pair<>(tagName, getTagNodeRef(storeRef, tagName, true)))
.collect(Collectors.toList());
}