/ tests / src / test_initialize.rs
test_initialize.rs
 1  use core::panic;
 2  
 3  use anchor_client::{
 4      anchor_lang::{prelude::System, Id, Key},
 5      solana_sdk::{
 6          commitment_config::CommitmentConfig, pubkey::Pubkey, signature::read_keypair_file,
 7          signer::Signer,
 8      },
 9      Client, Cluster,
10  };
11  
12  use crate::create_account;
13  
14  #[test]
15  fn test_initialize() {
16      let program_id = akinnet::id();
17      let anchor_wallet = std::env::var("ANCHOR_WALLET").unwrap();
18      let payer = read_keypair_file(&anchor_wallet).unwrap();
19  
20      let client = Client::new_with_options(Cluster::Localnet, &payer, CommitmentConfig::confirmed());
21      let program = client.program(program_id).unwrap();
22      let rpc = program.rpc();
23  
24      eprintln!("Program: {}", program_id.key());
25  
26      let user = create_account(&payer, &rpc, 5000000000);
27      eprintln!("User: {}", user.pubkey());
28  
29      let (root_entry, _) =
30          Pubkey::find_program_address(&[b"root", user.pubkey().as_ref()], &program_id);
31      let (vault_entry, _) =
32          Pubkey::find_program_address(&[b"vault", user.pubkey().as_ref()], &program_id);
33      let (me_entry, _) =
34          Pubkey::find_program_address(&[b"persona", b"Bruce", user.pubkey().as_ref()], &program_id);
35  
36      program
37          .request()
38          .accounts(akinnet::accounts::Initialize {
39              root_entry,
40              vault_entry,
41              owner: user.pubkey(),
42              self_persona_entry: me_entry,
43              system_program: System::id(),
44          })
45          .args(akinnet::instruction::Initialize {
46              name: "Bruce".to_string(),
47              description: "A Nut".to_string(),
48          })
49          .signer(&user)
50          .send()
51          .expect("");
52  
53      let root_node: akinnet::state::NodeState = program.account(root_entry).unwrap();
54      assert_eq!(root_node.owner, user.pubkey());
55  
56      let akinnet::state::NodeKind::Root { node, .. } = root_node.kind else {
57          panic!("bad node kind");
58      };
59  
60      assert_eq!(node, me_entry);
61  
62      let me_node: akinnet::state::NodeState = program.account(me_entry).unwrap();
63      assert_eq!(me_node.owner, user.pubkey());
64  
65      let akinnet::state::NodeKind::Persona { name, description } = me_node.kind else {
66          panic!("bad node kind");
67      };
68  
69      assert_eq!(name, "Bruce");
70      assert_eq!(description, "A Nut");
71  }