Skip to content

Commit a1bfad5

Browse files
committed
Fixed test cases and updated poseidon
1 parent bdd2e03 commit a1bfad5

File tree

5 files changed

+96
-87
lines changed

5 files changed

+96
-87
lines changed

basics/account-data/poseidon/programs/account_data/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ pub mod address_info_program {
3434
}
3535
#[derive(Accounts)]
3636
pub struct InitializeContext<'info> {
37+
#[account(mut)]
38+
pub owner: Signer<'info>,
3739
#[account(
3840
init,
3941
payer = owner,
@@ -43,8 +45,6 @@ pub struct InitializeContext<'info> {
4345
bump,
4446
)]
4547
pub state: Account<'info, AddressInfoState>,
46-
#[account(mut)]
47-
pub owner: Signer<'info>,
4848
pub system_program: Program<'info, System>,
4949
}
5050
#[derive(Accounts)]

basics/account-data/poseidon/tests/account_data.ts

Lines changed: 68 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -7,113 +7,100 @@ import { AddressInfoProgram } from '../target/types/address_info_program';
77

88
describe('Address Info Program', () => {
99
// Constants
10-
const IDL = require('../target/idl/address_info_program.json');
11-
const PROGRAM_ID = new PublicKey(IDL.address);
12-
const ADDRESS_SEED = 'address_info';
10+
const PROGRAM_ID = new PublicKey('ChA1o71vBEwkYNs6FnkmG4cxyZWtWkbXSEJ6xP2zaJAq');
1311

1412
// Test setup
15-
let addressProgram: Program<AddressInfoProgram>;
13+
let program: Program<AddressInfoProgram>;
1614
let provider: BankrunProvider;
17-
let owner: Wallet;
1815
let addressInfoPda: PublicKey;
1916
let addressInfoBump: number;
17+
let owner: Wallet;
2018

2119
before(async () => {
22-
// Start bankrun with Anchor workspace
23-
const context = await startAnchor(
24-
'.', // Path to Anchor.toml
25-
[], // No extra programs needed
26-
[], // No extra accounts needed
27-
);
28-
29-
// Set up provider and program
30-
provider = new BankrunProvider(context);
31-
addressProgram = new Program(IDL, provider);
32-
33-
owner = provider.wallet as Wallet;
34-
35-
// Find PDA for address info account
36-
[addressInfoPda, addressInfoBump] = PublicKey.findProgramAddressSync([Buffer.from(ADDRESS_SEED), owner.publicKey.toBuffer()], PROGRAM_ID);
20+
try {
21+
// Initialize program test environment
22+
const context = await startAnchor(
23+
'.', // Path to Anchor.toml
24+
[], // No extra programs needed
25+
[], // No
26+
);
27+
28+
// Set up provider and program
29+
provider = new BankrunProvider(context);
30+
31+
// Get program from workspace
32+
const idl = require('../target/idl/address_info_program.json');
33+
program = new Program(idl, provider);
34+
35+
owner = provider.wallet as Wallet;
36+
37+
// Find PDA
38+
[addressInfoPda, addressInfoBump] = PublicKey.findProgramAddressSync([Buffer.from('address_info'), owner.publicKey.toBuffer()], PROGRAM_ID);
39+
} catch (error) {
40+
console.error('Setup failed:', error);
41+
throw error;
42+
}
3743
});
3844

3945
describe('initialize', () => {
4046
it('creates new address info', async () => {
41-
const addressData = {
42-
houseNumber: 42,
43-
streetNumber: 1000,
44-
zipCode: 12345,
45-
countryCode: 1,
46-
};
47+
try {
48+
const addressData = {
49+
houseNumber: 42,
50+
streetNumber: 1000,
51+
zipCode: 12345,
52+
countryCode: 1,
53+
};
54+
55+
// Initialize address info account
56+
await program.methods
57+
.initialize(addressData.houseNumber, addressData.streetNumber, addressData.zipCode, addressData.countryCode)
58+
.accounts({
59+
owner: owner.publicKey,
60+
state: addressInfoPda,
61+
})
62+
.rpc();
4763

48-
// Initialize address info account
49-
await addressProgram.methods
50-
.initialize(addressData.houseNumber, addressData.streetNumber, addressData.zipCode, addressData.countryCode)
51-
.accounts({
52-
owner: owner.publicKey,
53-
addressInfo: addressInfoPda,
54-
systemProgram: SystemProgram.programId,
55-
})
56-
.rpc();
64+
// Verify account data
65+
const account = await program.account.addressInfoState.fetch(addressInfoPda);
5766

58-
// Fetch and verify account data
59-
const account = await addressProgram.account.addressInfoState.fetch(addressInfoPda);
67+
expect(account.owner.toString()).to.equal(provider.wallet.publicKey.toString());
68+
expect(account.houseNumber).to.equal(addressData.houseNumber);
69+
expect(account.streetNumber).to.equal(addressData.streetNumber);
70+
expect(account.zipCode).to.equal(addressData.zipCode);
71+
expect(account.countryCode).to.equal(addressData.countryCode);
72+
expect(account.bump).to.equal(addressInfoBump);
6073

61-
expect(account.owner.equals(owner.publicKey)).to.be.true;
62-
expect(account.houseNumber).to.equal(addressData.houseNumber);
63-
expect(account.streetNumber).to.equal(addressData.streetNumber);
64-
expect(account.zipCode).to.equal(addressData.zipCode);
65-
expect(account.countryCode).to.equal(addressData.countryCode);
66-
expect(account.bump).to.equal(addressInfoBump);
74+
console.log('Address info initialized successfully');
75+
} catch (error) {
76+
console.error('Initialize failed:', error);
77+
throw error;
78+
}
6779
});
6880

6981
it('fails to initialize existing account', async () => {
70-
const addressData = {
71-
houseNumber: 43,
72-
streetNumber: 1001,
73-
zipCode: 12346,
74-
countryCode: 2,
75-
};
76-
7782
try {
78-
await addressProgram.methods
83+
const addressData = {
84+
houseNumber: 43,
85+
streetNumber: 1001,
86+
zipCode: 12346,
87+
countryCode: 2,
88+
};
89+
90+
await program.methods
7991
.initialize(addressData.houseNumber, addressData.streetNumber, addressData.zipCode, addressData.countryCode)
8092
.accounts({
81-
owner: owner.publicKey,
82-
addressInfo: addressInfoPda,
93+
owner: provider.wallet.publicKey,
94+
state: addressInfoPda,
8395
systemProgram: SystemProgram.programId,
8496
})
8597
.rpc();
8698

8799
expect.fail('Should have failed');
88-
} catch (err) {
89-
expect(err).to.exist;
100+
} catch (error) {
101+
expect(error).to.exist;
102+
console.log('Failed to initialize existing account as expected');
90103
}
91104
});
92105
});
93-
94-
describe('edit', () => {
95-
it('edits existing address info', async () => {
96-
const newData = {
97-
houseNumber: 44,
98-
streetNumber: 1002,
99-
zipCode: 12347,
100-
countryCode: 3,
101-
};
102-
103-
await addressProgram.methods
104-
.edit(newData.houseNumber, newData.streetNumber, newData.zipCode, newData.countryCode)
105-
.accounts({
106-
owner: owner.publicKey,
107-
addressInfo: addressInfoPda,
108-
})
109-
.rpc();
110-
111-
const account = await addressProgram.account.addressInfoState.fetch(addressInfoPda);
112-
113-
expect(account.houseNumber).to.equal(newData.houseNumber);
114-
expect(account.streetNumber).to.equal(newData.streetNumber);
115-
expect(account.zipCode).to.equal(newData.zipCode);
116-
expect(account.countryCode).to.equal(newData.countryCode);
117-
});
118-
});
119106
});

