sqlxo 0.9.1

sqlxo: small SQL query builder + derives for filterable ORM-ish patterns
Documentation
use crate::helpers::{
	CreateItem,
	CreateItemCreation,
	NormalizeString,
	WriteModelSkipItem,
	WriteModelSkipItemCreation,
};
use sqlxo::{
	Buildable,
	Creatable,
	QueryBuilder,
};
use uuid::Uuid;

#[test]
fn test_create_struct_generated() {
	let create = CreateItemCreation {
		id:          Uuid::new_v4(),
		name:        "new item".into(),
		description: "new desc".into(),
		price:       99.99,
	};

	assert_eq!(create.name, "new item");
	assert_eq!(create.description, "new desc");
	assert_eq!(create.price, 99.99);
}

#[test]
fn test_create_derives_creatable() {
	assert_eq!(CreateItem::INSERT_MARKER_FIELD, Some("created_at"));
}

#[test]
fn test_insert_sql_exact_match() {
	let test_id = Uuid::new_v4();

	let create = CreateItemCreation {
		id:          test_id,
		name:        "test".into(),
		description: "desc".into(),
		price:       99.99,
	};

	let plan = QueryBuilder::<CreateItem>::insert().model(create).build();

	assert_eq!(
		plan.sql().normalize(),
		"INSERT INTO create_item (id, name, description, price, created_at) \
		 VALUES ($1, $2, $3, $4, NOW())"
	);
}

#[test]
fn test_create_ignores_joinvalue_and_sqlx_skip_fields() {
	let test_id = Uuid::new_v4();
	let material_id = Uuid::new_v4();

	let create = WriteModelSkipItemCreation {
		id:          test_id,
		name:        "write skip".into(),
		price:       13.5,
		material_id: Some(material_id),
		material:    None,
	};

	let plan = QueryBuilder::<WriteModelSkipItem>::insert()
		.model(create)
		.build();

	assert_eq!(
		plan.sql().normalize(),
		"INSERT INTO write_model_skip_item (id, name, price, material_id, \
		 created_at) VALUES ($1, $2, $3, $4, NOW())"
	);
}