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 , GitHubPublicKey , GitHubTeam ,
4+ GitHubTeamMembership , GithubUser , MockGitHubClient ,
65} ;
7- use oauth2:: AccessToken ;
86use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
97
108static NEXT_GH_ID : AtomicUsize = AtomicUsize :: new ( 0 ) ;
@@ -61,20 +59,35 @@ pub(crate) const MOCK_GITHUB_DATA: MockData = MockData {
6159 ] ,
6260} ;
6361
64- pub ( crate ) struct MockGitHubClient {
65- data : & ' static MockData ,
66- }
62+ impl MockData {
63+ pub fn as_mock_client ( & ' static self ) -> MockGitHubClient {
64+ let mut mock = MockGitHubClient :: new ( ) ;
65+
66+ mock. expect_current_user ( )
67+ . returning ( |_auth| self . current_user ( ) ) ;
68+
69+ mock. expect_org_by_name ( )
70+ . returning ( |org_name, _auth| self . org_by_name ( org_name) ) ;
71+
72+ mock. expect_team_by_name ( )
73+ . returning ( |org_name, team_name, _auth| self . team_by_name ( org_name, team_name) ) ;
74+
75+ mock. expect_team_membership ( )
76+ . returning ( |org_id, team_id, username, _auth| {
77+ self . team_membership ( org_id, team_id, username)
78+ } ) ;
79+
80+ mock. expect_org_membership ( )
81+ . returning ( |org_id, username, _auth| self . org_membership ( org_id, username) ) ;
6782
68- impl MockGitHubClient {
69- pub ( crate ) fn new ( data : & ' static MockData ) -> Self {
70- Self { data }
83+ mock. expect_public_keys ( )
84+ . returning ( |_username, _password| self . public_keys ( ) ) ;
85+
86+ mock
7187 }
72- }
7388
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 ] ;
89+ fn current_user ( & self ) -> Result < GithubUser , GitHubError > {
90+ let user = & self . users [ 0 ] ;
7891 Ok ( GithubUser {
7992 id : user. id ,
8093 login : user. login . into ( ) ,
@@ -84,13 +97,8 @@ impl GitHubClient for MockGitHubClient {
8497 } )
8598 }
8699
87- async fn org_by_name (
88- & self ,
89- org_name : & str ,
90- _auth : & AccessToken ,
91- ) -> Result < GitHubOrganization , GitHubError > {
100+ fn org_by_name ( & self , org_name : & str ) -> Result < GitHubOrganization , GitHubError > {
92101 let org = self
93- . data
94102 . orgs
95103 . iter ( )
96104 . find ( |org| org. name == org_name. to_lowercase ( ) )
@@ -101,14 +109,8 @@ impl GitHubClient for MockGitHubClient {
101109 } )
102110 }
103111
104- async fn team_by_name (
105- & self ,
106- org_name : & str ,
107- team_name : & str ,
108- auth : & AccessToken ,
109- ) -> Result < GitHubTeam , GitHubError > {
112+ fn team_by_name ( & self , org_name : & str , team_name : & str ) -> Result < GitHubTeam , GitHubError > {
110113 let team = self
111- . data
112114 . orgs
113115 . iter ( )
114116 . find ( |org| org. name == org_name. to_lowercase ( ) )
@@ -120,19 +122,17 @@ impl GitHubClient for MockGitHubClient {
120122 Ok ( GitHubTeam {
121123 id : team. id ,
122124 name : Some ( team. name . into ( ) ) ,
123- organization : self . org_by_name ( org_name, auth ) . await ?,
125+ organization : self . org_by_name ( org_name) ?,
124126 } )
125127 }
126128
127- async fn team_membership (
129+ fn team_membership (
128130 & self ,
129131 org_id : i32 ,
130132 team_id : i32 ,
131133 username : & str ,
132- _auth : & AccessToken ,
133134 ) -> Result < GitHubTeamMembership , GitHubError > {
134135 let team = self
135- . data
136136 . orgs
137137 . iter ( )
138138 . find ( |org| org. id == org_id)
@@ -150,14 +150,12 @@ impl GitHubClient for MockGitHubClient {
150150 }
151151 }
152152
153- async fn org_membership (
153+ fn org_membership (
154154 & self ,
155155 org_id : i32 ,
156156 username : & str ,
157- _auth : & AccessToken ,
158157 ) -> Result < GitHubOrgMembership , GitHubError > {
159158 let org = self
160- . data
161159 . orgs
162160 . iter ( )
163161 . find ( |org| org. id == org_id)
@@ -181,12 +179,8 @@ impl GitHubClient for MockGitHubClient {
181179 }
182180 }
183181
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 ( ) )
182+ fn public_keys ( & self ) -> Result < Vec < GitHubPublicKey > , GitHubError > {
183+ Ok ( self . public_keys . iter ( ) . map ( Into :: into) . collect ( ) )
190184 }
191185}
192186
0 commit comments