public void InsertString_값_삽입하기()
        {
            OracleORMHelper helper = new OracleORMHelper();

            OracleRepositoryString RepositoryString = new OracleRepositoryString(helper);
            TestClass t = new TestClass();

            Assert.Throws <PkNotFoundException>(() => RepositoryString.InsertStr(t));

            t.Id   = 1;
            t.Data = "test";

            string expect2 = "INSERT INTO Test ( Id, Data, CDate ) VALUES ( :Id, :Data, SYSDATE )";
            var    actual2 = RepositoryString.InsertStr(t);

            Assert.Equal(expect2, actual2);


            t.FakeNameColumn = "test";

            string expect3 = "INSERT INTO Test ( Id, Data, RealColumnName, CDate ) VALUES ( :Id, :Data, :FakeNameColumn, SYSDATE )";
            var    actual3 = RepositoryString.InsertStr(t);

            Assert.Equal(expect3, actual3);
        }
        public void InsertString_값_삽입하기_pk_자동생성()
        {
            OracleORMHelper helper = new OracleORMHelper();

            OracleRepositoryString RepositoryString = new OracleRepositoryString(helper);
            Test2Class             t2 = new Test2Class();

            Assert.Throws <RequiredValueNotFoundException>(() => RepositoryString.InsertStr(t2));


            t2.Data = "test";

            string expect2 = "INSERT INTO Test2 ( Data, CDate ) VALUES ( :Data, SYSDATE )";
            var    actual2 = RepositoryString.InsertStr(t2);

            Assert.Equal(expect2, actual2);


            t2.FakeNameColumn = "test";

            string expect3 = "INSERT INTO Test2 ( Data, RealColumnName, CDate ) VALUES ( :Data, :FakeNameColumn, SYSDATE )";
            var    actual3 = RepositoryString.InsertStr(t2);

            Assert.Equal(expect3, actual3);
        }
        public void DeleteString_값_삭제하기()
        {
            OracleORMHelper helper = new OracleORMHelper();

            OracleRepositoryString RepositoryString = new OracleRepositoryString(helper);
            TestClass t      = new TestClass();
            string    expect = "DELETE FROM Test WHERE 1=1";
            var       actual = RepositoryString.DeleteStr(t);

            Assert.Equal(expect, actual);


            t.Id = 1;
            string expect2 = "DELETE FROM Test WHERE 1=1 AND Id = :Id";
            var    actual2 = RepositoryString.DeleteStr(t);

            Assert.Equal(expect2, actual2);


            t.Data = "test1";
            string expect3 = "DELETE FROM Test WHERE 1=1 AND Id = :Id AND Data = :Data";
            var    actual3 = RepositoryString.DeleteStr(t);

            Assert.Equal(expect3, actual3);
        }
        public void MergeString_값_병합하기()
        {
            OracleORMHelper helper = new OracleORMHelper();

            OracleRepositoryString RepositoryString = new OracleRepositoryString(helper);
            TestClass t = new TestClass();

            Assert.Throws <PkNotFoundException>(() => RepositoryString.MergeStr(t));

            t.Id = 1;

            t.Data = "test";

            string expect2 = "MERGE INTO Test USING DUAL ON ( Id = :Id ) WHEN MATCHED THEN UPDATE SET Data = :Data, LDate = SYSDATE WHEN NOT MATCHED THEN INSERT ( Id, Data, CDate ) VALUES ( :Id, :Data, SYSDATE )";
            var    actual2 = RepositoryString.MergeStr(t);

            Assert.Equal(expect2, actual2);

            string expect3 = "MERGE INTO Test USING DUAL ON ( Id = :Id ) WHEN MATCHED THEN UPDATE SET Data = :Data, RealColumnName = NULL, LDate = SYSDATE WHEN NOT MATCHED THEN INSERT ( Id, Data, CDate ) VALUES ( :Id, :Data, SYSDATE )";
            var    actual3 = RepositoryString.MergeStr(t, true);

            Assert.Equal(expect3, actual3);

            t.FakeNameColumn = "test";

            string expect4 = "MERGE INTO Test USING DUAL ON ( Id = :Id ) WHEN MATCHED THEN UPDATE SET Data = :Data, RealColumnName = :FakeNameColumn, LDate = SYSDATE WHEN NOT MATCHED THEN INSERT ( Id, Data, RealColumnName, CDate ) VALUES ( :Id, :Data, :FakeNameColumn, SYSDATE )";
            var    actual4 = RepositoryString.MergeStr(t);

            Assert.Equal(expect4, actual4);
        }
        public void SelectString_쿼리_가져오기()
        {
            OracleORMHelper helper = new OracleORMHelper();

            OracleRepositoryString RepositoryString = new OracleRepositoryString(helper);
            TestClass  t  = new TestClass();
            Test2Class t2 = new Test2Class();

            string expect = "SELECT * FROM Test WHERE 1=1";
            var    actual = RepositoryString.SelectString(t);

            Assert.Equal(expect, actual);


            t.Id = 1;
            string expect2 = "SELECT * FROM Test WHERE 1=1 AND Test.Id = :Id";
            var    actual2 = RepositoryString.SelectString(t);

            Assert.Equal(expect2, actual2);
        }
        public void SelectString_연산자_이용해서_쿼리_가져오기()
        {
            OracleORMHelper helper = new OracleORMHelper();

            OracleRepositoryString RepositoryString = new OracleRepositoryString(helper);
            TestClass t      = new TestClass();
            string    expect = "SELECT * FROM Test WHERE 1=1 AND Test.Id < 1";
            var       actual = RepositoryString.SelectString(t, new ParamColumn("Id", "<", "1"));

            Assert.Equal(expect, actual);

            string expect2 = "SELECT * FROM Test WHERE 1=1 AND Test.Id >= 6 AND Test.Data BETWEEN 1 AND 8";
            var    actual2 = RepositoryString.SelectString(t, new ParamColumn(nameof(t.Id), ">=", "6"), new ParamColumn(nameof(t.Data), "between", "1", "8"));

            Assert.Equal(expect2, actual2);

            string expect3 = "SELECT * FROM Test WHERE 1=1 AND Test.RealColumnName IS NOT NULL AND Test.Data LIKE '%TEST'";
            var    actual3 = RepositoryString.SelectString(t, new ParamColumn(helper.ColumnName(t, nameof(t.FakeNameColumn)), "is not null"), new ParamColumn(nameof(t.Data), "like", "'%TEST'"));

            Assert.Equal(expect3, actual3);
        }
        public void UpdateString_값_수정하기()
        {
            OracleORMHelper helper = new OracleORMHelper();

            OracleRepositoryString RepositoryString = new OracleRepositoryString(helper);
            TestClass t = new TestClass();

            Assert.Throws <PkNotFoundException>(() => RepositoryString.UpdateStr(t));

            t.Id = 1;

            t.Data = "test";

            string expect2 = "UPDATE Test SET Data = :Data, LDate = SYSDATE WHERE Id = :Id";
            var    actual2 = RepositoryString.UpdateStr(t);

            Assert.Equal(expect2, actual2);

            string expect3 = "UPDATE Test SET Data = :Data, RealColumnName = NULL, LDate = SYSDATE WHERE Id = :Id";
            var    actual3 = RepositoryString.UpdateStr(t, true);

            Assert.Equal(expect3, actual3);

            t.FakeNameColumn = "test";

            string expect4 = "UPDATE Test SET Data = :Data, RealColumnName = :FakeNameColumn, LDate = SYSDATE WHERE Id = :Id";
            var    actual4 = RepositoryString.UpdateStr(t);

            Assert.Equal(expect4, actual4);

            // -- Test2

            expect2 = string.Empty;
            expect3 = string.Empty;
            expect4 = string.Empty;
            actual2 = string.Empty;
            actual3 = string.Empty;
            actual4 = string.Empty;


            Test2Class t2 = new Test2Class();

            t2.Data = "test";

            Assert.Throws <PkNotFoundException>(() => RepositoryString.UpdateStr(t2));

            t2.Data = null;
            t2.Id   = 1;

            Assert.Throws <RequiredValueNotFoundException>(() => RepositoryString.UpdateStr(t2));

            t2.Data = "test";

            expect2 = "UPDATE Test2 SET Data = :Data, LDate = SYSDATE WHERE Id = :Id";
            actual2 = RepositoryString.UpdateStr(t2);

            Assert.Equal(expect2, actual2);

            expect3 = "UPDATE Test2 SET Data = :Data, RealColumnName = NULL, LDate = SYSDATE WHERE Id = :Id";
            actual3 = RepositoryString.UpdateStr(t2, true);

            Assert.Equal(expect3, actual3);

            t2.FakeNameColumn = "test";

            expect4 = "UPDATE Test2 SET Data = :Data, RealColumnName = :FakeNameColumn, LDate = SYSDATE WHERE Id = :Id";
            actual4 = RepositoryString.UpdateStr(t2);

            Assert.Equal(expect4, actual4);
        }