use crate::composition_objects::types::TriggerAction;
use crate::validators::*;
use serde::Serialize;
use slack_messaging_derive::Builder;
#[derive(Debug, Clone, Serialize, PartialEq, Builder)]
pub struct DispatchActionConfiguration {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(push_item = "trigger_action", validate("list::not_empty"))]
pub(crate) trigger_actions_on: Option<Vec<TriggerAction>>,
}
#[cfg(test)]
mod tests {
use super::*;
use crate::errors::*;
#[test]
fn it_implements_builder() {
let expected = DispatchActionConfiguration {
trigger_actions_on: Some(vec![
TriggerAction::OnEnterPressed,
TriggerAction::OnCharacterEntered,
]),
};
let config = DispatchActionConfiguration::builder()
.set_trigger_actions_on(Some(vec![
TriggerAction::OnEnterPressed,
TriggerAction::OnCharacterEntered,
]))
.build()
.unwrap();
assert_eq!(config, expected);
let config = DispatchActionConfiguration::builder()
.trigger_actions_on(vec![
TriggerAction::OnEnterPressed,
TriggerAction::OnCharacterEntered,
])
.build()
.unwrap();
assert_eq!(config, expected);
}
#[test]
fn it_implements_push_item_method() {
let expected = DispatchActionConfiguration {
trigger_actions_on: Some(vec![
TriggerAction::OnEnterPressed,
TriggerAction::OnCharacterEntered,
]),
};
let config = DispatchActionConfiguration::builder()
.trigger_action(TriggerAction::OnEnterPressed)
.trigger_action(TriggerAction::OnCharacterEntered)
.build()
.unwrap();
assert_eq!(config, expected);
}
#[test]
fn it_requires_trigger_actions_on_field_not_empty() {
let err = DispatchActionConfiguration::builder()
.trigger_actions_on(vec![])
.build()
.unwrap_err();
assert_eq!(err.object(), "DispatchActionConfiguration");
let errors = err.field("trigger_actions_on");
assert!(errors.includes(ValidationErrorKind::EmptyArray));
}
}