fix: preserve complete merge request reviews
This commit is contained in:
@@ -210,12 +210,7 @@ impl MergeRequestThreadEvent {
|
|||||||
}
|
}
|
||||||
fn bound_bodies(&mut self) {
|
fn bound_bodies(&mut self) {
|
||||||
match self {
|
match self {
|
||||||
Self::Review(value) => {
|
Self::Review(_) => {}
|
||||||
truncate_body(&mut value.body);
|
|
||||||
for finding in &mut value.findings {
|
|
||||||
truncate_body(&mut finding.body);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Self::ReviewRevoked(value) => truncate_body(&mut value.reason),
|
Self::ReviewRevoked(value) => truncate_body(&mut value.reason),
|
||||||
Self::ReviewCancelled(value) => truncate_body(&mut value.reason),
|
Self::ReviewCancelled(value) => truncate_body(&mut value.reason),
|
||||||
Self::Comment(value) => truncate_body(&mut value.body),
|
Self::Comment(value) => truncate_body(&mut value.body),
|
||||||
@@ -939,10 +934,6 @@ impl MergeRequestStore {
|
|||||||
&self,
|
&self,
|
||||||
i: SubmitMergeRequestReview,
|
i: SubmitMergeRequestReview,
|
||||||
) -> Result<ReviewEvent, MergeRequestError> {
|
) -> Result<ReviewEvent, MergeRequestError> {
|
||||||
bounded_body("review body", &i.body)?;
|
|
||||||
for finding in &i.findings {
|
|
||||||
bounded_body("review finding", &finding.body)?;
|
|
||||||
}
|
|
||||||
let mut c = self.lock()?;
|
let mut c = self.lock()?;
|
||||||
let t = c.transaction()?;
|
let t = c.transaction()?;
|
||||||
let g: Option<(String, String, String, String, String, String)> = t
|
let g: Option<(String, String, String, String, String, String)> = t
|
||||||
|
|||||||
@@ -376,6 +376,49 @@ fn approve_for(
|
|||||||
fn approve(s: &MergeRequestStore, subject: &str, token: &str) -> ReviewEvent {
|
fn approve(s: &MergeRequestStore, subject: &str, token: &str) -> ReviewEvent {
|
||||||
approve_for(s, "MR", "R", subject, token)
|
approve_for(s, "MR", "R", subject, token)
|
||||||
}
|
}
|
||||||
|
#[test]
|
||||||
|
fn review_submission_preserves_long_body_and_findings_on_reload() {
|
||||||
|
for (body, finding_body) in [
|
||||||
|
("b".repeat(16 * 1024 + 1), "finding".into()),
|
||||||
|
("review".into(), "指摘".repeat(4096)),
|
||||||
|
] {
|
||||||
|
let (_dir, store) = fixture();
|
||||||
|
open(&store);
|
||||||
|
request(&store, "source", "token");
|
||||||
|
let findings = vec![ReviewFinding {
|
||||||
|
severity: FindingSeverity::Major,
|
||||||
|
code: None,
|
||||||
|
path: None,
|
||||||
|
line: None,
|
||||||
|
body: finding_body,
|
||||||
|
}];
|
||||||
|
let submitted = store
|
||||||
|
.submit_review(SubmitMergeRequestReview {
|
||||||
|
merge_request_id: "MR".into(),
|
||||||
|
ticket_id: "T".into(),
|
||||||
|
current_subject_ref: "source".into(),
|
||||||
|
capability_token: "token".into(),
|
||||||
|
decision: ReviewDecision::RequestChanges,
|
||||||
|
body: body.clone(),
|
||||||
|
findings: findings.clone(),
|
||||||
|
now: at(4),
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(submitted.body, body);
|
||||||
|
assert_eq!(submitted.findings, findings);
|
||||||
|
let reloaded = store.get_by_id("W", "MR").unwrap();
|
||||||
|
let saved = reloaded
|
||||||
|
.thread
|
||||||
|
.iter()
|
||||||
|
.find_map(|event| match event {
|
||||||
|
MergeRequestThreadEvent::Review(review) => Some(review),
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(saved, &submitted);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn review_submission_authorization_rejects_invalid_grants_before_side_effects() {
|
fn review_submission_authorization_rejects_invalid_grants_before_side_effects() {
|
||||||
let (_d, store) = fixture();
|
let (_d, store) = fixture();
|
||||||
|
|||||||
Reference in New Issue
Block a user