use crate::gifttag::GiftTag;
use crate::patterns::Patterns;
use std::fmt::*;
#[derive(Debug, PartialEq)]
pub struct GiftWrap<T> {
pub contents: T,
pub pattern: Patterns,
pub has_bow: bool,
pub tag: Option<GiftTag>,
}
impl<T> GiftWrap<T> {
pub fn unwrap(self) -> T {
self.contents
}
pub fn read_tag(self) -> String {
match self.tag {
Some(tag) => tag.read(),
None => "There was no tag to read.".to_string(),
}
}
}
#[cfg(test)]
mod test {
use super::*;
use crate::giftbox::GiftBox;
#[test]
fn wrap_gift_box_with_tag() {
let filled_box = GiftBox::fill(Some(["Toys", "Candy", "Money"]));
let tag = GiftTag::write(
"Bob".to_string(),
"Sally".to_string(),
"Happy Cake Day!".to_string(),
);
let wrapped_box = filled_box.wrap(Patterns::Polkadots, true, Some(tag));
assert_eq!(wrapped_box, {
GiftWrap {
contents: { GiftBox::Gifts(["Toys", "Candy", "Money"]) },
pattern: Patterns::Polkadots,
has_bow: true,
tag: Some(GiftTag {
recipient: "Bob".to_string(),
sender: "Sally".to_string(),
message: "Happy Cake Day!".to_string(),
}),
}
})
}
#[test]
fn wrap_and_unwrap_gift_box() {
let filled_box = GiftBox::fill(Some(["Toys", "Candy", "Money"]));
let tag = GiftTag::write(
"Bob".to_string(),
"Sally".to_string(),
"Happy Cake Day!".to_string(),
);
let wrapped_box = filled_box.wrap(Patterns::Polkadots, true, Some(tag));
let unwrapped_box = wrapped_box.unwrap();
assert_eq!(unwrapped_box, filled_box);
}
#[test]
fn wrap_and_open_gift_box_with_tag() {
let filled_box = GiftBox::fill(Some(["Toys", "Candy", "Money"]));
let tag = GiftTag::write(
"Bob".to_string(),
"Sally".to_string(),
"Happy Cake Day!".to_string(),
);
let wrapped_box = filled_box.wrap(Patterns::Polkadots, true, Some(tag));
assert_eq!(wrapped_box.unwrap().open(), ["Toys", "Candy", "Money"]);
}
#[test]
fn write_and_read_tag() {
let filled_box = GiftBox::fill(Some(["Toys", "Candy", "Money"]));
let tag = GiftTag::write(
"Bob".to_string(),
"Sally".to_string(),
"Happy Cake Day!".to_string(),
);
let wrapped_box = filled_box.wrap(Patterns::Polkadots, true, Some(tag));
assert_eq!(
wrapped_box.read_tag(),
"To: Bob,\nFrom: Sally,\nMessage: Happy Cake Day!"
);
}
#[test]
fn attempt_to_read_none_tag() {
let wrapped_nothing = GiftWrap {
contents: (),
pattern: Patterns::KraftPaper,
has_bow: false,
tag: None,
};
assert_eq!(wrapped_nothing.read_tag(), "There was no tag to read.");
}
}