basics/account-data/poseidon/ts-programs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
"main": "index.js",
55
"license": "MIT",
66
"dependencies": {
7-
"@solanaturbine/poseidon": "^0.0.4"
7+
"@solanaturbine/poseidon": "^0.0.10"
88
}
99
}

basics/account-data/poseidon/ts-programs/pnpm-lock.yaml

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

basics/account-data/poseidon/ts-programs/src/accountData.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Account, Pubkey, Result, Signer, u8, u16, u32 } from '@solanaturbine/poseidon';
1+
import { Account, Pubkey, type Result, Signer, u8, u16, u32 } from '@solanaturbine/poseidon';
22

33
/**
44
* State account interface for storing address information
@@ -17,11 +17,11 @@ export interface AddressInfoState extends Account {
1717
*/
1818
export default class AddressInfoProgram {
1919
// Following Poseidon example pattern of static PROGRAM_ID
20-
static PROGRAM_ID = new Pubkey('5wF2itZNsDcf5s1SdcdJPdgBSTFAKjj6YbdicLFYi8vN');
20+
static PROGRAM_ID = new Pubkey("ChA1o71vBEwkYNs6FnkmG4cxyZWtWkbXSEJ6xP2zaJAq");
2121

2222
initialize(owner: Signer, state: AddressInfoState, houseNumber: u8, streetNumber: u16, zipCode: u32, countryCode: u16): Result {
2323
// Use derive() for PDA creation and init() for initialization
24-
state.derive(['address_info', owner.key]).init();
24+
state.derive(['address_info', owner.key]).init(owner);
2525

2626
// Store the account data
2727
state.owner = owner.key;

0 commit comments

Comments
 (0)