Show milestone and pull request states
This commit is contained in:
@@ -57,6 +57,7 @@ pub struct PullRow {
|
||||
pub number: i64,
|
||||
pub owner: String,
|
||||
pub repository: String,
|
||||
pub state: String,
|
||||
pub title: String,
|
||||
pub summary: String,
|
||||
pub meta: String,
|
||||
@@ -118,6 +119,7 @@ pub struct IssueFilterOptions {
|
||||
#[derive(Clone, uniffi::Record)]
|
||||
pub struct MilestoneRow {
|
||||
pub id: i64,
|
||||
pub state: String,
|
||||
pub title: String,
|
||||
pub description: String,
|
||||
pub meta: String,
|
||||
@@ -156,6 +158,7 @@ pub struct PullFilterOptions {
|
||||
#[derive(Clone, uniffi::Record)]
|
||||
pub struct PullPage {
|
||||
pub title: String,
|
||||
pub state: String,
|
||||
pub meta: String,
|
||||
pub body: String,
|
||||
pub files_ref: String,
|
||||
@@ -443,6 +446,7 @@ pub fn pull_rows(pulls: &[models::Issue]) -> Vec<PullRow> {
|
||||
number: pull.number.unwrap_or_default(),
|
||||
owner: repository.owner.clone()?,
|
||||
repository: repository.name.clone()?,
|
||||
state: pull.state.clone().unwrap_or_else(|| "unknown".into()),
|
||||
title: format!(
|
||||
"{} #{}\n{}",
|
||||
repository.name.as_deref()?,
|
||||
@@ -664,6 +668,7 @@ pub fn pull_page(details: PullDetails) -> PullPage {
|
||||
.title
|
||||
.clone()
|
||||
.unwrap_or_else(|| "Untitled pull request".into()),
|
||||
state: pull.state.clone().unwrap_or_else(|| "unknown".into()),
|
||||
meta: format!(
|
||||
"#{} · {state} · {author} · {head} → {base}\n{} files · +{} −{} · {} comments",
|
||||
pull.number.unwrap_or_default(),
|
||||
@@ -1077,6 +1082,7 @@ fn milestone_row(milestone: &models::Milestone) -> MilestoneRow {
|
||||
.unwrap_or_else(|| "no due date".into());
|
||||
MilestoneRow {
|
||||
id: milestone.id.unwrap_or_default(),
|
||||
state: milestone.state.clone().unwrap_or_else(|| "unknown".into()),
|
||||
title: milestone
|
||||
.title
|
||||
.clone()
|
||||
@@ -1239,6 +1245,7 @@ mod tests {
|
||||
};
|
||||
let milestone_row = milestone_rows(std::slice::from_ref(&milestone)).remove(0);
|
||||
assert_eq!(milestone_row.progress, 0.4);
|
||||
assert_eq!(milestone_row.state, "open");
|
||||
assert_eq!(milestone_row.progress_accessibility, "2 closed, 3 open");
|
||||
let issue = models::Issue {
|
||||
state: Some("closed".into()),
|
||||
@@ -1406,6 +1413,7 @@ mod tests {
|
||||
issues: Vec::new(),
|
||||
pulls: vec![models::Issue {
|
||||
number: Some(7),
|
||||
state: Some("closed".into()),
|
||||
title: Some("Linked pull".into()),
|
||||
repository: Some(Box::new(models::RepositoryMeta {
|
||||
name: Some("demo".into()),
|
||||
@@ -1420,6 +1428,22 @@ mod tests {
|
||||
assert!(page.issues.is_empty());
|
||||
assert_eq!(page.pulls.len(), 1);
|
||||
assert_eq!(page.pulls[0].number, 7);
|
||||
assert_eq!(page.pulls[0].state, "closed");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pull_page_exposes_open_closed_state() {
|
||||
let page = pull_page(PullDetails {
|
||||
pull: models::PullRequest {
|
||||
state: Some("closed".into()),
|
||||
..Default::default()
|
||||
},
|
||||
comments: Vec::new(),
|
||||
files: Vec::new(),
|
||||
has_more: false,
|
||||
});
|
||||
|
||||
assert_eq!(page.state, "closed");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user