use crate::{
    database::{self, models::generate_pat_id},
    models::pats::Scopes,
};
use chrono::Utc;

use super::database::TemporaryDatabase;

// Creates a PAT with the given scopes, and returns the access token
// Interfacing with the db directly, rather than using a ourte,
//  allows us to test with scopes that are not allowed to be created by PATs
pub async fn create_test_pat(
    scopes: Scopes,
    user_id: i64,
    db: &TemporaryDatabase,
) -> String {
    let mut transaction = db.pool.begin().await.unwrap();
    let id = generate_pat_id(&mut transaction).await.unwrap();
    let pat = database::models::pat_item::DBPersonalAccessToken {
        id,
        name: format!("test_pat_{}", scopes.bits()),
        access_token: format!("mrp_{}", id.0),
        scopes,
        user_id: database::models::ids::DBUserId(user_id),
        created: Utc::now(),
        expires: Utc::now() + chrono::Duration::days(1),
        last_used: None,
    };
    pat.insert(&mut transaction).await.unwrap();
    transaction.commit().await.unwrap();
    pat.access_token
}
