1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-08-07 17:03:01 +03:00
Files
authentication-service/crates/oidc-client/tests/it/requests/account_management.rs
Kévin Commaille 4eeedbef31 Add account management URL for clients
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
2024-03-19 15:05:27 +01:00

136 lines
4.4 KiB
Rust

// Copyright 2024 Kévin Commaille.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
use std::collections::HashMap;
use mas_oidc_client::requests::account_management::{
build_account_management_url, AccountManagementActionFull,
};
use url::Url;
#[test]
fn build_url() {
let account_management_uri = Url::parse("http://localhost/account_management/").unwrap();
// No params
let url = build_account_management_url(account_management_uri.clone(), None, None).unwrap();
assert_eq!(url.query(), None);
// Action without device ID.
let url = build_account_management_url(
account_management_uri.clone(),
Some(AccountManagementActionFull::Profile),
None,
)
.unwrap();
let query_pairs = url.query_pairs().collect::<HashMap<_, _>>();
assert_eq!(query_pairs.len(), 1);
assert_eq!(query_pairs.get("action").unwrap(), "org.matrix.profile");
// Action with device ID.
let url = build_account_management_url(
account_management_uri.clone(),
Some(AccountManagementActionFull::SessionEnd {
device_id: "mydevice".to_owned(),
}),
None,
)
.unwrap();
let query_pairs = url.query_pairs().collect::<HashMap<_, _>>();
assert_eq!(query_pairs.len(), 2);
assert_eq!(query_pairs.get("action").unwrap(), "org.matrix.session_end");
assert_eq!(query_pairs.get("device_id").unwrap(), "mydevice");
// ID Token hint.
let url = build_account_management_url(
account_management_uri.clone(),
None,
Some("anidtokenthat.might.looksomethinglikethis".to_owned()),
)
.unwrap();
let query_pairs = url.query_pairs().collect::<HashMap<_, _>>();
assert_eq!(query_pairs.len(), 1);
assert_eq!(
query_pairs.get("id_token_hint").unwrap(),
"anidtokenthat.might.looksomethinglikethis"
);
// Action without device ID and ID Token hint.
let url = build_account_management_url(
account_management_uri.clone(),
Some(AccountManagementActionFull::AccountDeactivate),
Some("anotheridtokenthat.might.looksomethinglikethis".to_owned()),
)
.unwrap();
let query_pairs = url.query_pairs().collect::<HashMap<_, _>>();
assert_eq!(query_pairs.len(), 2);
assert_eq!(
query_pairs.get("action").unwrap(),
"org.matrix.account_deactivate"
);
assert_eq!(
query_pairs.get("id_token_hint").unwrap(),
"anotheridtokenthat.might.looksomethinglikethis"
);
// Action with device ID and ID Token hint.
let url = build_account_management_url(
account_management_uri,
Some(AccountManagementActionFull::SessionView {
device_id: "myseconddevice".to_owned(),
}),
Some("athirdidtokenthat.might.looksomethinglikethis".to_owned()),
)
.unwrap();
let query_pairs = url.query_pairs().collect::<HashMap<_, _>>();
assert_eq!(query_pairs.len(), 3);
assert_eq!(
query_pairs.get("action").unwrap(),
"org.matrix.session_view"
);
assert_eq!(query_pairs.get("device_id").unwrap(), "myseconddevice");
assert_eq!(
query_pairs.get("id_token_hint").unwrap(),
"athirdidtokenthat.might.looksomethinglikethis"
);
// Account management URI with a query already.
let account_management_uri_with_query =
Url::parse("http://localhost/account_management?param=value").unwrap();
let url = build_account_management_url(
account_management_uri_with_query,
Some(AccountManagementActionFull::SessionsList),
Some("afinalidtokenthat.might.looksomethinglikethis".to_owned()),
)
.unwrap();
let query_pairs = url.query_pairs().collect::<HashMap<_, _>>();
assert_eq!(query_pairs.len(), 3);
assert_eq!(
query_pairs.get("action").unwrap(),
"org.matrix.sessions_list"
);
assert_eq!(
query_pairs.get("id_token_hint").unwrap(),
"afinalidtokenthat.might.looksomethinglikethis"
);
}