11use anyhow:: anyhow;
2- use async_trait:: async_trait;
32use crates_io_github:: {
4- GitHubClient , GitHubError , GitHubOrgMembership , GitHubOrganization , GitHubPublicKey ,
5- GitHubTeam , GitHubTeamMembership , GithubUser ,
3+ GitHubError , GitHubOrgMembership , GitHubOrganization , GitHubTeam , GitHubTeamMembership ,
4+ GithubUser , MockGitHubClient ,
65} ;
7- use oauth2:: AccessToken ;
86use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
97
108static NEXT_GH_ID : AtomicUsize = AtomicUsize :: new ( 0 ) ;
@@ -51,30 +49,34 @@ pub(crate) const MOCK_GITHUB_DATA: MockData = MockData {
51495250 } ,
5351 ] ,
54- // Test key from https://docs.github.com/en/developers/overview/secret-scanning-partner-program#create-a-secret-alert-service
55- public_keys : & [
56- MockPublicKey {
57- key_identifier : "f9525bf080f75b3506ca1ead061add62b8633a346606dc5fe544e29231c6ee0d" ,
58- key : "-----BEGIN PUBLIC KEY-----\n MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsz9ugWDj5jK5ELBK42ynytbo38gP\n HzZFI03Exwz8Lh/tCfL3YxwMdLjB+bMznsanlhK0RwcGP3IDb34kQDIo3Q==\n -----END PUBLIC KEY-----" ,
59- is_current : true ,
60- } ,
61- ] ,
6252} ;
6353
64- pub ( crate ) struct MockGitHubClient {
65- data : & ' static MockData ,
66- }
54+ impl MockData {
55+ pub fn as_mock_client ( & ' static self ) -> MockGitHubClient {
56+ let mut mock = MockGitHubClient :: new ( ) ;
57+
58+ mock. expect_current_user ( )
59+ . returning ( |_auth| self . current_user ( ) ) ;
60+
61+ mock. expect_org_by_name ( )
62+ . returning ( |org_name, _auth| self . org_by_name ( org_name) ) ;
6763
68- impl MockGitHubClient {
69- pub ( crate ) fn new ( data : & ' static MockData ) -> Self {
70- Self { data }
64+ mock. expect_team_by_name ( )
65+ . returning ( |org_name, team_name, _auth| self . team_by_name ( org_name, team_name) ) ;
66+
67+ mock. expect_team_membership ( )
68+ . returning ( |org_id, team_id, username, _auth| {
69+ self . team_membership ( org_id, team_id, username)
70+ } ) ;
71+
72+ mock. expect_org_membership ( )
73+ . returning ( |org_id, username, _auth| self . org_membership ( org_id, username) ) ;
74+
75+ mock
7176 }
72- }
7377
74- #[ async_trait]
75- impl GitHubClient for MockGitHubClient {
76- async fn current_user ( & self , _auth : & AccessToken ) -> Result < GithubUser , GitHubError > {
77- let user = & self . data . users [ 0 ] ;
78+ fn current_user ( & self ) -> Result < GithubUser , GitHubError > {
79+ let user = & self . users [ 0 ] ;
7880 Ok ( GithubUser {
7981 id : user. id ,
8082 login : user. login . into ( ) ,
@@ -84,13 +86,8 @@ impl GitHubClient for MockGitHubClient {
8486 } )
8587 }
8688
87- async fn org_by_name (
88- & self ,
89- org_name : & str ,
90- _auth : & AccessToken ,
91- ) -> Result < GitHubOrganization , GitHubError > {
89+ fn org_by_name ( & self , org_name : & str ) -> Result < GitHubOrganization , GitHubError > {
9290 let org = self
93- . data
9491 . orgs
9592 . iter ( )
9693 . find ( |org| org. name == org_name. to_lowercase ( ) )
@@ -101,14 +98,8 @@ impl GitHubClient for MockGitHubClient {
10198 } )
10299 }
103100
104- async fn team_by_name (
105- & self ,
106- org_name : & str ,
107- team_name : & str ,
108- auth : & AccessToken ,
109- ) -> Result < GitHubTeam , GitHubError > {
101+ fn team_by_name ( & self , org_name : & str , team_name : & str ) -> Result < GitHubTeam , GitHubError > {
110102 let team = self
111- . data
112103 . orgs
113104 . iter ( )
114105 . find ( |org| org. name == org_name. to_lowercase ( ) )
@@ -120,19 +111,17 @@ impl GitHubClient for MockGitHubClient {
120111 Ok ( GitHubTeam {
121112 id : team. id ,
122113 name : Some ( team. name . into ( ) ) ,
123- organization : self . org_by_name ( org_name, auth ) . await ?,
114+ organization : self . org_by_name ( org_name) ?,
124115 } )
125116 }
126117
127- async fn team_membership (
118+ fn team_membership (
128119 & self ,
129120 org_id : i32 ,
130121 team_id : i32 ,
131122 username : & str ,
132- _auth : & AccessToken ,
133123 ) -> Result < GitHubTeamMembership , GitHubError > {
134124 let team = self
135- . data
136125 . orgs
137126 . iter ( )
138127 . find ( |org| org. id == org_id)
@@ -150,14 +139,12 @@ impl GitHubClient for MockGitHubClient {
150139 }
151140 }
152141
153- async fn org_membership (
142+ fn org_membership (
154143 & self ,
155144 org_id : i32 ,
156145 username : & str ,
157- _auth : & AccessToken ,
158146 ) -> Result < GitHubOrgMembership , GitHubError > {
159147 let org = self
160- . data
161148 . orgs
162149 . iter ( )
163150 . find ( |org| org. id == org_id)
@@ -180,14 +167,6 @@ impl GitHubClient for MockGitHubClient {
180167 Err ( not_found ( ) )
181168 }
182169 }
183-
184- async fn public_keys (
185- & self ,
186- _username : & str ,
187- _password : & str ,
188- ) -> Result < Vec < GitHubPublicKey > , GitHubError > {
189- Ok ( self . data . public_keys . iter ( ) . map ( Into :: into) . collect ( ) )
190- }
191170}
192171
193172fn not_found ( ) -> GitHubError {
@@ -197,7 +176,6 @@ fn not_found() -> GitHubError {
197176pub ( crate ) struct MockData {
198177 orgs : & ' static [ MockOrg ] ,
199178 users : & ' static [ MockUser ] ,
200- public_keys : & ' static [ MockPublicKey ] ,
201179}
202180
203181struct MockUser {
@@ -219,19 +197,3 @@ struct MockTeam {
219197 name : & ' static str ,
220198 members : & ' static [ & ' static str ] ,
221199}
222-
223- struct MockPublicKey {
224- key_identifier : & ' static str ,
225- key : & ' static str ,
226- is_current : bool ,
227- }
228-
229- impl From < & ' static MockPublicKey > for GitHubPublicKey {
230- fn from ( k : & ' static MockPublicKey ) -> Self {
231- Self {
232- key_identifier : k. key_identifier . to_string ( ) ,
233- key : k. key . to_string ( ) ,
234- is_current : k. is_current ,
235- }
236- }
237- }
0 commit comments