fix(epics): use actual group_id for save/delete operations on nested epics#3279
fix(epics): use actual group_id for save/delete operations on nested epics#3279JohnVillalovos wants to merge 1 commit intomainfrom
Conversation
There was a problem hiding this comment.
Pull Request Overview
This PR fixes an issue where save() and delete() operations on epics retrieved through a parent group's epic listing would fail because they used the wrong group path. The fix ensures that operations use the epic's actual group_id attribute to construct the correct API path.
- Overrides save() and delete() methods in GroupEpic to use the epic's group_id for API path construction
- Adds helper method
_epic_path()to compute the correct API path using the epic's real group - Adds comprehensive test coverage for both unit and functional scenarios
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| gitlab/v4/objects/epics.py | Implements the fix by overriding save() and delete() methods to use epic's group_id for path construction |
| tests/unit/objects/test_epics.py | Adds unit tests to verify save() and delete() operations use the correct group path |
| tests/functional/api/test_epics.py | Adds functional test demonstrating the fix works for nested epics accessed through parent groups |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
0f7065d to
3e75d60
Compare
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
3e75d60 to
3993fe7
Compare
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
3e855f3 to
27bd80c
Compare
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
27bd80c to
dcc9847
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3279 +/- ##
==========================================
+ Coverage 92.16% 95.77% +3.61%
==========================================
Files 100 100
Lines 6125 6153 +28
==========================================
+ Hits 5645 5893 +248
+ Misses 480 260 -220
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
dcc9847 to
f420862
Compare
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 4 out of 4 changed files in this pull request and generated no new comments.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
f420862 to
a9638ee
Compare
a9638ee to
fb4f902
Compare
fb4f902 to
8397bd0
Compare
|
FYI: This was tested and reported as working #3261 (comment) |
8397bd0 to
45a8599
Compare
45a8599 to
0dd6ab1
Compare
nejch
left a comment
There was a problem hiding this comment.
Thanks @JohnVillalovos, looks good and that's a tricky one. Not sure about lazily fetched epics - just have a few questions there.
0dd6ab1 to
ce876ef
Compare
ce876ef to
0f029e9
Compare
83feda8 to
cfe29a4
Compare
f187c43 to
4702278
Compare
…epics When an epic belonging to a subgroup is retrieved through a parent group's epic listing, save() and delete() operations would fail because they used the parent group's path instead of the epic's actual group_id. Add an internal custom path hook for object save and delete operations, and let UpdateMixin and DeleteMixin accept an explicit `_custom_path` keyword. GroupEpic uses this hook to build mutation paths from the epic's server-provided group_id, so save() and delete() target the epic's owning group. Avoid using parent manager attrs as a fallback for the epic group path. Lazy epics do not have a server-provided group_id, so raise a clear error instead of silently using the parent group path. Add unit coverage for custom update/delete paths, GroupEpic save/delete path selection, and lazy epic path failures. Add a functional test for saving a subgroup epic discovered through the parent group listing. Assisted-by: OpenAI Codex (GPT-5) Closes: #3261
4702278 to
e3d27cc
Compare
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
When an epic belonging to a subgroup is retrieved through a parent
group's epic listing, save() and delete() operations would fail because
they used the parent group's path instead of the epic's actual group_id.
Add an internal custom path hook for object save and delete operations, and let
UpdateMixin and DeleteMixin accept an explicit
_custom_pathkeyword. GroupEpicuses this hook to build mutation paths from the epic's server-provided group_id,
so save() and delete() target the epic's owning group.
Avoid using parent manager attrs as a fallback for the epic group path. Lazy
epics do not have a server-provided group_id, so raise a clear error instead of
silently using the parent group path.
Add unit coverage for custom update/delete paths, GroupEpic save/delete path
selection, and lazy epic path failures. Add a functional test for saving a
subgroup epic discovered through the parent group listing.
Assisted-by: OpenAI Codex (GPT-5)
Closes: #3261