Skip to content

Commit

Permalink
its: Added IssueBlockLink entity
Browse files Browse the repository at this point in the history
  • Loading branch information
bouzuya committed Feb 22, 2022
1 parent 43c9ffe commit ade0339
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
2 changes: 2 additions & 0 deletions its/crates/domain/src/domain/entity.rs
@@ -1,3 +1,5 @@
mod issue;
mod issue_block_link;

pub use self::issue::*;
pub use self::issue_block_link::*;
60 changes: 60 additions & 0 deletions its/crates/domain/src/domain/entity/issue_block_link.rs
@@ -0,0 +1,60 @@
use crate::{IssueBlockLinkId, IssueBlockLinkStatus, IssueId};

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct IssueBlockLink {
id: IssueBlockLinkId,
status: IssueBlockLinkStatus,
}

impl IssueBlockLink {
pub(crate) fn new(id: IssueBlockLinkId) -> Self {
Self {
id,
status: IssueBlockLinkStatus::Blocked,
}
}

pub fn issue_id(&self) -> &IssueId {
self.id.issue_id()
}

pub fn blocked_issue_id(&self) -> &IssueId {
self.id.blocked_issue_id()
}

pub fn is_blocked(&self) -> bool {
self.status == IssueBlockLinkStatus::Blocked
}

pub(crate) fn block(&mut self) {
self.status = IssueBlockLinkStatus::Blocked;
}

pub(crate) fn unblock(&mut self) {
self.status = IssueBlockLinkStatus::Unblocked;
}
}

#[cfg(test)]
mod tests {
use std::str::FromStr;

use super::*;

#[test]
fn test() -> anyhow::Result<()> {
let id = IssueBlockLinkId::from_str("1 -> 2")?;
let mut link = IssueBlockLink::new(id.clone());
assert_eq!(link.issue_id(), id.issue_id());
assert_eq!(link.blocked_issue_id(), id.blocked_issue_id());
assert!(link.is_blocked());

link.unblock();
assert!(!link.is_blocked());

link.block();
assert!(link.is_blocked());

Ok(())
}
}

0 comments on commit ade0339

Please sign in to comment.