#[macro_use]
mod testutil;
use msi::{Category, Column, Insert, Package, PackageType, Value};
use std::io::{Cursor, ErrorKind};
#[test]
fn int_column_value_range() {
let cursor = Cursor::new(Vec::new());
let mut package = Package::create(PackageType::Installer, cursor).unwrap();
let columns =
vec![Column::build("Number").primary_key().range(0, 100).int16()];
package.create_table("Numbers", columns).unwrap();
let cursor = package.into_inner().unwrap();
let mut package = Package::open(cursor).unwrap();
{
let table = package.get_table("Numbers").unwrap();
let column = table.get_column("Number").unwrap();
assert_eq!(column.value_range(), Some((0, 100)));
}
let query = Insert::into("Numbers").row(vec![Value::Int(-7)]);
assert_error!(
package.insert_rows(query),
ErrorKind::InvalidInput,
"-7 is not a valid value for column \"Number\""
);
let query = Insert::into("Numbers").row(vec![Value::Int(101)]);
assert_error!(
package.insert_rows(query),
ErrorKind::InvalidInput,
"101 is not a valid value for column \"Number\""
);
let query = Insert::into("Numbers").row(vec![Value::Int(100)]);
package.insert_rows(query).unwrap();
}
#[test]
fn string_column_category() {
let cursor = Cursor::new(Vec::new());
let mut package = Package::create(PackageType::Installer, cursor).unwrap();
let columns = vec![Column::build("Property")
.primary_key()
.category(Category::Property)
.string(32)];
package.create_table("Properties", columns).unwrap();
let cursor = package.into_inner().unwrap();
let mut package = Package::open(cursor).unwrap();
{
let table = package.get_table("Properties").unwrap();
let column = table.get_column("Property").unwrap();
assert_eq!(column.category(), Some(Category::Property));
}
let query = Insert::into("Properties").row(vec![Value::from("$99")]);
assert_error!(
package.insert_rows(query),
ErrorKind::InvalidInput,
"\"$99\" is not a valid value for column \"Property\""
);
let query = Insert::into("Properties").row(vec![Value::from("%Foo")]);
package.insert_rows(query).unwrap();
}
#[test]
fn string_column_enum_values() {
let cursor = Cursor::new(Vec::new());
let mut package = Package::create(PackageType::Installer, cursor).unwrap();
let columns = vec![Column::build("Day")
.primary_key()
.enum_values(&["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"])
.string(3)];
package.create_table("Days", columns).unwrap();
let cursor = package.into_inner().unwrap();
let mut package = Package::open(cursor).unwrap();
{
let table = package.get_table("Days").unwrap();
let column = table.get_column("Day").unwrap();
assert_eq!(
column.enum_values(),
Some(
[
"Sun".to_string(),
"Mon".to_string(),
"Tue".to_string(),
"Wed".to_string(),
"Thu".to_string(),
"Fri".to_string(),
"Sat".to_string(),
]
.as_ref(),
)
);
}
let query = Insert::into("Days").row(vec![Value::from("Sit")]);
assert_error!(
package.insert_rows(query),
ErrorKind::InvalidInput,
"\"Sit\" is not a valid value for column \"Day\""
);
let query = Insert::into("Days").row(vec![Value::from("Sat")]);
package.insert_rows(query).unwrap();
}