Bugfix Issue 1686 reqtreereorder Back Link Dead Self Reload - sebiboga/testlink-upgraded GitHub Wiki
Bugfix β Issue #1686: reqTreeReorder.html β "Back to specification management" was a dead self-reload in the error state and pointed at the wrong screen otherwise
Number: #1686
Status: Fixed (verified β the fix was already in the default branch; this run pinned it with a regression suite and closed the issue)
Component: gui/templates/requirements/reqTreeReorder.html
Area: Requirements / Specification Tree Reordering
Fixing commit (code): 983c9179c β fix(reqtreereorder): back link was a dead self-reload on the error path (Refs #1681)
Verification commit (this run): 6588d4a18
Two defects in one control.
-
In the error / no-rights state the link pointed at itself. The markup shipped
href="#"and the only code that set a real target ran inside the success handler of theinitAJAX call. On the 403 path ("You are not authorized to view requirements") the href was never written, so the Back to specification management button reloaded the forbidden page in the same tab. The observed URL was literally the current page with a trailing#. -
With data loaded the label lied. When a specification was selected the link was pointed
at
reqSpecView.html(the specification viewer) while the label said Back to specification management, leaving the management screen unreachable from the toolbar.
target="_blank" additionally made a back link open a new tab, unlike the sibling
#mgmtLink in reqSpecView.html.
The root cause is a design error, not a typo: the href of a navigation control was
produced as a side effect of a successful data load. A static .html template cannot
server-render the id (it is not PHP), so the assignment was placed in the AJAX success
handler β which means the control is broken in exactly the state where the user most needs
an escape hatch (403/404).
Root cause chain, as originally shipped:
| Hop | Location | What was wrong |
|---|---|---|
| 1 |
reqTreeReorder.html (markup) |
<a class="btn-ghost" id="backLink" href="#" target="_blank"> β # is "same document", i.e. a self-reload; target="_blank" opens a back link in a new tab. |
| 2 | the only assignment, inside the success: handler of $.ajax(...) in load()
|
The href was never written when the call failed β the 403/404 dead end kept href="#". |
| 3 | same success handler | On success it rewrote the href to reqSpecView.html?id=<SPEC_ID>&tproject_id=<TP> β the viewer β contradicting the "management" label. |
Both defects were fixed by the #1681 modernization run in commit 983c9179c, an ancestor of
the default branch. The implementing run left the issue OPEN (its own body documents the
fix under "Fix applied in the Refs #1681 branch"), so triage kept surfacing it as the oldest
open bug. Nothing was lost in the code; what was lost was the closure step. This run verified
the fix, pinned it with a regression suite and closed the issue.
-
markup
:77β the href is now a real page in the static markup,href="/gui/templates/requirements/reqSpecMgmt.html", andtarget="_blank"is gone. -
:181-186buildBackLink()β derives the target synchronously from the URL query string, with a comment stating the intent ("the escape hatch must work on the error path"). -
:189βbuildBackLink()runs on DOM-ready, beforeTLi18n.load()and beforeload(false)β before any$.ajax. This is the structural guarantee: the href no longer depends on an API response. The:0branch still yields a valid management-screen URL, never'#'; the rewrite is only a refinement that addstproject_id. -
:196-199+:417-424β the dropped "open this specification" target was not lost: it moved to the spec document chip in the Context card, whosedata-hrefpoints atreqSpecView.html?id=<spec>&tproject_id=<tp>and opens in a new tab.
- Touch the file to have a diff β rejected: the code is already correct and verified; any edit is churn and risks re-introducing the defect being certified.
-
Make the fallback project-aware without
tproject_idβ rejected: both entry points (reqSpecMgmt.html:954,:964) always pass it, and the target degrades gracefully without it (rendersTest Project: -, API answers a clean400, no fatal). -
Harden
reqSpecMgmt.htmlagainsttproject_id=0β out of scope, it already degrades cleanly.
| Case | Measured result |
|---|---|
Static markup, before any JS runs (curl + grep -o 'id="backLink"[^>]*') |
id="backLink" href="/gui/templates/requirements/reqSpecMgmt.html" β a real destination, so the link survives a total JS failure |
target="_blank" on the back link |
grep -c _blank β 0
|
| Error / 404 state |
href=/gui/templates/requirements/reqSpecMgmt.html?tproject_id=13, target=null, applyDisabled=true, drag hint hidden β never a self-reload |
| Success state |
href_points_at_viewer:false, rows=2, rowsDraggable=["true","true"] β the href matches its label |
Real .click() on the back link |
navigated in place to β¦/reqSpecMgmt.html?tproject_id=13, same tab |
Spec chip click (tproject_id=14, spec 17) |
new page opened at reqSpecView.html?id=17&tproject_id=14 β the viewer target survived |
| Second test project |
href=β¦reqSpecMgmt.html?tproject_id=14, uses_wrong_project:false β tproject_id follows the URL, never hardcoded |
| No project in context |
href=/gui/templates/requirements/reqSpecMgmt.html, "No test project in context.", target renders Test Project: -, API 400 β no fatal, no blank page |
Event Viewer / events
|
1 row total, the login audit (log_level=16, audit_login_succeeded) β zero Error/Warning rows |
Regression suite: ## Regression β Issue #1686 in tmp/TLU_Test_Cases.md
(cases TC-1686-01..09). Merge-base gate
TLU_REQUIRE_SUITE="Issue #1686" bash ai/verify_test_suites.sh β 7 PASS / 0 FAIL
(suite headings 65 β 66, nothing lost).
- This run:
tmp/TLU_Test_Cases.md(append-only regression suite),docs/Bugfix-Issue-1686-reqtreereorder-Back-Link-Dead-Self-Reload.md, wiki mirror + screenshot. - No production code change in this run β the code fix is
983c9179c.
-
983c9179cβ the actual code fix (Refs #1681), already on the default branch -
6588d4a18β regression suite for this run - docs + wiki mirror commit for this run
See also: Reorder Requirements Tree (reqTreeReorder) Modernized and Bugfix #1685 β drag & drop dirty flag.
Sibling issues from the same #1681 browser-testing pass, all in the same screen, all verified
fixed in the default branch and covered by the same fixture set:
#1687 (hardcoded - "Modified by" tile),
#1688 (toolbar stayed live on the 403/404 page),
#1689 (rows draggable in read-only mode),
#1690 (hardcoded tproject_id in the back link).