v0.4.7-pre.014
This commit is contained in:
@@ -1,8 +1,13 @@
|
||||
<!-- file: kb-app-demo-desktop/CHANGELOG.md -->
|
||||
<!-- version: 21 -->
|
||||
<!-- version: 22 -->
|
||||
|
||||
# CHANGELOG — kb-app-demo-desktop
|
||||
|
||||
## 0.4.7-pre.014
|
||||
|
||||
- Afficher les cinq parcours Metaplex Devnet dans le runner Metadata.
|
||||
- Adapter automatiquement le JSON `Create`, les lectures de postcondition et les cibles de matérialisation à la famille sélectionnée.
|
||||
|
||||
## 0.4.7-pre.013-fix-015
|
||||
|
||||
- aligne les tests desktop sur le nombre réel de scénarios synthétiques et Devnet exposés par les registres réutilisables ;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: kb-app-demo-desktop/src/demo_execution_metadata.rs
|
||||
// version: 12
|
||||
// version: 13
|
||||
|
||||
//! Thin desktop adapters for metadata execution demo scenarios.
|
||||
|
||||
@@ -323,6 +323,84 @@ pub(crate) async fn demo_execution_metadata_prepare_create_fixture(
|
||||
});
|
||||
}
|
||||
|
||||
fn adapt_create_operation_json(
|
||||
operation_json: &str,
|
||||
asset_family: kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily,
|
||||
) -> std::result::Result<std::string::String, std::string::String> {
|
||||
let mut value: serde_json::Value = match serde_json::from_str(operation_json) {
|
||||
std::result::Result::Ok(parsed) => parsed,
|
||||
std::result::Result::Err(error) => {
|
||||
return std::result::Result::Err(format!(
|
||||
"invalid generated Metaplex Create JSON: {error}"
|
||||
));
|
||||
},
|
||||
};
|
||||
if matches!(
|
||||
asset_family,
|
||||
kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::Sft
|
||||
| kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::Fungible
|
||||
) {
|
||||
value["master_edition"] = serde_json::Value::Null;
|
||||
}
|
||||
let create = match value
|
||||
.get_mut("create_args")
|
||||
.and_then(|args| return args.get_mut("V1"))
|
||||
.and_then(serde_json::Value::as_object_mut)
|
||||
{
|
||||
std::option::Option::Some(found) => found,
|
||||
std::option::Option::None => {
|
||||
return std::result::Result::Err(
|
||||
"generated Metaplex Create JSON has no create_args.V1 object".to_string(),
|
||||
);
|
||||
},
|
||||
};
|
||||
match asset_family {
|
||||
kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::Nft => {
|
||||
create.insert("name".to_string(), serde_json::json!("Khadhroony Devnet NFT"));
|
||||
create.insert("symbol".to_string(), serde_json::json!("KHNFT"));
|
||||
create.insert("token_standard".to_string(), serde_json::json!("NonFungible"));
|
||||
create.insert("collection_details".to_string(), serde_json::Value::Null);
|
||||
create.insert("decimals".to_string(), serde_json::Value::Null);
|
||||
create.insert("print_supply".to_string(), serde_json::json!("Zero"));
|
||||
},
|
||||
kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::Sft => {
|
||||
create.insert("name".to_string(), serde_json::json!("Khadhroony Devnet SFT"));
|
||||
create.insert("symbol".to_string(), serde_json::json!("KHSFT"));
|
||||
create.insert("token_standard".to_string(), serde_json::json!("FungibleAsset"));
|
||||
create.insert("collection_details".to_string(), serde_json::Value::Null);
|
||||
create.insert("decimals".to_string(), serde_json::json!(0));
|
||||
create.insert("print_supply".to_string(), serde_json::Value::Null);
|
||||
},
|
||||
kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::Fungible => {
|
||||
create.insert("name".to_string(), serde_json::json!("Khadhroony Devnet Fungible"));
|
||||
create.insert("symbol".to_string(), serde_json::json!("KHFUN"));
|
||||
create.insert("token_standard".to_string(), serde_json::json!("Fungible"));
|
||||
create.insert("collection_details".to_string(), serde_json::Value::Null);
|
||||
create.insert("decimals".to_string(), serde_json::json!(0));
|
||||
create.insert("print_supply".to_string(), serde_json::Value::Null);
|
||||
},
|
||||
kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::Collection => {
|
||||
create.insert("name".to_string(), serde_json::json!("Khadhroony Devnet Collection"));
|
||||
create.insert("symbol".to_string(), serde_json::json!("KHCOL"));
|
||||
create.insert("token_standard".to_string(), serde_json::json!("NonFungible"));
|
||||
create.insert("collection_details".to_string(), serde_json::json!({"V1": {"size": 0}}));
|
||||
create.insert("decimals".to_string(), serde_json::Value::Null);
|
||||
create.insert("print_supply".to_string(), serde_json::json!("Zero"));
|
||||
},
|
||||
kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::ProgrammableNft => {
|
||||
create.insert("name".to_string(), serde_json::json!("Khadhroony Devnet pNFT"));
|
||||
create.insert("symbol".to_string(), serde_json::json!("KHPNFT"));
|
||||
create
|
||||
.insert("token_standard".to_string(), serde_json::json!("ProgrammableNonFungible"));
|
||||
create.insert("collection_details".to_string(), serde_json::Value::Null);
|
||||
create.insert("rule_set".to_string(), serde_json::Value::Null);
|
||||
create.insert("decimals".to_string(), serde_json::Value::Null);
|
||||
create.insert("print_supply".to_string(), serde_json::json!("Zero"));
|
||||
},
|
||||
}
|
||||
return std::result::Result::Ok(crate::pretty_json(&value));
|
||||
}
|
||||
|
||||
/// Prepares one coherent scenario step and all of its stateful reads.
|
||||
pub(crate) async fn demo_execution_metadata_prepare_step(
|
||||
state: tauri::State<'_, crate::AppState>,
|
||||
@@ -374,11 +452,18 @@ pub(crate) async fn demo_execution_metadata_prepare_step(
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let operation_json = match adapt_create_operation_json(
|
||||
fixture.operation_json.as_str(),
|
||||
scenario.asset_family,
|
||||
) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
(
|
||||
fixture.mint,
|
||||
fixture.metadata,
|
||||
fixture.master_edition,
|
||||
fixture.operation_json,
|
||||
operation_json,
|
||||
if fixture.mint_created {
|
||||
"mint_prepared".to_string()
|
||||
} else {
|
||||
@@ -480,7 +565,13 @@ pub(crate) async fn demo_execution_metadata_prepare_step(
|
||||
} else {
|
||||
serde_json::json!([metadata_read.clone()])
|
||||
};
|
||||
let postcondition_reads = if operation == "create" {
|
||||
let create_reads_edition = matches!(
|
||||
scenario.asset_family,
|
||||
kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::Nft
|
||||
| kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::Collection
|
||||
| kb_pipeline_demo_scenarios::MetaplexTokenMetadataAssetFamily::ProgrammableNft
|
||||
);
|
||||
let postcondition_reads = if operation == "create" && create_reads_edition {
|
||||
serde_json::json!([metadata_read, edition_read])
|
||||
} else {
|
||||
serde_json::json!([metadata_read])
|
||||
@@ -675,7 +766,7 @@ mod tests {
|
||||
.iter()
|
||||
.filter(|payload| return payload.mode == "network_simulation")
|
||||
.count(),
|
||||
1
|
||||
5
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user