feat: resume mobile review progress (#125)
This commit is contained in:
1 parent
c4a9c76781
commit
d8937f0096
5 files changed
+180
-3
No files matched your search
@@ -175,6 +175,7 @@ async def test_pull_review_detail_combines_pr_files_status_and_reviews(monkeypat
|
||||
"repos/stackchain/api/pulls/7/reviews",
|
||||
]
|
||||
assert detail["author"] == "alex"
|
||||
assert detail["head_sha"] == "abc123"
|
||||
assert detail["ci_state"] == "success"
|
||||
assert detail["files"][0]["filename"] == "src/api.py"
|
||||
assert detail["reviews"][0]["state"] == "APPROVED"
|
||||
|
||||
@@ -197,10 +197,69 @@ process.stdout.write(JSON.stringify({{ html, expanded: button.attrs['aria-expand
|
||||
assert '-old <token>' in output["html"]
|
||||
assert '+new & safe' in output["html"]
|
||||
assert 'Preview truncated' in output["html"]
|
||||
assert 'class="review-mark"' in output["html"]
|
||||
assert 'data-review-filename="src/<api>.py"' in output["html"]
|
||||
assert 'Mark reviewed' in output["html"]
|
||||
assert output["expanded"] == "true"
|
||||
assert output["hidden"] is False
|
||||
|
||||
|
||||
def test_review_progress_is_explicit_and_restores_for_the_same_head_sha():
|
||||
script = f"""
|
||||
const reviewSheet = require({json.dumps(str(REVIEW_SHEET))});
|
||||
const values = new Map();
|
||||
const storage = {{
|
||||
getItem(key) {{ return values.has(key) ? values.get(key) : null; }},
|
||||
setItem(key, value) {{ values.set(key, value); }}
|
||||
}};
|
||||
const options = {{
|
||||
storage, repository: 'stackchain/api', number: 7, headSha: 'abc123',
|
||||
files: [{{filename:'src/a.py'}}, {{filename:'src/b.py'}}, {{filename:'README.md'}}]
|
||||
}};
|
||||
const first = reviewSheet.createProgress(options);
|
||||
const before = first.snapshot();
|
||||
const marked = first.markReviewed('src/a.py');
|
||||
const restored = reviewSheet.createProgress(options).snapshot();
|
||||
process.stdout.write(JSON.stringify({{ before, marked, restored }}));
|
||||
"""
|
||||
result = subprocess.run(
|
||||
["node", "-e", script], check=True, capture_output=True, text=True
|
||||
)
|
||||
output = json.loads(result.stdout)
|
||||
|
||||
assert output["before"] == {
|
||||
"reviewed": [], "reviewedCount": 0, "total": 3, "nextFilename": "src/a.py"
|
||||
}
|
||||
assert output["marked"] == {
|
||||
"reviewed": ["src/a.py"], "reviewedCount": 1, "total": 3,
|
||||
"nextFilename": "src/b.py",
|
||||
}
|
||||
assert output["restored"] == output["marked"]
|
||||
|
||||
|
||||
def test_review_progress_resets_when_new_commits_change_the_head_sha():
|
||||
script = f"""
|
||||
const reviewSheet = require({json.dumps(str(REVIEW_SHEET))});
|
||||
const values = new Map();
|
||||
const storage = {{
|
||||
getItem(key) {{ return values.has(key) ? values.get(key) : null; }},
|
||||
setItem(key, value) {{ values.set(key, value); }}
|
||||
}};
|
||||
const base = {{ storage, repository: 'stackchain/api', number: 7, files: [{{filename:'src/a.py'}}] }};
|
||||
reviewSheet.createProgress({{...base, headSha:'abc123'}}).markReviewed('src/a.py');
|
||||
const changed = reviewSheet.createProgress({{...base, headSha:'def456'}}).snapshot();
|
||||
process.stdout.write(JSON.stringify(changed));
|
||||
"""
|
||||
result = subprocess.run(
|
||||
["node", "-e", script], check=True, capture_output=True, text=True
|
||||
)
|
||||
|
||||
assert json.loads(result.stdout) == {
|
||||
"reviewed": [], "reviewedCount": 0, "total": 1,
|
||||
"nextFilename": "src/a.py", "newHead": True,
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_review_requests_open_an_accessible_mobile_detail_sheet():
|
||||
html = await dashboard()
|
||||
@@ -214,6 +273,13 @@ async def test_review_requests_open_an_accessible_mobile_detail_sheet():
|
||||
assert '.review-sheet-panel' in html and 'width:100%' in html
|
||||
assert '.review-action' in html and 'min-height:44px' in html
|
||||
assert '.review-file-toggle' in html and 'min-height:44px' in html
|
||||
assert '.review-mark' in html and 'min-height:44px' in html
|
||||
assert 'id="review-progress"' in html and 'aria-live="polite"' in html
|
||||
assert 'id="next-unreviewed-review"' in html
|
||||
assert '.review-progress-actions' in html and 'position:sticky' in html
|
||||
assert "createReviewController.createProgress" in html
|
||||
assert "progress.markReviewed" in html
|
||||
assert "scrollIntoView" in html
|
||||
assert '.review-diff' in html and 'overflow-x:auto' in html
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user