using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using System.Data;
using IndianHealthService.BMXNet.Model;
namespace IndianHealthService.BMXNet.Tests
{
///
/// BMX ADO SS^BMX TEST FILE^^~~~~~
///
///
///
public class FieldTypesAndFieldConstraints : BmxValidUserTestSuite
{
private DataRow _testRow;
public DataRow TestRow
{
get { return _testRow; }
set { _testRow = value; }
}
private DataTable _testTable;
public DataTable TestTable
{
get { return _testTable; }
set { _testTable = value; }
}
public bool GenerateValidTestRow()
{
// BMXNetScriptedBroker broker = new BMXNetScriptedBroker();
// broker.AddCall(
// @"{BMX}0007700062007BMX;;;;000470BMX ADO SS^000300140BMX TEST FILE00100060~~~~~",
// @"@@@meta@@@BMXIEN|90093.97|^90093.97|.001|N|15|BMXIEN|TRUE|TRUE|FALSE^90093.97|.01|T|30|NAME|FALSE|FALSE|FALSE^90093.97|.02|N|4|NUMBER|FALSE|FALSE|TRUE^90093.97|.03|D|21|DATE|FALSE|FALSE|TRUE^90093.97|.04|D|21|DATE TIME|FALSE|FALSE|TRUE^90093.97|.05|T|3|SET|FALSE|FALSE|TRUE^90093.97|.06|T|30|NAME R/O|TRUE|FALSE|TRUE^90093.97|.07|N|4|NUMBER R/O|TRUE|FALSE|TRUE^90093.97|.08|D|21|DATE R/O|TRUE|FALSE|TRUE^90093.97|.09|D|21|DATE TIME R/O|TRUE|FALSE|TRUE^90093.97|.1|T|3|SET R/O|TRUE|FALSE|TRUE^90093.97|.11|I|2|INTEGER|FALSE|FALSE|TRUE^90093.97|.12|I|2|INTEGER R/O|TRUE|FALSE|TRUE1^John^8^OCT 10, 1970^^^^^^^^^");
//SMH: Table needs to be cleared at this point since it expects to have a clean slate
//SMH: And here it is!
DataTable table = this.RemoteSession.TableFromCommand(this.FetchTableString);
foreach (DataRow each in table.Rows)
{
each.Delete();
}
this.RemoteSession.SaveChanges(table);
//end my changes
table = this.RemoteSession.TableFromCommand(this.FetchTableString);
DataRow row = table.NewRow();
row["NAME"] = "John";
row["DATE"] = new DateTime(1970, 10, 10);
row["NUMBER"] = 8;
row["NUMBER R/O"] = 9;
table.Rows.Add(row);
Assert.AreEqual(1, table.Rows.Count);
Assert.IsTrue(this.RemoteSession.SaveChanges(table));
this.TestTable = RemoteSession.TableFromCommand(this.FetchTableString);
Assert.AreEqual(1, this.TestTable.Rows.Count);
this.TestRow = this.TestTable.Rows[0];
Assert.AreEqual(row["NAME"], "John");
Assert.AreEqual(row["DATE"], new DateTime(1970, 10, 10));
return true;
}
public bool RefetchTestRow()
{
try
{
this.TestTable = this.RemoteSession.TableFromCommand(this.FetchTableString);
Assert.AreEqual(1, this.TestTable.Rows.Count);
this.TestRow = this.TestTable.Rows[0];
return true;
}
catch
{
return false;
}
}
/*
90093.97,.01 NAME 0;1 FREE TEXT (Required)
INPUT TRANSFORM: K:$L(X)>30!($L(X)<3)!'(X'?1P.E) X
LAST EDITED: JAN 16, 2008
HELP-PROMPT: Answer must be 3-30 characters in length.
CROSS-REFERENCE: 90093.97^B
1)= S ^BMXTEST("B",$E(X,1,30),DA)=""
2)= K ^BMXTEST("B",$E(X,1,30),DA)
*/
/*
90093.97,.06 NUMBER 0;6 NUMBER
INPUT TRANSFORM: K:+X'=X!(X>99)!(X<5)!(X?.E1"."2N.N) X
LAST EDITED: JAN 16, 2008
HELP-PROMPT: Type a Number between 5 and 99, 1 Decimal Digit*/
[Test]
[ExpectedException(typeof(BMXNetException))]
public void NumberMin()
{
this.GenerateValidTestRow();
this.TestRow["Number"] = 0;
this.RemoteSession.SaveChanges(this.TestTable);
}
[Test]
[ExpectedException(typeof(BMXNetException))]
public void NumberMax()
{
this.GenerateValidTestRow();
this.TestRow["Number"] = 120;
this.RemoteSession.SaveChanges(this.TestTable);
}
[Test]
[ExpectedException(typeof(BMXNetException))]
public void NumberTooManyDecimals()
{
this.GenerateValidTestRow();
this.TestRow["Number"] = 120.1234;
this.RemoteSession.SaveChanges(this.TestTable);
}
[Test]
public void NumberDecimals()
{
this.GenerateValidTestRow();
this.TestRow["NUMBER"] = 5.6;
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
Assert.AreEqual(this.TestRow["NUMBER"], 5.6);
}
/*90093.97,.07 NUMBER R/O 0;7 NUMBER
INPUT TRANSFORM: K:+X'=X!(X>99)!(X<5)!(X?.E1"."1N.N) X
LAST EDITED: JAN 16, 2008
HELP-PROMPT: Type a Number between 5 and 99, 0 Decimal
Digits*/
///
/// THIS WILL FAIL!!!! NOTHING IN THE BMX LIBRARY THROWS THIS EXCEPTION//SMH
///
[Test]
[ExpectedException(typeof(System.Data.ReadOnlyException))]
public void UpdateReadOnlyNumber()
{
this.GenerateValidTestRow();
this.TestRow["NUMBER R/O"] = 100;
}
[Test]
[ExpectedException(typeof(BMXNetException))]
public void StringMinLength()
{
this.GenerateValidTestRow();
this.TestRow["NAME"] = "John";
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
Assert.AreEqual(this.TestRow["NAME"], "John");
this.TestRow["NAME"] = "T";
Assert.IsFalse(this.RemoteSession.SaveChanges(this.TestTable));
}
[Test]
public void StringMinLengthNoSideEffect()
{
this.GenerateValidTestRow();
this.TestRow["NAME"] = "John";
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
try
{
this.TestRow["NAME"] = "T";
Assert.IsFalse(this.RemoteSession.SaveChanges(this.TestTable));
Assert.IsTrue(false);
}
catch
{
}
this.RefetchTestRow();
Assert.AreEqual(this.TestRow["NAME"], "John");
}
[Test]
[ExpectedException(typeof(BMXNetException))]
public void StringMaxLength()
{
this.GenerateValidTestRow();
this.TestRow["NAME"] = "John";
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
Assert.AreEqual(this.TestRow["NAME"], "John");
this.TestRow["NAME"] = "T1234567890123456789012345678901234567890";
Assert.IsFalse(this.RemoteSession.SaveChanges(this.TestTable));
}
[Test]
public void StringMaxLengthNoSideEffect()
{
this.GenerateValidTestRow();
this.TestRow["NAME"] = "John";
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
try
{
this.TestRow["NAME"] = "T1234567890123456789012345678901234567890";
Assert.IsFalse(this.RemoteSession.SaveChanges(this.TestTable));
Assert.IsTrue(false);
}
catch
{
}
this.RefetchTestRow();
Assert.AreEqual(this.TestRow["NAME"], "John");
}
/*90093.97,.03 DATE 0;3 DATE
INPUT TRANSFORM: S %DT="EX" D ^%DT S X=Y K:Y<1 X
LAST EDITED: JAN 16, 2008*/
[Test]
public void SetDateAt0Second()
{
this.GenerateValidTestRow();
this.TestRow["DATE"] = new DateTime(1950,1,1);
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
Assert.AreEqual(new DateTime(1950,1,1),(DateTime)this.TestRow["DATE"]);
}
[Test]
[ExpectedException(typeof(BMXNetException))]
public void SetDateAtWithTime()
{
this.GenerateValidTestRow();
this.TestRow["DATE"] = new DateTime(1950, 1, 1,10,30,30);
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
Assert.AreEqual(new DateTime(1950, 1, 1, 10, 30, 30), (DateTime)this.TestRow["DATE"]);
}
/*
90093.97,.04 DATE TIME 0;4 DATE
INPUT TRANSFORM: S %DT="ETX" D ^%DT S X=Y K:Y<1 X
LAST EDITED: JAN 16, 2008*/
[Test]
[ExpectedException(typeof(BMXNetException))]
public void SetDateTimeAtWithTimeHavingSeconds()
{
this.GenerateValidTestRow();
this.TestRow["DATE TIME"] = new DateTime(1950, 1, 1, 20, 30,1);
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
}
/*90093.97,.05 DATE R/O 0;5 DATE
INPUT TRANSFORM: S %DT="EX" D ^%DT S X=Y K:Y<1 X*/
[Test]
public void SetDateTimeAtWithTime()
{
this.GenerateValidTestRow();
this.TestRow["DATE TIME"] = new DateTime(1950, 1, 1, 20, 30, 0);
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
Assert.AreEqual(new DateTime(1950, 1, 1, 20, 30, 0), (DateTime)this.TestRow["DATE TIME"]);
}
///
/// THIS WILL FAIL!!!! NOTHING IN THE BMX LIBRARY THROWS THIS EXCEPTION//SMH
///
[Test]
[ExpectedException(typeof(System.Data.ReadOnlyException))]
public void UpdateReadOnlyDate()
{
this.GenerateValidTestRow();
this.TestRow["DATE R/O"] = new DateTime(1950, 1, 1);
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
String peek = this.TestRow["DATE R/O"].ToString();
Assert.AreEqual(new DateTime(1950, 1, 1), (DateTime)this.TestRow["DATE R/O"]);
}
/* * 93.97,.08 SET 0;8 SET
'1' FOR YES;
'0' FOR NO;
LAST EDITED: JAN 16, 2008*/
[Test]
public void SetSetToCode()
{
this.GenerateValidTestRow();
this.TestRow["SET"] = "YES";
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
Assert.AreEqual("YES", this.TestRow["SET"]);
}
[Test]
public void SetSetToNull()
{
this.GenerateValidTestRow();
this.TestRow["SET"] = "";
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
Assert.AreEqual("", this.TestRow["SET"]);
}
[Test]
[ExpectedException(typeof(BMXNetException))]
public void SetSetToInvalid()
{
this.GenerateValidTestRow();
this.TestRow["SET"] = "MAYBE";
Assert.IsTrue(this.RemoteSession.SaveChanges(this.TestTable));
this.RefetchTestRow();
Assert.AreEqual("MAYBE", this.TestRow["SET"]);
}
/*
/*
90093.97,.09 SET R/O 0;9 SET
'1' FOR YES;
'0' FOR NO;
LAST EDITED: JAN 16, 2008
90093.97,.1 LOCATION 0;10 POINTER TO LOCATION FILE (#9999999.06
)
*/
}
}