lemmy_db_schema 1.0.0-beta.0

A link aggregator for the fediverse
use crate::source::{
  instance::Instance,
  local_site::{LocalSite, LocalSiteInsertForm},
  local_site_rate_limit::{LocalSiteRateLimit, LocalSiteRateLimitInsertForm},
  person::{Person, PersonInsertForm},
  site::{Site, SiteInsertForm},
};
use lemmy_diesel_utils::{connection::DbPool, traits::Crud};
use lemmy_utils::error::LemmyResult;

pub struct TestData {
  pub instance: Instance,
  pub site: Site,
  pub local_site: LocalSite,
  pub person: Person,
}

impl TestData {
  pub async fn create(pool: &mut DbPool<'_>) -> LemmyResult<Self> {
    let instance = Instance::read_or_create(pool, "my_domain.tld").await?;

    let site_form = SiteInsertForm::new("test site".to_string(), instance.id);
    let site = Site::create(pool, &site_form).await?;

    let system_acct =
      Person::create(pool, &PersonInsertForm::test_form(instance.id, "langs")).await?;
    let local_site_form = LocalSiteInsertForm {
      ..LocalSiteInsertForm::new(site.id, system_acct.id)
    };
    let local_site = LocalSite::create(pool, &local_site_form).await?;
    LocalSiteRateLimit::create(pool, &LocalSiteRateLimitInsertForm::new(local_site.id)).await?;

    let person_form = PersonInsertForm::test_form(instance.id, "holly");

    let person = Person::create(pool, &person_form).await?;

    Ok(Self {
      instance,
      site,
      local_site,
      person,
    })
  }

  pub async fn delete(self, pool: &mut DbPool<'_>) -> LemmyResult<()> {
    Instance::delete(pool, self.instance.id).await?;
    Ok(())
  }
}