mainsail 0.1.0

Batteries-included ActivityPub Library
Documentation
use data::new_test_actor;
use openssl::pkey::{PKey, Private};
use data::{EXT_ACTOR_1, EXT_NOTE_1, PRIVATE_KEY_STR};
use crate::activitypub::objects::actor::Actor;
use crate::local::actors::{LocalActorStub, new_local_actor_with_uuid};
use crate::local::notes;
use crate::local::InternalResult;
use crate::database::Database;
use crate::external::save_external_actor;
use crate::external::save_external_note_no_validation;

pub mod data;
pub mod test_server;
pub mod requests;

pub fn get_private_key() -> PKey<Private> {
    PKey::private_key_from_pem(PRIVATE_KEY_STR.as_bytes()).unwrap()
}

pub fn add_external_actor_at_domain(db: &mut Database, domain: &str) -> InternalResult<Actor> {
    let actor_id = format!("{domain}/actors/1");
    create_and_save_external_actor(db, &actor_id, "Test Actor", "@test")
}

fn create_and_save_external_actor(db: &mut Database, id: &str, name: &str, handle: &str) -> InternalResult<Actor> {
    let actor = new_test_actor(id, name, handle);
    save_external_actor(db, &actor)?;
    Ok(actor)
}

pub fn add_test_data(db: &mut Database) {
    let actor_domain = "example.com";
    db.set_domain(actor_domain).unwrap();

    let actor_id = new_local_actor_with_uuid(db, "1", "awp", "Alex Petros", "Main").unwrap();
    let pkey = PKey::generate_x25519().unwrap();
    let sender = LocalActorStub { id: actor_id, domain: actor_domain.to_string(), pkey };

    notes::create_with_uuid(db, "1".to_string(), &sender, "First post!", None).unwrap();
    notes::create_with_uuid(db, "2".to_string(), &sender, "Second post!", None).unwrap();
    notes::create_with_uuid(db, "3".to_string(), &sender, "Third post!", None).unwrap();

    save_external_actor(db, &EXT_ACTOR_1).unwrap();
    save_external_note_no_validation(db, &EXT_NOTE_1, &EXT_ACTOR_1.id).unwrap();
}

pub fn get_memory_db_no_test_data() -> (Database, String) {
    let db = Database::new_in_memory().unwrap();
    db.init().unwrap();
    let name = db.get_path().to_owned();
    (db, name)
}

pub fn get_named_memory_db(name: &str) -> Database {
    Database::new(name).unwrap()
}

pub fn get_memory_db() -> (Database, String) {
    let (mut db, name) = get_memory_db_no_test_data();
    add_test_data(&mut db);
    (db, name)
}