Lines
69.23 %
Functions
15.38 %
Branches
100 %
use sqlx::Row;
use std::fmt::Debug;
use supp_macro::command;
use super::{CmdError, CmdResult};
use crate::{
config::{ConfigError, ConfigOption, config, set_config},
db::get_connection,
};
command! {
GetConfig {
#[required]
name: String,
} => {
Ok(config(&name).await?.map(|v| match v {
ConfigOption::String(s) => CmdResult::String(s),
ConfigOption::Blob(b) => CmdResult::Data(b),
}))
}
GetVersion {
const HASH: &str = env!("GIT_HASH");
Ok(Some(CmdResult::String(HASH.to_string())))
GetBuildDate {
const BUILD: &str = env!("BUILD_DATE");
Ok(Some(CmdResult::String(BUILD.to_string())))
SetConfig {
value: String,
set_config(&name, ConfigOption::String(value)).await?;
Ok(None)
SelectColumn {
field: String,
table: String,
let mut conn = get_connection().await.map_err(|err| {
log::error!("{}", t!("Database error: %{err}", err = err : {:?}));
ConfigError::DB
})?;
let values: Vec<String> = sqlx::query(&format!("SELECT {}::text FROM {}", field, table))
.fetch_all(&mut *conn)
.await?
.into_iter()
.map(|row| row.get::<Option<String>, _>(0).unwrap_or_default())
.collect();
Ok(Some(CmdResult::Lines(values)))
#[cfg(test)]
mod command_config_tests {
use super::*;
use crate::{db::DB_POOL, user::User};
use sqlx::{PgPool, types::Uuid};
use supp_macro::local_db_sqlx_test;
use tokio::sync::OnceCell;
/// Context for keeping environment intact
static CONTEXT: OnceCell<()> = OnceCell::const_new();
static USER: OnceCell<User> = OnceCell::const_new();
async fn setup() {
CONTEXT
.get_or_init(|| async {
#[cfg(feature = "testlog")]
let _ = env_logger::builder()
.is_test(true)
.filter_level(log::LevelFilter::Trace)
.try_init();
})
.await;
USER.get_or_init(|| async { User { id: Uuid::new_v4() } })
#[local_db_sqlx_test]
async fn test_config_string(pool: PgPool) -> anyhow::Result<()> {
let opt = ConfigOption::String("testval".to_string());
crate::config::set_config("testfield", opt.clone())
.await
.unwrap();
let val = GetConfig::new()
.name("testfield".to_string())
.run()
assert_eq!(opt.to_string(), val.to_string());