use super::MOD_PATH;
use super::{characteristic::Characteristic, risk_assessment_result::RiskAssessmentResult};
use crate::common::related_place::RelatedPlaceRefOrValue;
#[cfg(all(feature = "tmf622", feature = "build-V4"))]
use crate::tmf622::product_order_v4::ProductOrderRef;
#[cfg(all(feature = "tmf622", feature = "build-V5"))]
use crate::tmf622::product_order_v5::ProductOrderRef;
use crate::{HasId, Uri};
use serde::{Deserialize, Serialize};
use tmflib_derive::HasId;
pub const CLASS_PATH: &str = "productOrderRiskAssessment";
#[derive(Clone, Default, Debug, Deserialize, HasId, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ProductOrderRiskAssessment {
pub href: Option<Uri>,
pub id: Option<String>,
pub status: Option<String>,
pub place: Option<RelatedPlaceRefOrValue>,
pub risk_assessment_result: Option<RiskAssessmentResult>,
pub product_order: ProductOrderRef,
pub characteristic: Option<Vec<Characteristic>>,
}
impl ProductOrderRiskAssessment {
pub fn new(order: ProductOrderRef) -> ProductOrderRiskAssessment {
ProductOrderRiskAssessment {
product_order: order.clone(),
..ProductOrderRiskAssessment::create()
}
}
pub fn replace_characteristic(
&mut self,
characteristic: Characteristic,
) -> Option<Characteristic> {
match &self.characteristic {
Some(v) => match v.iter().find(|c| c.name == characteristic.name) {
Some(i) => {
let out = i.clone();
Some(out)
}
None => None,
},
None => {
self.characteristic = Some(vec![characteristic]);
None
}
}
}
}
#[cfg(test)]
mod test {
#[cfg(feature = "build-V4")]
use crate::tmf622::product_order_v4::{ProductOrder, ProductOrderRef};
#[cfg(feature = "build-V5")]
use crate::tmf622::product_order_v5::{ProductOrder, ProductOrderRef};
use crate::tmf696::characteristic::Characteristic;
use crate::HasId;
use super::ProductOrderRiskAssessment;
const PORA_JSON: &str = "{
\"id\" : \"PORA123\",
\"status\" : \"New\",
\"productOrder\" : {
\"id\" : \"PO123\",
\"href\" : \"http://example.com/tmf622/order/PO123\",
\"name\" : \"ProductOrderName\"
}
}";
#[test]
fn test_pora_deseralize() {
let pora: ProductOrderRiskAssessment = serde_json::from_str(PORA_JSON).unwrap();
assert_eq!(pora.id.is_some(), true);
assert_eq!(pora.get_id().as_str(), "PORA123");
assert_eq!(pora.status.is_some(), true);
}
#[test]
fn test_pora_new() {
let order = ProductOrderRef::from(&ProductOrder::new());
let pora = ProductOrderRiskAssessment::new(order.clone());
assert_eq!(pora.product_order.id, order.id);
}
#[test]
fn test_pora_replacechar() {
let char1 = Characteristic::new("Char", "Value1");
let char2 = Characteristic::new("Char", "Value2");
let order = ProductOrderRef::from(&ProductOrder::new());
let mut pora = ProductOrderRiskAssessment::new(order.clone());
pora.replace_characteristic(char1);
assert_eq!(pora.characteristic.is_some(), true);
assert_eq!(pora.characteristic.clone().unwrap().len(), 1);
pora.replace_characteristic(char2);
assert_eq!(pora.characteristic.unwrap().len(), 1);
}
}