use super::{Pallet as CollectiveContent, *};
use frame_benchmarking::v2::*;
use frame_support::traits::EnsureOrigin;
fn assert_last_event<T: Config<I>, I: 'static>(generic_event: <T as Config<I>>::RuntimeEvent) {
frame_system::Pallet::<T>::assert_last_event(generic_event.into());
}
fn create_cid(i: u8) -> OpaqueCid {
let cid: OpaqueCid = [i; 68].to_vec().try_into().unwrap();
cid
}
#[instance_benchmarks]
mod benchmarks {
use super::*;
#[benchmark]
fn set_charter() -> Result<(), BenchmarkError> {
let cid: OpaqueCid = create_cid(1);
let origin =
T::CharterOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?;
#[extrinsic_call]
_(origin as T::RuntimeOrigin, cid.clone());
assert_eq!(Charter::<T, I>::get(), Some(cid.clone()));
assert_last_event::<T, I>(Event::NewCharterSet { cid }.into());
Ok(())
}
#[benchmark]
fn announce() -> Result<(), BenchmarkError> {
let expire_at = DispatchTime::<_>::At(10u32.into());
let now = frame_system::Pallet::<T>::block_number();
let cid: OpaqueCid = create_cid(1);
let origin = T::AnnouncementOrigin::try_successful_origin()
.map_err(|_| BenchmarkError::Weightless)?;
#[extrinsic_call]
_(origin as T::RuntimeOrigin, cid.clone(), Some(expire_at));
assert_eq!(<Announcements<T, I>>::count(), 1);
assert_last_event::<T, I>(
Event::AnnouncementAnnounced { cid, expire_at: expire_at.evaluate(now) }.into(),
);
Ok(())
}
#[benchmark]
fn remove_announcement() -> Result<(), BenchmarkError> {
let cid: OpaqueCid = create_cid(1);
let origin = T::AnnouncementOrigin::try_successful_origin()
.map_err(|_| BenchmarkError::Weightless)?;
CollectiveContent::<T, I>::announce(origin.clone(), cid.clone(), None)
.expect("could not publish an announcement");
assert_eq!(<Announcements<T, I>>::count(), 1);
#[extrinsic_call]
_(origin as T::RuntimeOrigin, cid.clone());
assert_eq!(<Announcements<T, I>>::count(), 0);
assert_last_event::<T, I>(Event::AnnouncementRemoved { cid }.into());
Ok(())
}
impl_benchmark_test_suite!(CollectiveContent, super::mock::new_bench_ext(), super::mock::Test);
}