From f52ddede4fef910361a306d47b2f248cd3897923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Noah=20B=2E=20=F0=9F=A5=82?= <15343884+nbayindirli@users.noreply.github.com> Date: Tue, 21 Jan 2025 18:17:39 -0800 Subject: [PATCH] test(axelar-std): add derive macro unit tests (#170) --- Cargo.lock | 1 + packages/axelar-std-derive/src/lib.rs | 2 +- packages/axelar-std/Cargo.toml | 1 + packages/axelar-std/tests/event.rs | 182 ++++++++++++++++++ ...m_multiple_topics_and_data_succeeds.golden | 3 + .../testdata/event_empty_succeeds.golden | 3 + .../testdata/event_multi_data_succeeds.golden | 3 + .../testdata/event_named_succeeds.golden | 3 + .../testdata/event_no_data_succeeds.golden | 3 + .../testdata/event_no_topic_succeeds.golden | 3 + .../event_single_data_succeeds.golden | 3 + .../event_transfer_emission_succeeds.golden | 3 + .../testdata/multi_data_event_emitted.golden | 3 + .../tests/testdata/named_event_emitted.golden | 3 + .../testdata/no_data_event_emitted.golden | 3 + .../testdata/no_topic_event_emitted.golden | 3 + .../testdata/single_data_event_emitted.golden | 3 + 17 files changed, 224 insertions(+), 1 deletion(-) create mode 100644 packages/axelar-std/tests/event.rs create mode 100644 packages/axelar-std/tests/testdata/event_custom_multiple_topics_and_data_succeeds.golden create mode 100644 packages/axelar-std/tests/testdata/event_empty_succeeds.golden create mode 100644 packages/axelar-std/tests/testdata/event_multi_data_succeeds.golden create mode 100644 packages/axelar-std/tests/testdata/event_named_succeeds.golden create mode 100644 packages/axelar-std/tests/testdata/event_no_data_succeeds.golden create mode 100644 packages/axelar-std/tests/testdata/event_no_topic_succeeds.golden create mode 100644 packages/axelar-std/tests/testdata/event_single_data_succeeds.golden create mode 100644 packages/axelar-std/tests/testdata/event_transfer_emission_succeeds.golden create mode 100644 packages/axelar-std/tests/testdata/multi_data_event_emitted.golden create mode 100644 packages/axelar-std/tests/testdata/named_event_emitted.golden create mode 100644 packages/axelar-std/tests/testdata/no_data_event_emitted.golden create mode 100644 packages/axelar-std/tests/testdata/no_topic_event_emitted.golden create mode 100644 packages/axelar-std/tests/testdata/single_data_event_emitted.golden diff --git a/Cargo.lock b/Cargo.lock index 35368aa3..f86f4356 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2024,6 +2024,7 @@ dependencies = [ "paste", "soroban-sdk", "soroban-token-sdk", + "stellar-axelar-std", "stellar-axelar-std-derive", ] diff --git a/packages/axelar-std-derive/src/lib.rs b/packages/axelar-std-derive/src/lib.rs index 7a741004..b17c49b4 100644 --- a/packages/axelar-std-derive/src/lib.rs +++ b/packages/axelar-std-derive/src/lib.rs @@ -132,7 +132,7 @@ pub fn derive_upgradable(input: TokenStream) -> TokenStream { /// # mod test { /// use core::fmt::Debug; /// use stellar_axelar_std::events::Event; -/// use stellar_axelar_std_derive::IntoEvent; +/// use stellar_axelar_std::IntoEvent; /// use soroban_sdk::{Address, contract, contractimpl, Env, String}; /// /// #[derive(Debug, PartialEq, IntoEvent)] diff --git a/packages/axelar-std/Cargo.toml b/packages/axelar-std/Cargo.toml index bed760f4..ea856863 100644 --- a/packages/axelar-std/Cargo.toml +++ b/packages/axelar-std/Cargo.toml @@ -19,6 +19,7 @@ stellar-axelar-std-derive = { workspace = true, optional = true } goldie = { workspace = true } paste = { workspace = true } soroban-sdk = { workspace = true, features = ["testutils"] } +stellar-axelar-std = { workspace = true, features = ["testutils"] } stellar-axelar-std-derive = { workspace = true, features = ["testutils"] } [features] diff --git a/packages/axelar-std/tests/event.rs b/packages/axelar-std/tests/event.rs new file mode 100644 index 00000000..964d9912 --- /dev/null +++ b/packages/axelar-std/tests/event.rs @@ -0,0 +1,182 @@ +use soroban_sdk::testutils::Address as _; +use soroban_sdk::{contract, contractimpl, Address, Env, String}; +use stellar_axelar_std::events::{fmt_last_emitted_event, Event}; +use stellar_axelar_std::IntoEvent; + +#[contract] +pub struct Contract; + +#[derive(Debug, PartialEq, Eq, IntoEvent)] +struct EmptyEvent; + +#[derive(Debug, PartialEq, Eq, IntoEvent)] +struct SingleDataEvent { + topic1: Address, + topic2: Address, + #[data] + data: String, +} + +#[derive(Debug, PartialEq, Eq, IntoEvent)] +#[event_name("custom_name")] +struct NamedEvent { + topic: Address, + #[data] + data: String, +} + +#[derive(Debug, PartialEq, Eq, IntoEvent)] +struct MultiDataEvent { + topic1: String, + topic2: Address, + #[data] + data1: String, + #[data] + data2: String, +} + +#[derive(Debug, PartialEq, Eq, IntoEvent)] +struct NoDataEvent { + topic1: String, + topic2: Address, +} + +#[derive(Debug, PartialEq, Eq, IntoEvent)] +struct NoTopicEvent { + #[data] + data1: String, + #[data] + data2: Address, + #[data] + data3: String, +} + +#[contractimpl] +impl Contract { + pub const fn __constructor() {} + + pub fn empty(env: &Env) { + EmptyEvent.emit(env); + } + + pub fn single_data(env: &Env, topic1: Address, topic2: Address, data: String) { + SingleDataEvent { + topic1, + topic2, + data, + } + .emit(env); + } + + pub fn named(env: &Env, topic: Address, data: String) { + NamedEvent { topic, data }.emit(env); + } + + pub fn multi_data(env: &Env, topic1: String, topic2: Address, data1: String, data2: String) { + MultiDataEvent { + topic1, + topic2, + data1, + data2, + } + .emit(env); + } + + pub fn no_data(env: &Env, topic1: String, topic2: Address) { + NoDataEvent { topic1, topic2 }.emit(env); + } + + pub fn no_topic(env: &Env, data1: String, data2: Address, data3: String) { + NoTopicEvent { + data1, + data2, + data3, + } + .emit(env); + } +} + +#[test] +fn event_empty_succeeds() { + let env = &Env::default(); + + let contract_id = env.register(Contract, ()); + let client = ContractClient::new(env, &contract_id); + + client.empty(); + goldie::assert!(fmt_last_emitted_event::(env)); +} + +#[test] +fn single_data_event_emitted() { + let env = &Env::default(); + + let contract_id = env.register(Contract, ()); + let client = ContractClient::new(env, &contract_id); + + let topic1 = Address::generate(env); + let topic2 = Address::generate(env); + let data = String::from_str(env, "100"); + + client.single_data(&topic1, &topic2, &data); + goldie::assert!(fmt_last_emitted_event::(env)); +} + +#[test] +fn named_event_emitted() { + let env = &Env::default(); + + let contract_id = env.register(Contract, ()); + let client = ContractClient::new(env, &contract_id); + + let topic = Address::generate(env); + let data = String::from_str(env, "100"); + + client.named(&topic, &data); + goldie::assert!(fmt_last_emitted_event::(env)); +} + +#[test] +fn multi_data_event_emitted() { + let env = &Env::default(); + + let contract_id = env.register(Contract, ()); + let client = ContractClient::new(env, &contract_id); + + let topic1 = String::from_str(env, "topic-1"); + let topic2 = Address::generate(env); + let data1 = String::from_str(env, "data-1"); + let data2 = String::from_str(env, "data-2"); + + client.multi_data(&topic1, &topic2, &data1, &data2); + goldie::assert!(fmt_last_emitted_event::(env)); +} + +#[test] +fn no_data_event_emitted() { + let env = &Env::default(); + + let contract_id = env.register(Contract, ()); + let client = ContractClient::new(env, &contract_id); + + let topic1 = String::from_str(env, "topic-1"); + let topic2 = Address::generate(env); + + client.no_data(&topic1, &topic2); + goldie::assert!(fmt_last_emitted_event::(env)); +} + +#[test] +fn no_topic_event_emitted() { + let env = &Env::default(); + + let contract_id = env.register(Contract, ()); + let client = ContractClient::new(env, &contract_id); + + let data1 = String::from_str(env, "data-1"); + let data2 = Address::generate(env); + let data3 = String::from_str(env, "data-3"); + + client.no_topic(&data1, &data2, &data3); + goldie::assert!(fmt_last_emitted_event::(env)); +} diff --git a/packages/axelar-std/tests/testdata/event_custom_multiple_topics_and_data_succeeds.golden b/packages/axelar-std/tests/testdata/event_custom_multiple_topics_and_data_succeeds.golden new file mode 100644 index 00000000..d91056d5 --- /dev/null +++ b/packages/axelar-std/tests/testdata/event_custom_multiple_topics_and_data_succeeds.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4) +topics: (Symbol(emitted_data), String(topic-1), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M)) +data: (String(data-1), String(data-2)) \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/event_empty_succeeds.golden b/packages/axelar-std/tests/testdata/event_empty_succeeds.golden new file mode 100644 index 00000000..bd269505 --- /dev/null +++ b/packages/axelar-std/tests/testdata/event_empty_succeeds.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(empty)) +data: () \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/event_multi_data_succeeds.golden b/packages/axelar-std/tests/testdata/event_multi_data_succeeds.golden new file mode 100644 index 00000000..a129f40a --- /dev/null +++ b/packages/axelar-std/tests/testdata/event_multi_data_succeeds.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(multi_data), String(topic-1), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4)) +data: (String(data-1), String(data-2)) \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/event_named_succeeds.golden b/packages/axelar-std/tests/testdata/event_named_succeeds.golden new file mode 100644 index 00000000..c4deb177 --- /dev/null +++ b/packages/axelar-std/tests/testdata/event_named_succeeds.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(custom_name), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4)) +data: (String(100)) \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/event_no_data_succeeds.golden b/packages/axelar-std/tests/testdata/event_no_data_succeeds.golden new file mode 100644 index 00000000..d4662372 --- /dev/null +++ b/packages/axelar-std/tests/testdata/event_no_data_succeeds.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(no_data), String(topic-1), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4)) +data: () \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/event_no_topic_succeeds.golden b/packages/axelar-std/tests/testdata/event_no_topic_succeeds.golden new file mode 100644 index 00000000..9ce47704 --- /dev/null +++ b/packages/axelar-std/tests/testdata/event_no_topic_succeeds.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(no_topic)) +data: (String(data-1), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4), String(data-3)) \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/event_single_data_succeeds.golden b/packages/axelar-std/tests/testdata/event_single_data_succeeds.golden new file mode 100644 index 00000000..3f69bd28 --- /dev/null +++ b/packages/axelar-std/tests/testdata/event_single_data_succeeds.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(single_data), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M)) +data: (String(100)) \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/event_transfer_emission_succeeds.golden b/packages/axelar-std/tests/testdata/event_transfer_emission_succeeds.golden new file mode 100644 index 00000000..009bf2b2 --- /dev/null +++ b/packages/axelar-std/tests/testdata/event_transfer_emission_succeeds.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4) +topics: (Symbol(transferred), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4)) +data: (String(100)) \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/multi_data_event_emitted.golden b/packages/axelar-std/tests/testdata/multi_data_event_emitted.golden new file mode 100644 index 00000000..a129f40a --- /dev/null +++ b/packages/axelar-std/tests/testdata/multi_data_event_emitted.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(multi_data), String(topic-1), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4)) +data: (String(data-1), String(data-2)) \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/named_event_emitted.golden b/packages/axelar-std/tests/testdata/named_event_emitted.golden new file mode 100644 index 00000000..c4deb177 --- /dev/null +++ b/packages/axelar-std/tests/testdata/named_event_emitted.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(custom_name), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4)) +data: (String(100)) \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/no_data_event_emitted.golden b/packages/axelar-std/tests/testdata/no_data_event_emitted.golden new file mode 100644 index 00000000..d4662372 --- /dev/null +++ b/packages/axelar-std/tests/testdata/no_data_event_emitted.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(no_data), String(topic-1), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4)) +data: () \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/no_topic_event_emitted.golden b/packages/axelar-std/tests/testdata/no_topic_event_emitted.golden new file mode 100644 index 00000000..9ce47704 --- /dev/null +++ b/packages/axelar-std/tests/testdata/no_topic_event_emitted.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(no_topic)) +data: (String(data-1), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4), String(data-3)) \ No newline at end of file diff --git a/packages/axelar-std/tests/testdata/single_data_event_emitted.golden b/packages/axelar-std/tests/testdata/single_data_event_emitted.golden new file mode 100644 index 00000000..3f69bd28 --- /dev/null +++ b/packages/axelar-std/tests/testdata/single_data_event_emitted.golden @@ -0,0 +1,3 @@ +contract: Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM) +topics: (Symbol(single_data), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4), Contract(CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M)) +data: (String(100)) \ No newline at end of file