You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: pats.rs
    path of file: ./repos/labrinth/tests/common
    
    the code of the file until where you have to start completion: #![allow(dead_code)]

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

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 transa
    
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::PersonalAccessToken {
        id,
        name: format!("test_pat_{}", scopes.bits()),
        access_token: format!("mrp_{}", id.0),
        scopes,
        user_id: database::models::ids::UserId(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
}