Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit 8c0270f

Browse files
author
Joe C
authored
token 2022: add a test for mint with group and member pointer
This PR adds a test to ensure a mint can successfully be initialized with _both_ a `GroupPointer` and a `GroupMemberPointer`. A mint may be both a member of a group, but also a group itself (or sub-group).
1 parent 3c82062 commit 8c0270f

File tree

1 file changed

+58
-13
lines changed

1 file changed

+58
-13
lines changed

token/program-2022-test/tests/group_member_pointer.rs

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ use {
1010
},
1111
spl_token_2022::{
1212
error::TokenError,
13-
extension::{group_member_pointer::GroupMemberPointer, BaseStateWithExtensions},
13+
extension::{
14+
group_member_pointer::GroupMemberPointer, group_pointer::GroupPointer,
15+
BaseStateWithExtensions,
16+
},
1417
instruction,
1518
processor::Processor,
1619
},
@@ -29,7 +32,12 @@ fn setup_program_test() -> ProgramTest {
2932
program_test
3033
}
3134

32-
async fn setup(mint: Keypair, member_address: &Pubkey, authority: &Pubkey) -> TestContext {
35+
async fn setup(
36+
mint: Keypair,
37+
member_address: &Pubkey,
38+
authority: &Pubkey,
39+
maybe_group_address: Option<Pubkey>,
40+
) -> TestContext {
3341
let program_test = setup_program_test();
3442

3543
let context = program_test.start_with_context().await;
@@ -38,15 +46,18 @@ async fn setup(mint: Keypair, member_address: &Pubkey, authority: &Pubkey) -> Te
3846
context,
3947
token_context: None,
4048
};
49+
let mut extension_init_params = vec![ExtensionInitializationParams::GroupMemberPointer {
50+
authority: Some(*authority),
51+
member_address: Some(*member_address),
52+
}];
53+
if let Some(group_address) = maybe_group_address {
54+
extension_init_params.push(ExtensionInitializationParams::GroupPointer {
55+
authority: Some(*authority),
56+
group_address: Some(group_address),
57+
});
58+
}
4159
context
42-
.init_token_with_mint_keypair_and_freeze_authority(
43-
mint,
44-
vec![ExtensionInitializationParams::GroupMemberPointer {
45-
authority: Some(*authority),
46-
member_address: Some(*member_address),
47-
}],
48-
None,
49-
)
60+
.init_token_with_mint_keypair_and_freeze_authority(mint, extension_init_params, None)
5061
.await
5162
.unwrap();
5263
context
@@ -57,7 +68,7 @@ async fn success_init() {
5768
let authority = Pubkey::new_unique();
5869
let member_address = Pubkey::new_unique();
5970
let mint_keypair = Keypair::new();
60-
let token = setup(mint_keypair, &member_address, &authority)
71+
let token = setup(mint_keypair, &member_address, &authority, None)
6172
.await
6273
.token_context
6374
.take()
@@ -74,6 +85,40 @@ async fn success_init() {
7485
);
7586
}
7687

88+
#[tokio::test]
89+
async fn success_init_with_group() {
90+
let authority = Pubkey::new_unique();
91+
let group_address = Pubkey::new_unique();
92+
let member_address = Pubkey::new_unique();
93+
let mint_keypair = Keypair::new();
94+
let token = setup(
95+
mint_keypair,
96+
&member_address,
97+
&authority,
98+
Some(group_address),
99+
)
100+
.await
101+
.token_context
102+
.take()
103+
.unwrap()
104+
.token;
105+
106+
let state = token.get_mint_info().await.unwrap();
107+
assert!(state.base.is_initialized);
108+
let extension = state.get_extension::<GroupMemberPointer>().unwrap();
109+
assert_eq!(extension.authority, Some(authority).try_into().unwrap());
110+
assert_eq!(
111+
extension.member_address,
112+
Some(member_address).try_into().unwrap()
113+
);
114+
let extension = state.get_extension::<GroupPointer>().unwrap();
115+
assert_eq!(extension.authority, Some(authority).try_into().unwrap());
116+
assert_eq!(
117+
extension.group_address,
118+
Some(group_address).try_into().unwrap()
119+
);
120+
}
121+
77122
#[tokio::test]
78123
async fn fail_init_all_none() {
79124
let mut program_test = ProgramTest::default();
@@ -112,7 +157,7 @@ async fn set_authority() {
112157
let authority = Keypair::new();
113158
let member_address = Pubkey::new_unique();
114159
let mint_keypair = Keypair::new();
115-
let token = setup(mint_keypair, &member_address, &authority.pubkey())
160+
let token = setup(mint_keypair, &member_address, &authority.pubkey(), None)
116161
.await
117162
.token_context
118163
.take()
@@ -202,7 +247,7 @@ async fn update_member_address() {
202247
let authority = Keypair::new();
203248
let member_address = Pubkey::new_unique();
204249
let mint_keypair = Keypair::new();
205-
let token = setup(mint_keypair, &member_address, &authority.pubkey())
250+
let token = setup(mint_keypair, &member_address, &authority.pubkey(), None)
206251
.await
207252
.token_context
208253
.take()

0 commit comments

Comments
 (0)