review try-out: show why the open-PR button is disabled
The form's one hint put the PR number first, so with the PR field empty (which opening a PR doesn't need) it hid the repo or row problem that was actually disabling the open-PR button. runProblem now checks the rows first and the PR number last, and is tested. Refs #5259
This commit is contained in:
parent
c90bd705a7
commit
be2e64fa89
3 changed files with 28 additions and 3 deletions
|
|
@ -41,6 +41,7 @@ import {
|
||||||
prNumber,
|
prNumber,
|
||||||
repoProblem,
|
repoProblem,
|
||||||
rowsProblem,
|
rowsProblem,
|
||||||
|
runProblem,
|
||||||
toBody,
|
toBody,
|
||||||
type ClassificationDraft,
|
type ClassificationDraft,
|
||||||
type OpenPrAnswer,
|
type OpenPrAnswer,
|
||||||
|
|
@ -218,9 +219,7 @@ export function ReviewTryOutPage() {
|
||||||
}, [runId]);
|
}, [runId]);
|
||||||
|
|
||||||
const openPrProblem = rowsProblem(repo, drafts);
|
const openPrProblem = rowsProblem(repo, drafts);
|
||||||
const problem =
|
const problem = runProblem(repo, pr, drafts);
|
||||||
(prNumber(pr) === null ? "a PR number is a whole number above 0" : null) ??
|
|
||||||
openPrProblem;
|
|
||||||
|
|
||||||
async function run(e: Event) {
|
async function run(e: Event) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
|
||||||
|
|
@ -164,6 +164,21 @@ export function rowsProblem(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** What keeps the rows from a run, or null: everything `rowsProblem` checks,
|
||||||
|
* then the PR number. The page shows this one reason for both of its buttons,
|
||||||
|
* so whatever disables opening a PR comes before the PR number it doesn't
|
||||||
|
* need. */
|
||||||
|
export function runProblem(
|
||||||
|
repo: string,
|
||||||
|
pr: string,
|
||||||
|
drafts: ClassificationDraft[],
|
||||||
|
): string | null {
|
||||||
|
return (
|
||||||
|
rowsProblem(repo, drafts) ??
|
||||||
|
(prNumber(pr) === null ? "a PR number is a whole number above 0" : null)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export function toBody(d: ClassificationDraft): ClassificationBody {
|
export function toBody(d: ClassificationDraft): ClassificationBody {
|
||||||
return {
|
return {
|
||||||
name: d.name.trim(),
|
name: d.name.trim(),
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import {
|
||||||
prNumber,
|
prNumber,
|
||||||
repoProblem,
|
repoProblem,
|
||||||
rowsProblem,
|
rowsProblem,
|
||||||
|
runProblem,
|
||||||
thresholdValue,
|
thresholdValue,
|
||||||
toBody,
|
toBody,
|
||||||
} from "../src/pages/review-tryout/TryOutTypes.ts";
|
} from "../src/pages/review-tryout/TryOutTypes.ts";
|
||||||
|
|
@ -130,3 +131,13 @@ test("only a typed name or description counts as the user's work", () => {
|
||||||
assert.equal(hasTypedText([row({ name: " ", description: "" })]), false);
|
assert.equal(hasTypedText([row({ name: " ", description: "" })]), false);
|
||||||
assert.equal(hasTypedText([row({ name: "", description: "x" })]), true);
|
assert.equal(hasTypedText([row({ name: "", description: "x" })]), true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("the page's one hint names what disables opening a PR before the PR number", () => {
|
||||||
|
// No PR number and a bad row: the row is what disables both buttons.
|
||||||
|
assert.match(runProblem("o/r", "", [row({ name: "" })]), /a name/);
|
||||||
|
assert.match(runProblem("o", "", [row()]), /owner\/name/);
|
||||||
|
// Rows ready but no PR number: only the run is held back.
|
||||||
|
assert.match(runProblem("o/r", "", [row()]), /PR number/);
|
||||||
|
assert.equal(rowsProblem("o/r", [row()]), null);
|
||||||
|
assert.equal(runProblem("o/r", "7", [row()]), null);
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue