Add pull request milestone features
This commit is contained in:
@@ -4,7 +4,7 @@ use crate::{
|
||||
activity,
|
||||
domain::{
|
||||
HistoryCommit, HomeData, IssueDetails, IssueFilter, MilestoneDetails, PullDetails,
|
||||
RepositoryData,
|
||||
PullFilter, RepositoryData,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -91,6 +91,13 @@ pub struct MilestoneRow {
|
||||
pub struct MilestonePage {
|
||||
pub milestone: MilestoneRow,
|
||||
pub issues: Vec<IssueRow>,
|
||||
pub pulls: Vec<PullRow>,
|
||||
}
|
||||
|
||||
#[derive(Clone, uniffi::Record)]
|
||||
pub struct PullFilterOptions {
|
||||
pub milestones: Vec<String>,
|
||||
pub selected_milestone: String,
|
||||
}
|
||||
|
||||
#[derive(Clone, uniffi::Record)]
|
||||
@@ -292,6 +299,20 @@ pub fn milestone_page(details: MilestoneDetails) -> MilestonePage {
|
||||
MilestonePage {
|
||||
milestone: milestone_row(&details.milestone),
|
||||
issues: issue_rows(&details.issues),
|
||||
pulls: pull_rows(&details.pulls),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn pull_filter_options(milestones: &[String], filter: &PullFilter) -> PullFilterOptions {
|
||||
let mut milestones = milestones.to_vec();
|
||||
if !filter.milestone.is_empty() {
|
||||
milestones.push(filter.milestone.clone());
|
||||
}
|
||||
milestones.sort_by_key(|milestone| milestone.to_lowercase());
|
||||
milestones.dedup();
|
||||
PullFilterOptions {
|
||||
milestones,
|
||||
selected_milestone: filter.milestone.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1186,6 +1207,37 @@ mod tests {
|
||||
assert_eq!(options.milestones, ["v1", "v2", "v3"]);
|
||||
assert_eq!(options.selected_labels, ["bug", "retired"]);
|
||||
assert_eq!(options.selected_milestone, "v3");
|
||||
|
||||
let pull_options = pull_filter_options(
|
||||
&["v2".into(), "v1".into()],
|
||||
&PullFilter {
|
||||
milestone: "v3".into(),
|
||||
},
|
||||
);
|
||||
assert_eq!(pull_options.milestones, ["v1", "v2", "v3"]);
|
||||
assert_eq!(pull_options.selected_milestone, "v3");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn milestone_page_includes_linked_pull_requests() {
|
||||
let page = milestone_page(MilestoneDetails {
|
||||
milestone: models::Milestone::default(),
|
||||
issues: Vec::new(),
|
||||
pulls: vec![models::Issue {
|
||||
number: Some(7),
|
||||
title: Some("Linked pull".into()),
|
||||
repository: Some(Box::new(models::RepositoryMeta {
|
||||
name: Some("demo".into()),
|
||||
owner: Some("octo".into()),
|
||||
..Default::default()
|
||||
})),
|
||||
..Default::default()
|
||||
}],
|
||||
});
|
||||
|
||||
assert!(page.issues.is_empty());
|
||||
assert_eq!(page.pulls.len(), 1);
|
||||
assert_eq!(page.pulls[0].number, 7);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user