v0.4.7-pre.014

This commit is contained in:
2026-08-04 19:43:03 +02:00
parent 22228149a3
commit b358b12f3b
6 changed files with 249 additions and 39 deletions

View File

@@ -1,5 +1,5 @@
// file: kb-pipeline-demo-scenarios/src/solana_metaplex_token_metadata_scenarios.rs
// version: 4
// version: 5
//! Coherent Metaplex Token Metadata scenario journeys for tests and Devnet campaigns.
@@ -224,23 +224,85 @@ pub fn metaplex_token_metadata_synthetic_scenarios()
/// Returns the ordered Metaplex journeys intended for opt-in Devnet simulation.
pub fn metaplex_token_metadata_devnet_scenarios()
-> std::vec::Vec<crate::MetaplexTokenMetadataScenario> {
let mut scenario = scenario(
"metaplex_nft_create_update_devnet",
"NFT classique : création confirmée puis mise à jour",
crate::MetaplexTokenMetadataAssetFamily::Nft,
crate::MetaplexTokenMetadataFixtureKind::ClassicNftMint,
crate::MetaplexTokenMetadataFixtureState::MintPrepared,
crate::MetaplexTokenMetadataFixtureState::MetadataCreated,
vec![
kb_lib::EX_METAPLEX_TOKEN_METADATA_CREATE_OPERATION.to_string(),
kb_lib::EX_METAPLEX_TOKEN_METADATA_UPDATE_OPERATION.to_string(),
],
false,
false,
&["metadata_state", "edition_state"],
);
scenario.mode = crate::MetaplexTokenMetadataScenarioMode::NetworkSimulation;
return vec![scenario];
let definitions = [
(
"metaplex_nft_create_update_devnet",
"NFT classique : création confirmée puis mise à jour",
crate::MetaplexTokenMetadataAssetFamily::Nft,
crate::MetaplexTokenMetadataFixtureKind::ClassicNftMint,
false,
false,
&["metadata_state", "edition_state"][..],
),
(
"metaplex_sft_create_update_devnet",
"SFT : création confirmée puis mise à jour",
crate::MetaplexTokenMetadataAssetFamily::Sft,
crate::MetaplexTokenMetadataFixtureKind::SemiFungibleMint,
false,
false,
&["metadata_state"][..],
),
(
"metaplex_fungible_create_update_devnet",
"Fungible : création confirmée puis mise à jour",
crate::MetaplexTokenMetadataAssetFamily::Fungible,
crate::MetaplexTokenMetadataFixtureKind::FungibleMint,
false,
false,
&["metadata_state"][..],
),
(
"metaplex_collection_create_update_devnet",
"Collection parent : création confirmée puis mise à jour",
crate::MetaplexTokenMetadataAssetFamily::Collection,
crate::MetaplexTokenMetadataFixtureKind::CollectionParentAndMember,
true,
false,
&["metadata_state", "edition_state"][..],
),
(
"metaplex_pnft_create_update_devnet",
"pNFT sans rule set : création confirmée puis mise à jour",
crate::MetaplexTokenMetadataAssetFamily::ProgrammableNft,
crate::MetaplexTokenMetadataFixtureKind::ProgrammableNftTokenRecord,
false,
false,
&["metadata_state", "edition_state"][..],
),
];
return definitions
.into_iter()
.map(
|(
id,
label,
asset_family,
fixture_kind,
requires_collection,
requires_programmable_rules,
materialization_targets,
)| {
let mut value = scenario(
id,
label,
asset_family,
fixture_kind,
crate::MetaplexTokenMetadataFixtureState::MintPrepared,
crate::MetaplexTokenMetadataFixtureState::MetadataCreated,
vec![
kb_lib::EX_METAPLEX_TOKEN_METADATA_CREATE_OPERATION.to_string(),
kb_lib::EX_METAPLEX_TOKEN_METADATA_UPDATE_OPERATION.to_string(),
],
requires_collection,
requires_programmable_rules,
materialization_targets,
);
value.mode = crate::MetaplexTokenMetadataScenarioMode::NetworkSimulation;
return value;
},
)
.collect();
}
#[cfg(test)]
@@ -279,18 +341,23 @@ mod tests {
#[test]
fn devnet_inventory_exposes_only_fully_preparable_journeys() {
let devnet = crate::metaplex_token_metadata_devnet_scenarios();
assert_eq!(devnet.len(), 1);
let scenario = &devnet[0];
assert_eq!(scenario.asset_family, crate::MetaplexTokenMetadataAssetFamily::Nft);
assert_eq!(scenario.operation_codes.len(), 2);
assert_eq!(
scenario.operation_codes[0],
kb_lib::EX_METAPLEX_TOKEN_METADATA_CREATE_OPERATION
);
assert_eq!(
scenario.operation_codes[1],
kb_lib::EX_METAPLEX_TOKEN_METADATA_UPDATE_OPERATION
);
assert_eq!(scenario.mode, crate::MetaplexTokenMetadataScenarioMode::NetworkSimulation);
assert_eq!(devnet.len(), 5);
let families = devnet
.iter()
.map(|scenario| return scenario.asset_family)
.collect::<std::collections::BTreeSet<_>>();
assert_eq!(families.len(), 5);
for scenario in devnet {
assert_eq!(scenario.operation_codes.len(), 2);
assert_eq!(
scenario.operation_codes[0],
kb_lib::EX_METAPLEX_TOKEN_METADATA_CREATE_OPERATION
);
assert_eq!(
scenario.operation_codes[1],
kb_lib::EX_METAPLEX_TOKEN_METADATA_UPDATE_OPERATION
);
assert_eq!(scenario.mode, crate::MetaplexTokenMetadataScenarioMode::NetworkSimulation);
}
}
}