10
10
} ,
11
11
spl_token_2022:: {
12
12
error:: TokenError ,
13
- extension:: { group_member_pointer:: GroupMemberPointer , BaseStateWithExtensions } ,
13
+ extension:: {
14
+ group_member_pointer:: GroupMemberPointer , group_pointer:: GroupPointer ,
15
+ BaseStateWithExtensions ,
16
+ } ,
14
17
instruction,
15
18
processor:: Processor ,
16
19
} ,
@@ -29,7 +32,12 @@ fn setup_program_test() -> ProgramTest {
29
32
program_test
30
33
}
31
34
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 {
33
41
let program_test = setup_program_test ( ) ;
34
42
35
43
let context = program_test. start_with_context ( ) . await ;
@@ -38,15 +46,18 @@ async fn setup(mint: Keypair, member_address: &Pubkey, authority: &Pubkey) -> Te
38
46
context,
39
47
token_context : None ,
40
48
} ;
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
+ }
41
59
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 )
50
61
. await
51
62
. unwrap ( ) ;
52
63
context
@@ -57,7 +68,7 @@ async fn success_init() {
57
68
let authority = Pubkey :: new_unique ( ) ;
58
69
let member_address = Pubkey :: new_unique ( ) ;
59
70
let mint_keypair = Keypair :: new ( ) ;
60
- let token = setup ( mint_keypair, & member_address, & authority)
71
+ let token = setup ( mint_keypair, & member_address, & authority, None )
61
72
. await
62
73
. token_context
63
74
. take ( )
@@ -74,6 +85,40 @@ async fn success_init() {
74
85
) ;
75
86
}
76
87
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
+
77
122
#[ tokio:: test]
78
123
async fn fail_init_all_none ( ) {
79
124
let mut program_test = ProgramTest :: default ( ) ;
@@ -112,7 +157,7 @@ async fn set_authority() {
112
157
let authority = Keypair :: new ( ) ;
113
158
let member_address = Pubkey :: new_unique ( ) ;
114
159
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 )
116
161
. await
117
162
. token_context
118
163
. take ( )
@@ -202,7 +247,7 @@ async fn update_member_address() {
202
247
let authority = Keypair :: new ( ) ;
203
248
let member_address = Pubkey :: new_unique ( ) ;
204
249
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 )
206
251
. await
207
252
. token_context
208
253
. take ( )
0 commit comments