|
@@ -0,0 +1,52 @@
|
|
|
+use lever_api::prelude::*;
|
|
|
+use solana_program::hash::Hash;
|
|
|
+use solana_program_test::{processor, BanksClient, ProgramTest};
|
|
|
+use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction};
|
|
|
+use steel::*;
|
|
|
+
|
|
|
+async fn setup() -> (BanksClient, Keypair, Hash) {
|
|
|
+ let mut program_test = ProgramTest::new(
|
|
|
+ "lever_program",
|
|
|
+ lever_api::ID,
|
|
|
+ processor!(lever_program::process_instruction),
|
|
|
+ );
|
|
|
+ program_test.prefer_bpf(true);
|
|
|
+ program_test.start().await
|
|
|
+}
|
|
|
+
|
|
|
+#[tokio::test]
|
|
|
+async fn run_test() {
|
|
|
+ let (mut banks, payer, blockhash) = setup().await;
|
|
|
+
|
|
|
+ let power_account = Keypair::new();
|
|
|
+
|
|
|
+ // Submit initialize transaction.
|
|
|
+ let ix = initialize(payer.pubkey(), power_account.pubkey());
|
|
|
+ let tx = Transaction::new_signed_with_payer(
|
|
|
+ &[ix],
|
|
|
+ Some(&payer.pubkey()),
|
|
|
+ &[&payer, &power_account],
|
|
|
+ blockhash,
|
|
|
+ );
|
|
|
+ let res = banks.process_transaction(tx).await;
|
|
|
+ assert!(res.is_ok());
|
|
|
+
|
|
|
+ // Verify power account was initialized.
|
|
|
+ let power_address = power_account.pubkey();
|
|
|
+ let power_account = banks.get_account(power_address).await.unwrap().unwrap();
|
|
|
+ let power_status = PowerStatus::try_from_bytes(&power_account.data).unwrap();
|
|
|
+ assert_eq!(power_account.owner, lever_api::ID);
|
|
|
+ assert_eq!(power_status.is_on, 0);
|
|
|
+
|
|
|
+ // Submit switch_power transaction.
|
|
|
+ let ix = switch_power(power_address, "Chris");
|
|
|
+ let tx = Transaction::new_signed_with_payer(&[ix], Some(&payer.pubkey()), &[&payer], blockhash);
|
|
|
+ let res = banks.process_transaction(tx).await;
|
|
|
+ assert!(res.is_ok());
|
|
|
+
|
|
|
+ // // Verify power_status was changed.
|
|
|
+ let power_account = banks.get_account(power_address).await.unwrap().unwrap();
|
|
|
+ let power_status = PowerStatus::try_from_bytes(&power_account.data).unwrap();
|
|
|
+ assert_eq!(power_account.owner, lever_api::ID);
|
|
|
+ assert_eq!(power_status.is_on, 1);
|
|
|
+}
|