Skip to content

Commit c1fdaa4

Browse files
committed
refactor: better mocking of backend API
1 parent 113ccf2 commit c1fdaa4

23 files changed

+496
-94
lines changed

Cargo.lock

Lines changed: 71 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

github_api/src/github_api_trait.rs

Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
pub mod tests;
2+
use std::future::Future;
3+
4+
use crate::{
5+
apis::{
6+
apps_api::{
7+
AppsSlashGetInstallationError, AppsSlashListReposAccessibleToInstallationError,
8+
},
9+
configuration,
10+
issues_api::{
11+
IssuesSlashCreateError, IssuesSlashListCommentsForRepoError,
12+
IssuesSlashListForRepoError,
13+
},
14+
users_api::UsersSlashGetAuthenticatedError,
15+
Error,
16+
},
17+
models,
18+
};
19+
20+
/// This is how we do dependency injection / mocking.
21+
pub trait GithubApiTrait: 'static {
22+
fn users_slash_get_authenticated(
23+
&self,
24+
configuration: &configuration::Configuration,
25+
) -> impl Future<
26+
Output = Result<
27+
models::UsersGetAuthenticated200Response,
28+
Error<UsersSlashGetAuthenticatedError>,
29+
>,
30+
>;
31+
fn issues_slash_create(
32+
&self,
33+
configuration: &configuration::Configuration,
34+
owner: &str,
35+
repo: &str,
36+
issues_create_request: models::IssuesCreateRequest,
37+
) -> impl std::future::Future<Output = Result<models::Issue, Error<IssuesSlashCreateError>>>;
38+
fn apps_slash_list_repos_accessible_to_installation(
39+
&self,
40+
configuration: &configuration::Configuration,
41+
per_page: Option<i32>,
42+
page: Option<i32>,
43+
) -> impl Future<
44+
Output = Result<
45+
models::AppsListReposAccessibleToInstallation200Response,
46+
Error<AppsSlashListReposAccessibleToInstallationError>,
47+
>,
48+
>;
49+
fn issues_slash_list_comments_for_repo(
50+
&self,
51+
configuration: &configuration::Configuration,
52+
owner: &str,
53+
repo: &str,
54+
sort: Option<&str>,
55+
direction: Option<&str>,
56+
since: Option<String>,
57+
per_page: Option<i32>,
58+
page: Option<i32>,
59+
) -> impl Future<
60+
Output = Result<Vec<models::IssueComment>, Error<IssuesSlashListCommentsForRepoError>>,
61+
>;
62+
fn apps_slash_get_installation(
63+
&self,
64+
configuration: &configuration::Configuration,
65+
installation_id: i32,
66+
) -> impl Future<Output = Result<models::Installation, Error<AppsSlashGetInstallationError>>>;
67+
fn issues_slash_list_for_repo(
68+
&self,
69+
configuration: &configuration::Configuration,
70+
owner: &str,
71+
repo: &str,
72+
milestone: Option<&str>,
73+
state: Option<&str>,
74+
assignee: Option<&str>,
75+
creator: Option<&str>,
76+
mentioned: Option<&str>,
77+
labels: Option<&str>,
78+
sort: Option<&str>,
79+
direction: Option<&str>,
80+
since: Option<String>,
81+
per_page: Option<i32>,
82+
page: Option<i32>,
83+
) -> impl Future<Output = Result<Vec<models::Issue>, Error<IssuesSlashListForRepoError>>>;
84+
fn users_slash_get_authenticated_request(
85+
&self,
86+
configuration: &configuration::Configuration,
87+
) -> reqwest_wiremock::Builder;
88+
}
89+
90+
pub struct GithubApi;
91+
92+
impl GithubApiTrait for GithubApi {
93+
fn users_slash_get_authenticated(
94+
&self,
95+
configuration: &configuration::Configuration,
96+
) -> impl Future<
97+
Output = Result<
98+
models::UsersGetAuthenticated200Response,
99+
Error<UsersSlashGetAuthenticatedError>,
100+
>,
101+
> {
102+
crate::apis::users_api::users_slash_get_authenticated(configuration)
103+
}
104+
105+
fn issues_slash_create(
106+
&self,
107+
configuration: &configuration::Configuration,
108+
owner: &str,
109+
repo: &str,
110+
issues_create_request: models::IssuesCreateRequest,
111+
) -> impl std::future::Future<Output = Result<models::Issue, Error<IssuesSlashCreateError>>> {
112+
crate::apis::issues_api::issues_slash_create(
113+
configuration,
114+
owner,
115+
repo,
116+
issues_create_request,
117+
)
118+
}
119+
120+
fn apps_slash_list_repos_accessible_to_installation(
121+
&self,
122+
configuration: &configuration::Configuration,
123+
per_page: Option<i32>,
124+
page: Option<i32>,
125+
) -> impl Future<
126+
Output = Result<
127+
models::AppsListReposAccessibleToInstallation200Response,
128+
Error<AppsSlashListReposAccessibleToInstallationError>,
129+
>,
130+
> {
131+
crate::apis::apps_api::apps_slash_list_repos_accessible_to_installation(
132+
configuration,
133+
per_page,
134+
page,
135+
)
136+
}
137+
138+
fn issues_slash_list_comments_for_repo(
139+
&self,
140+
configuration: &configuration::Configuration,
141+
owner: &str,
142+
repo: &str,
143+
sort: Option<&str>,
144+
direction: Option<&str>,
145+
since: Option<String>,
146+
per_page: Option<i32>,
147+
page: Option<i32>,
148+
) -> impl Future<
149+
Output = Result<Vec<models::IssueComment>, Error<IssuesSlashListCommentsForRepoError>>,
150+
> {
151+
crate::apis::issues_api::issues_slash_list_comments_for_repo(
152+
configuration,
153+
owner,
154+
repo,
155+
sort,
156+
direction,
157+
since,
158+
per_page,
159+
page,
160+
)
161+
}
162+
163+
fn apps_slash_get_installation(
164+
&self,
165+
configuration: &configuration::Configuration,
166+
installation_id: i32,
167+
) -> impl Future<Output = Result<models::Installation, Error<AppsSlashGetInstallationError>>> {
168+
crate::apis::apps_api::apps_slash_get_installation(configuration, installation_id)
169+
}
170+
171+
fn issues_slash_list_for_repo(
172+
&self,
173+
configuration: &configuration::Configuration,
174+
owner: &str,
175+
repo: &str,
176+
milestone: Option<&str>,
177+
state: Option<&str>,
178+
assignee: Option<&str>,
179+
creator: Option<&str>,
180+
mentioned: Option<&str>,
181+
labels: Option<&str>,
182+
sort: Option<&str>,
183+
direction: Option<&str>,
184+
since: Option<String>,
185+
per_page: Option<i32>,
186+
page: Option<i32>,
187+
) -> impl Future<Output = Result<Vec<models::Issue>, Error<IssuesSlashListForRepoError>>> {
188+
crate::apis::issues_api::issues_slash_list_for_repo(
189+
configuration,
190+
owner,
191+
repo,
192+
milestone,
193+
state,
194+
assignee,
195+
creator,
196+
mentioned,
197+
labels,
198+
sort,
199+
direction,
200+
since,
201+
per_page,
202+
page,
203+
)
204+
}
205+
206+
fn users_slash_get_authenticated_request(
207+
&self,
208+
configuration: &configuration::Configuration,
209+
) -> reqwest_wiremock::Builder {
210+
crate::apis::users_api::users_slash_get_authenticated_request(configuration)
211+
}
212+
}

shared/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ web-sys = { version = "*", optional = true, default-features = false, features =
3434
any_spawner = "0.2.0"
3535
tracing-subscriber = "0.3.19"
3636
bon = "3.3.2"
37+
mockall = "0.13.1"
3738

3839
[dev-dependencies]
3940
wasm-bindgen-test = "0.3.50"

0 commit comments

Comments
 (0)