diff --git a/qlty-cli/tests/cmd/coverage/files_exist.stdout b/qlty-cli/tests/cmd/coverage/files_exist.stdout index 3ec701acb..18ed3c229 100644 --- a/qlty-cli/tests/cmd/coverage/files_exist.stdout +++ b/qlty-cli/tests/cmd/coverage/files_exist.stdout @@ -15,7 +15,8 @@ "cliVersion": "[..]", "publishCommand": "[..]qlty[..] coverage publish --dry-run --override-commit-sha 2ca1bc45a94e37c8dbae6fd9e19fc069ba64bd67 --override-build-id 123 --override-branch main lcov.info --print --json --skip-missing-files --incomplete", "incomplete": true, - "referenceType": "REFERENCE_TYPE_BRANCH" + "referenceType": "REFERENCE_TYPE_BRANCH", + "reference": "refs/heads/main" }, "report_files": [ { diff --git a/qlty-cli/tests/cmd/coverage/json.stdout b/qlty-cli/tests/cmd/coverage/json.stdout index d5e88713a..19ae0ad48 100644 --- a/qlty-cli/tests/cmd/coverage/json.stdout +++ b/qlty-cli/tests/cmd/coverage/json.stdout @@ -17,7 +17,9 @@ "uploaderTool": "qltysh/qlty-action-coverage", "publishCommand": "[..]qlty[..] coverage publish --dry-run --print --json --override-commit-sha 2ca1bc45a94e37c8dbae6fd9e19fc069ba64bd67 --add-prefix rails/ --tag rails --no-validate lcov.info", "uploaderToolVersion": "v1.0.0", - "referenceType": "REFERENCE_TYPE_BRANCH" + "referenceType": "REFERENCE_TYPE_BRANCH", + "reference": "refs/heads/feature-branch-1", + "complete": true }, "report_files": [ { diff --git a/qlty-cli/tests/cmd/coverage/overrides.stdout b/qlty-cli/tests/cmd/coverage/overrides.stdout index 6cd63a0a1..0e71e7890 100644 --- a/qlty-cli/tests/cmd/coverage/overrides.stdout +++ b/qlty-cli/tests/cmd/coverage/overrides.stdout @@ -16,7 +16,9 @@ "uploadedAt": "[..]", "cliVersion": "[..]", "publishCommand": "[..]qlty[..] coverage publish --dry-run --print --json --override-branch test-branch-1 --override-commit-sha 2ca1bc45a94e37c8dbae6fd9e19fc069ba64bd67 --override-pr-number 99 --transform-add-prefix rails/ --tag rails --no-validate lcov.info", - "referenceType": "REFERENCE_TYPE_PULL_REQUEST" + "referenceType": "REFERENCE_TYPE_PULL_REQUEST", + "reference": "refs/pull/99", + "complete": true }, "report_files": [ { diff --git a/qlty-coverage/src/publish/planner.rs b/qlty-coverage/src/publish/planner.rs index cd02345eb..3ecdc54c0 100644 --- a/qlty-coverage/src/publish/planner.rs +++ b/qlty-coverage/src/publish/planner.rs @@ -275,6 +275,27 @@ impl MetadataPlanner { ReferenceType::Unspecified as i32 }; + metadata.reference = match ReferenceType::try_from(metadata.reference_type).ok() { + Some(ReferenceType::PullRequest) if !metadata.pull_request_number.is_empty() => { + format!("refs/pull/{}", metadata.pull_request_number) + } + Some(ReferenceType::Tag) => metadata + .git_tag + .as_ref() + .filter(|git_tag| !git_tag.is_empty()) + .map(|git_tag| format!("refs/tags/{git_tag}")) + .unwrap_or_default(), + Some(ReferenceType::Branch) | Some(ReferenceType::MergeGroup) + if !metadata.branch.is_empty() => + { + format!("refs/heads/{}", metadata.branch) + } + _ => String::new(), + }; + + metadata.complete = !metadata.incomplete + && (metadata.total_parts_count.is_none() || metadata.total_parts_count == Some(1)); + Ok(metadata) } @@ -519,6 +540,55 @@ mod tests { assert_eq!(metadata.pull_request_number, "42"); // Override wins over CI's "99" } + #[test] + fn test_complete_true_by_default() { + let settings = Settings::default(); + let metadata_planner = MetadataPlanner::new(&settings, None); + let metadata = metadata_planner.compute().unwrap(); + + assert!(!metadata.incomplete); + assert!(metadata.complete); + } + + #[test] + fn test_complete_false_when_incomplete_flag_set() { + let settings = Settings { + incomplete: true, + ..Default::default() + }; + let metadata_planner = MetadataPlanner::new(&settings, None); + let metadata = metadata_planner.compute().unwrap(); + + assert!(metadata.incomplete); + assert!(!metadata.complete); + } + + #[test] + fn test_complete_true_with_single_total_part() { + let settings = Settings { + total_parts_count: Some(1), + ..Default::default() + }; + let metadata_planner = MetadataPlanner::new(&settings, None); + let metadata = metadata_planner.compute().unwrap(); + + assert!(!metadata.incomplete); + assert!(metadata.complete); + } + + #[test] + fn test_complete_false_with_multiple_parts_even_without_flag() { + let settings = Settings { + total_parts_count: Some(3), + ..Default::default() + }; + let metadata_planner = MetadataPlanner::new(&settings, None); + let metadata = metadata_planner.compute().unwrap(); + + assert!(!metadata.incomplete); + assert!(!metadata.complete); + } + #[test] fn test_metadata_with_commit_time_override() { let settings = Settings { @@ -768,6 +838,55 @@ mod tests { let metadata = metadata_planner.compute().unwrap(); assert_eq!(metadata.reference_type, ReferenceType::MergeGroup as i32); + assert_eq!( + metadata.reference, + "refs/heads/gh-readonly-queue/main/pr-123" + ); + } + + #[test] + fn test_reference_for_pull_request() { + let settings = Settings { + override_commit_time: Some("1729100000".to_string()), + ..Default::default() + }; + let test_ci = Box::new(TestCI::new()); + let metadata_planner = MetadataPlanner::new(&settings, Some(test_ci)); + let metadata = metadata_planner.compute().unwrap(); + + assert_eq!(metadata.reference_type, ReferenceType::PullRequest as i32); + assert_eq!(metadata.reference, "refs/pull/99"); + } + + #[test] + fn test_reference_for_branch() { + let settings = Settings { + override_pull_request_number: Some(String::new()), + override_git_tag: Some(String::new()), + override_commit_time: Some("1729100000".to_string()), + ..Default::default() + }; + let test_ci = Box::new(TestCI::new()); + let metadata_planner = MetadataPlanner::new(&settings, Some(test_ci)); + let metadata = metadata_planner.compute().unwrap(); + + assert_eq!(metadata.reference_type, ReferenceType::Branch as i32); + assert_eq!(metadata.reference, "refs/heads/test-branch"); + } + + #[test] + fn test_reference_for_tag() { + let settings = Settings { + override_pull_request_number: Some(String::new()), + override_commit_time: Some("1729100000".to_string()), + ..Default::default() + }; + let test_ci = Box::new(TestCI::new()); + let metadata_planner = MetadataPlanner::new(&settings, Some(test_ci)); + let metadata = metadata_planner.compute().unwrap(); + + assert_eq!(metadata.reference_type, ReferenceType::Tag as i32); + assert_eq!(metadata.reference, "refs/tags/v0.1.0"); } #[test]