@@ -43,6 +43,7 @@ const GRAPHQL_SINGLE: &str = "query($owner: String!, $repo: String!) {
4343}" ;
4444
4545pub struct GitHub {
46+ endpoint : String ,
4647 client : HttpClient ,
4748 github_updater_min_rate_limit : u32 ,
4849}
@@ -51,6 +52,13 @@ impl GitHub {
5152 /// Returns `Err` if the access token has invalid syntax (but *not* if it isn't authorized).
5253 /// Returns `Ok(None)` if there is no access token.
5354 pub fn new ( config : & Config ) -> Result < Option < Self > > {
55+ Self :: with_custom_endpoint ( config, "https://api.github.com/graphql" )
56+ }
57+
58+ pub fn with_custom_endpoint < E : AsRef < str > > (
59+ config : & Config ,
60+ endpoint : E ,
61+ ) -> Result < Option < Self > > {
5462 let mut headers = HeaderMap :: new ( ) ;
5563 headers. insert ( USER_AGENT , HeaderValue :: from_static ( APP_USER_AGENT ) ) ;
5664 headers. insert ( ACCEPT , HeaderValue :: from_static ( "application/json" ) ) ;
@@ -69,6 +77,7 @@ impl GitHub {
6977
7078 Ok ( Some ( GitHub {
7179 client,
80+ endpoint : endpoint. as_ref ( ) . to_owned ( ) ,
7281 github_updater_min_rate_limit : config. github_updater_min_rate_limit ,
7382 } ) )
7483 }
@@ -176,16 +185,9 @@ impl GitHub {
176185 query : & str ,
177186 variables : impl serde:: Serialize ,
178187 ) -> Result < GraphResponse < T > > {
179- #[ cfg( not( test) ) ]
180- let host = "https://api.github.com/graphql" ;
181- #[ cfg( test) ]
182- let host = format ! ( "{}/graphql" , mockito:: server_url( ) ) ;
183- #[ cfg( test) ]
184- let host = & host;
185-
186188 Ok ( self
187189 . client
188- . post ( host )
190+ . post ( & self . endpoint )
189191 . json ( & serde_json:: json!( {
190192 "query" : query,
191193 "variables" : variables,
@@ -256,19 +258,28 @@ struct GraphIssues {
256258
257259#[ cfg( test) ]
258260mod tests {
259- use super :: GitHub ;
261+ use super :: { Config , GitHub } ;
260262 use crate :: repositories:: updater:: { repository_name, RepositoryForge } ;
261263 use crate :: repositories:: RateLimitReached ;
262- use mockito:: mock;
264+
265+ fn mock_server_and_github ( config : & Config ) -> ( mockito:: ServerGuard , GitHub ) {
266+ let server = mockito:: Server :: new ( ) ;
267+ let updater = GitHub :: with_custom_endpoint ( config, format ! ( "{}/graphql" , server. url( ) ) )
268+ . expect ( "GitHub::new failed" )
269+ . unwrap ( ) ;
270+
271+ ( server, updater)
272+ }
263273
264274 #[ test]
265275 fn test_rate_limit_fail ( ) {
266276 crate :: test:: wrapper ( |env| {
267277 let mut config = env. base_config ( ) ;
268278 config. github_accesstoken = Some ( "qsjdnfqdq" . to_owned ( ) ) ;
269- let updater = GitHub :: new ( & config) . expect ( "GitHub::new failed" ) . unwrap ( ) ;
279+ let ( mut server , updater) = mock_server_and_github ( & config) ;
270280
271- let _m1 = mock ( "POST" , "/graphql" )
281+ let _m1 = server
282+ . mock ( "POST" , "/graphql" )
272283 . with_header ( "content-type" , "application/json" )
273284 . with_body (
274285 r#"{"errors":[{"type":"RATE_LIMITED","message":"API rate limit exceeded"}]}"# ,
@@ -288,9 +299,10 @@ mod tests {
288299 crate :: test:: wrapper ( |env| {
289300 let mut config = env. base_config ( ) ;
290301 config. github_accesstoken = Some ( "qsjdnfqdq" . to_owned ( ) ) ;
291- let updater = GitHub :: new ( & config) . expect ( "GitHub::new failed" ) . unwrap ( ) ;
302+ let ( mut server , updater) = mock_server_and_github ( & config) ;
292303
293- let _m1 = mock ( "POST" , "/graphql" )
304+ let _m1 = server
305+ . mock ( "POST" , "/graphql" )
294306 . with_header ( "content-type" , "application/json" )
295307 . with_body ( r#"{"data": {"nodes": [], "rateLimit": {"remaining": 0}}}"# )
296308 . create ( ) ;
@@ -308,9 +320,10 @@ mod tests {
308320 crate :: test:: wrapper ( |env| {
309321 let mut config = env. base_config ( ) ;
310322 config. github_accesstoken = Some ( "qsjdnfqdq" . to_owned ( ) ) ;
311- let updater = GitHub :: new ( & config) . expect ( "GitHub::new failed" ) . unwrap ( ) ;
323+ let ( mut server , updater) = mock_server_and_github ( & config) ;
312324
313- let _m1 = mock ( "POST" , "/graphql" )
325+ let _m1 = server
326+ . mock ( "POST" , "/graphql" )
314327 . with_header ( "content-type" , "application/json" )
315328 . with_body (
316329 r#"{"data": {"nodes": [], "rateLimit": {"remaining": 100000}}, "errors":
@@ -334,9 +347,10 @@ mod tests {
334347 crate :: test:: wrapper ( |env| {
335348 let mut config = env. base_config ( ) ;
336349 config. github_accesstoken = Some ( "qsjdnfqdq" . to_owned ( ) ) ;
337- let updater = GitHub :: new ( & config) . expect ( "GitHub::new failed" ) . unwrap ( ) ;
350+ let ( mut server , updater) = mock_server_and_github ( & config) ;
338351
339- let _m1 = mock ( "POST" , "/graphql" )
352+ let _m1 = server
353+ . mock ( "POST" , "/graphql" )
340354 . with_header ( "content-type" , "application/json" )
341355 . with_body (
342356 r#"{"data": {"repository": {"id": "hello", "nameWithOwner": "foo/bar",
0 commit comments