1
//! A tenant left on an older schema is brought forward.
2
//!
3
//! The case the migrator exists for. A tenant created before a release carries
4
//! that release's migrations and nothing since; nothing else in the system ever
5
//! revisits it.
6
#![cfg(feature = "db")]
7

            
8
use server::fleet::migrate_fleet;
9
use tests_integration::fleet_support::{
10
    accounted_for, admin_connect, admin_id, applied_migrations, expected_migrations, forget_tenant,
11
    is_fully_migrated, migrate_to_first, quarantine_of, register_tenant,
12
};
13

            
14
#[tokio::test]
15
1
async fn a_tenant_on_an_older_schema_is_brought_forward() -> anyhow::Result<()> {
16
1
    let admin = admin_connect().await;
17
1
    let (id, database_name) = register_tenant(&admin, "fleet-old", true).await;
18

            
19
    // Three of the five: an older release's worth of schema, not an empty one.
20
1
    migrate_to_first(&database_name, 3).await;
21
1
    let before = applied_migrations(&database_name).await;
22
1
    assert_eq!(before, 3, "precondition: the tenant starts partly migrated");
23
1
    assert!(before < expected_migrations());
24

            
25
1
    let report = migrate_fleet(admin_id()).await?;
26

            
27
1
    assert!(accounted_for(&report, id), "{report:?}");
28
1
    assert!(
29
1
        is_fully_migrated(&database_name).await,
30
        "the remaining migrations must be applied, not skipped as 'already migrated'"
31
    );
32
1
    assert_eq!(quarantine_of(&admin, id).await, None);
33

            
34
1
    forget_tenant(&admin, id, &database_name).await;
35
2
    Ok(())
36
1
}