113 lines
3.2 KiB
Rust
113 lines
3.2 KiB
Rust
/*
|
|
* SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <[email protected]>
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*/
|
|
|
|
mod integration;
|
|
mod seeder;
|
|
|
|
use integration::stalwart::shared as shared_stalwart;
|
|
use vandelay::jmap::account::{self, AccountSelector};
|
|
use vandelay::jmap::http::{Auth, HttpClient, RetryPolicy};
|
|
use vandelay::jmap::session::Session;
|
|
|
|
fn admin_client() -> HttpClient {
|
|
HttpClient::new(
|
|
Auth::Basic {
|
|
user: seeder::ADMIN_USER.into(),
|
|
password: seeder::ADMIN_PASSWORD.into(),
|
|
},
|
|
RetryPolicy::new(5),
|
|
true,
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
#[ignore = "requires Docker"]
|
|
fn session_discovery_and_admin_principal_resolution() {
|
|
let stalwart = shared_stalwart();
|
|
let fx = seeder::provision(stalwart.base_url()).expect("provision");
|
|
let client = admin_client();
|
|
|
|
let session =
|
|
Session::discover(&client, &fx.base_url).expect("session discovery via .well-known");
|
|
assert!(
|
|
session.api_url.starts_with("https://") || session.api_url.starts_with("http://"),
|
|
"apiUrl should be absolute: {}",
|
|
session.api_url
|
|
);
|
|
let limits = session.core_limits().expect("core limits present");
|
|
assert!(limits.max_objects_in_get >= 1);
|
|
assert!(limits.max_concurrent_requests >= 1);
|
|
assert!(
|
|
!session.accounts.is_empty(),
|
|
"authenticated admin session must enumerate accounts"
|
|
);
|
|
|
|
assert_eq!(fx.domain, seeder::DOMAIN);
|
|
assert!(
|
|
!fx.domain_id.is_empty(),
|
|
"seeder should have ensured a domain id"
|
|
);
|
|
assert_eq!(
|
|
fx.admin_login,
|
|
(
|
|
seeder::ADMIN_USER.to_owned(),
|
|
seeder::ADMIN_PASSWORD.to_owned()
|
|
)
|
|
);
|
|
|
|
let target = fx.account("test1").expect("test1 seeded");
|
|
assert!(
|
|
!target.admin_role,
|
|
"test1 must be a regular user, not admin"
|
|
);
|
|
let seeded = target.seeded.as_ref().expect("test1 seed stats");
|
|
assert!(seeded.emails > 0, "test1 should be seeded with emails");
|
|
assert!(
|
|
seeded.mailboxes_created >= 7,
|
|
"test1 layout has at least 7 mailboxes"
|
|
);
|
|
assert!(
|
|
seeded.file_nodes >= 9,
|
|
"test1 layout has at least 9 file nodes"
|
|
);
|
|
assert!(
|
|
seeded.contacts > 0,
|
|
"test1 should be seeded with at least one contact"
|
|
);
|
|
assert!(
|
|
seeded.events > 0,
|
|
"test1 should be seeded with at least one event"
|
|
);
|
|
assert!(
|
|
seeded.address_books > 0,
|
|
"test1 layout requests an extra address book"
|
|
);
|
|
assert!(
|
|
seeded.calendars > 0,
|
|
"test1 layout requests an extra calendar"
|
|
);
|
|
assert!(seeded.identity, "test1 layout requests a custom identity");
|
|
assert_eq!(
|
|
seeded.sieve_active,
|
|
Some(true),
|
|
"test1 layout activates a sieve script"
|
|
);
|
|
|
|
let resolved = account::resolve(
|
|
&AccountSelector::Name(target.email.clone()),
|
|
&session,
|
|
&client,
|
|
)
|
|
.expect("admin principal resolution");
|
|
assert_eq!(
|
|
resolved, target.account_id,
|
|
"{} must resolve to the seeded account id {}",
|
|
target.email, target.account_id
|
|
);
|
|
|
|
seeder::teardown(stalwart.base_url()).expect("teardown");
|
|
}
|