diff --git a/crates/dojo/core-cairo-test/Scarb.lock b/crates/dojo/core-cairo-test/Scarb.lock index 67dbbc68d6..c2ae6068f3 100644 --- a/crates/dojo/core-cairo-test/Scarb.lock +++ b/crates/dojo/core-cairo-test/Scarb.lock @@ -3,7 +3,7 @@ version = 1 [[package]] name = "dojo" -version = "1.1.1" +version = "1.1.2" dependencies = [ "dojo_plugin", ] diff --git a/crates/dojo/core-cairo-test/src/tests/helpers/event.cairo b/crates/dojo/core-cairo-test/src/tests/helpers/event.cairo index bb6b9f28f8..ade094338f 100644 --- a/crates/dojo/core-cairo-test/src/tests/helpers/event.cairo +++ b/crates/dojo/core-cairo-test/src/tests/helpers/event.cairo @@ -63,6 +63,34 @@ struct FooEventMemberAdded { pub b: u128, } +#[derive(Introspect, Copy, Drop, Serde)] +enum MyEnum { + X: u8, +} + +#[derive(Introspect, Copy, Drop, Serde)] +#[dojo::event] +struct FooEventMemberChanged { + #[key] + pub caller: ContractAddress, + pub a: (MyEnum, u8), + pub b: u128, +} + +#[derive(Introspect, Copy, Drop, Serde)] +enum AnotherEnum { + X: u8, +} + +#[derive(Introspect, Copy, Drop, Serde)] +#[dojo::event] +struct FooEventMemberIllegalChange { + #[key] + pub caller: ContractAddress, + pub a: AnotherEnum, + pub b: u128, +} + pub fn deploy_world_for_event_upgrades() -> IWorldDispatcher { let namespace_def = NamespaceDef { namespace: "dojo", @@ -74,6 +102,8 @@ pub fn deploy_world_for_event_upgrades() -> IWorldDispatcher { ), TestResource::Event(e_FooEventMemberAddedButMoved::TEST_CLASS_HASH.try_into().unwrap()), TestResource::Event(e_FooEventMemberAdded::TEST_CLASS_HASH.try_into().unwrap()), + TestResource::Event(e_FooEventMemberChanged::TEST_CLASS_HASH.try_into().unwrap()), + TestResource::Event(e_FooEventMemberIllegalChange::TEST_CLASS_HASH.try_into().unwrap()), ] .span(), }; diff --git a/crates/dojo/core-cairo-test/src/tests/world/event.cairo b/crates/dojo/core-cairo-test/src/tests/world/event.cairo index 6f6527a54d..df32021b5f 100644 --- a/crates/dojo/core-cairo-test/src/tests/world/event.cairo +++ b/crates/dojo/core-cairo-test/src/tests/world/event.cairo @@ -45,6 +45,35 @@ pub struct FooEventMemberAdded { pub c: u256, } +#[derive(Introspect, Copy, Drop, Serde, PartialEq)] +enum MyEnum { + X: u8, + Y: u16, +} + +#[derive(Introspect, Copy, Drop, Serde)] +#[dojo::event] +struct FooEventMemberChanged { + #[key] + pub caller: ContractAddress, + pub a: (MyEnum, u8, u32), + pub b: u128, +} + +#[derive(Introspect, Copy, Drop, Serde)] +enum AnotherEnum { + X: bool, +} + +#[derive(Introspect, Copy, Drop, Serde)] +#[dojo::event] +struct FooEventMemberIllegalChange { + #[key] + pub caller: ContractAddress, + pub a: MyEnum, + pub b: u128, +} + #[test] fn test_register_event_for_namespace_owner() { let bob = starknet::contract_address_const::<0xb0b>(); @@ -169,6 +198,35 @@ fn test_upgrade_event() { } } +#[test] +fn test_upgrade_event_with_member_changed() { + let world = deploy_world_for_event_upgrades(); + + drop_all_events(world.contract_address); + + world.upgrade_event("dojo", e_FooEventMemberChanged::TEST_CLASS_HASH.try_into().unwrap()); + + let event = starknet::testing::pop_log::(world.contract_address); + assert(event.is_some(), 'no event)'); + + if let world::Event::EventUpgraded(event) = event.unwrap() { + assert( + event.selector == Event::::selector(DOJO_NSH), + 'bad event selector', + ); + assert( + event.class_hash == e_FooEventMemberChanged::TEST_CLASS_HASH.try_into().unwrap(), + 'bad event class_hash', + ); + assert( + event.address != core::num::traits::Zero::::zero(), + 'bad event address', + ); + } else { + core::panic_with_felt252('no EventUpgraded event'); + } +} + #[test] #[should_panic( expected: ( @@ -220,6 +278,18 @@ fn test_upgrade_event_with_member_moved() { world.upgrade_event("dojo", e_FooEventMemberAddedButMoved::TEST_CLASS_HASH.try_into().unwrap()); } +#[test] +#[should_panic( + expected: ( + "Invalid new schema to upgrade the resource `dojo-FooEventMemberIllegalChange`", + 'ENTRYPOINT_FAILED', + ), +)] +fn test_upgrade_event_with_member_illegal_change() { + let world = deploy_world_for_event_upgrades(); + world.upgrade_event("dojo", e_FooEventMemberIllegalChange::TEST_CLASS_HASH.try_into().unwrap()); +} + #[test] #[should_panic( expected: ( diff --git a/crates/dojo/core-cairo-test/src/tests/world/model.cairo b/crates/dojo/core-cairo-test/src/tests/world/model.cairo index 9017478c03..5e510194b6 100644 --- a/crates/dojo/core-cairo-test/src/tests/world/model.cairo +++ b/crates/dojo/core-cairo-test/src/tests/world/model.cairo @@ -232,6 +232,7 @@ fn test_upgrade_model() { assert!(read.c == 0); } +#[test] fn test_upgrade_model_with_member_changed() { let caller = starknet::contract_address_const::<0xb0b>(); let world = deploy_world_for_model_upgrades(); diff --git a/crates/torii/types-test/Scarb.lock b/crates/torii/types-test/Scarb.lock index 1adca89241..cfeedf54cb 100644 --- a/crates/torii/types-test/Scarb.lock +++ b/crates/torii/types-test/Scarb.lock @@ -14,7 +14,7 @@ version = "2.9.2" [[package]] name = "types_test" -version = "1.1.1" +version = "1.1.2" dependencies = [ "dojo", ] diff --git a/examples/simple/Scarb.lock b/examples/simple/Scarb.lock index 6f11f02532..a98f8e2b05 100644 --- a/examples/simple/Scarb.lock +++ b/examples/simple/Scarb.lock @@ -3,7 +3,7 @@ version = 1 [[package]] name = "dojo" -version = "1.1.1" +version = "1.1.2" dependencies = [ "dojo_plugin", ] diff --git a/examples/spawn-and-move/Scarb.lock b/examples/spawn-and-move/Scarb.lock index 305df6134c..457b4c4054 100644 --- a/examples/spawn-and-move/Scarb.lock +++ b/examples/spawn-and-move/Scarb.lock @@ -31,7 +31,7 @@ dependencies = [ [[package]] name = "dojo_examples" -version = "1.1.1" +version = "1.1.2" dependencies = [ "armory", "bestiary", diff --git a/spawn-and-move-db.tar.gz b/spawn-and-move-db.tar.gz index 25b753f747..1d052f7879 100644 Binary files a/spawn-and-move-db.tar.gz and b/spawn-and-move-db.tar.gz differ diff --git a/types-test-db.tar.gz b/types-test-db.tar.gz index 6319b1d341..7c12809ed2 100644 Binary files a/types-test-db.tar.gz and b/types-test-db.tar.gz differ