34548 defect tags v2 api silently accepts duplicate tags on both create and import endpoints#34604
Merged
hassandotcms merged 8 commits intomainfrom Feb 17, 2026
Conversation
Both POST /api/v2/tags (create) and POST /api/v2/tags/import silently accepted duplicate tags without reporting them. The root cause was that both endpoints relied on tagAPI.getTagAndCreate(), which returns an existing tag if one already exists — callers could not distinguish new tags from duplicates. Changes: - Create endpoint now pre-checks tag existence via getTagByNameAndHost() and returns separate 'created' and 'duplicates' lists in the response - Import endpoint now tracks duplicateCount separately from successCount; successCount only counts tags that were actually created - Updated Postman tests to match new response contracts
…ct-tags-v2-api-silently-accepts-duplicate-tags-on-both-create-and-import-endpoints
Open
5 tasks
Open
5 tasks
jcastro-dotcms
approved these changes
Feb 11, 2026
fabrizzio-dotCMS
approved these changes
Feb 12, 2026
… import, and update #34548 The duplicate detection in createTags, importTags, and updateTag was checking against the form's siteId instead of the resolved tagStorage host. When a site's tagStorage differs from its own ID (e.g. points to SYSTEM_HOST or another site), duplicates were silently accepted.
… main for updateTag duplicate check
…esource postman test POST /api/v2/tags returns 200, not 201.
…plicate-tags-on-both-create-and-import-endpoints
…plicate-tags-on-both-create-and-import-endpoints
…plicate-tags-on-both-create-and-import-endpoints
dsolistorres
pushed a commit
that referenced
this pull request
Feb 20, 2026
…te and import endpoints (#34604) ### Proposed Changes - POST /api/v2/tags (create) now pre-checks tag existence and returns a response with separate created and duplicates lists instead of silently returning existing tags as if newly created - POST /api/v2/tags/import now tracks duplicateCount separately from successCount, so successCount only reflects tags that were actually created - Updated all Postman test assertions to match the new response contracts ### Checklist - [ ] Tests - [ ] Translations - [ ] Security Implications Contemplated (add notes if applicable) ### Additional Info ** any additional useful context or info ** ### Screenshots Original | Updated :-------------------------:|:-------------------------: ** original screenshot ** | ** updated screenshot ** This PR fixes: #34548 --------- Co-authored-by: Freddy Montes <freddymontes@gmail.com>
hassandotcms
added a commit
that referenced
this pull request
Mar 2, 2026
Fix 3 broken tests (201→200 response contract from #34604). Add 5 UTF-8 tests for create, rename, import, export, round-trip. Register TagResourceIntegrationTest in MainSuite1b for CI.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Proposed Changes
Checklist
Additional Info
** any additional useful context or info **
Screenshots
This PR fixes: #34548
This PR fixes: #34548