Skip to content
This repository was archived by the owner on Jul 6, 2024. It is now read-only.

Commit 3395516

Browse files
committed
test: Add test to check auto refresh behavior
1 parent 8de9edd commit 3395516

File tree

4 files changed

+77
-2
lines changed

4 files changed

+77
-2
lines changed

.github/workflows/checks.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
uses: dtolnay/rust-toolchain@stable
3030

3131
- name: Run Tests
32-
run: cargo test
32+
run: cargo test --tests --features "http-ureq"
3333

3434

3535
fmt:

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ optional = true
4040
[dev-dependencies]
4141
env_logger = "0.10"
4242
tokio = {version ="1", features = ["full"]}
43+
httpmock = "0.6"
4344

4445
[[example]]
4546
name = "user_id"

src/clientv2/request_repeater.rs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,73 @@ impl RequestFactory for RequestRepeater {
150150
.bearer_token(accessor.access_token.expose_secret())
151151
}
152152
}
153+
154+
#[cfg(test)]
155+
mod test {
156+
157+
#[test]
158+
#[cfg(feature = "http-ureq")]
159+
fn request_repeats_with_401() {
160+
use crate::domain::{EventId, SecretString, UserUid};
161+
use crate::http::X_PM_UID_HEADER;
162+
use crate::requests::{GetLatestEventRequest, UserAuth};
163+
use crate::RequestRepeater;
164+
use httpmock::prelude::*;
165+
use secrecy::Secret;
166+
167+
let server = MockServer::start();
168+
let url = server.base_url();
169+
170+
let client = crate::http::ClientBuilder::new()
171+
.base_url(&url)
172+
.build::<crate::http::ureq_client::UReqClient>()
173+
.unwrap();
174+
175+
let repeater = RequestRepeater::new(
176+
UserAuth {
177+
uid: Secret::new(UserUid("test-uid".to_string())),
178+
access_token: SecretString::new("secret-token".to_string()),
179+
refresh_token: SecretString::new("refresh-token".to_string()),
180+
},
181+
None,
182+
);
183+
184+
let expected_latest_event_id = EventId("My_Event_Id".to_string());
185+
186+
let latest_event_first_call = server.mock(|when, then| {
187+
when.method(GET)
188+
.path("/core/v4/events/latest")
189+
.header(X_PM_UID_HEADER, "test-uid");
190+
then.status(401);
191+
});
192+
193+
let latest_event_second_call = server.mock(|when, then| {
194+
when.method(GET)
195+
.path("/core/v4/events/latest")
196+
.header(X_PM_UID_HEADER, "User_UID");
197+
then.status(200)
198+
.body(format!(r#"{{"EventID":"{}"}}"#, expected_latest_event_id.0));
199+
});
200+
201+
let refresh_mock = server.mock(|when, then| {
202+
when.method(POST).path("/auth/v4/refresh");
203+
204+
let response = r#"{
205+
"UID": "User_UID",
206+
"TokenType": "type",
207+
"AccessToken": "access-token",
208+
"RefreshToken": "refresh-token",
209+
"Scope": "Scope"
210+
}"#;
211+
212+
then.status(200).body(response);
213+
});
214+
215+
let latest_event = repeater.execute(&client, GetLatestEventRequest {}).unwrap();
216+
assert_eq!(latest_event.event_id, expected_latest_event_id);
217+
218+
latest_event_first_call.assert();
219+
refresh_mock.assert();
220+
latest_event_second_call.assert();
221+
}
222+
}

src/http/ureq_client.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,12 @@ impl TryFrom<ClientBuilder> for UReqClient {
3535
builder = builder.proxy(proxy);
3636
}
3737

38+
#[cfg(not(test))]
39+
{
40+
builder = builder.https_only(true)
41+
}
42+
3843
let agent = builder
39-
.https_only(true)
4044
.user_agent(&value.user_agent)
4145
.max_idle_connections(0)
4246
.max_idle_connections_per_host(0)

0 commit comments

Comments
 (0)