예제 #1
0
        public async void GenerateFromHttpWithSettingTest(string url, string version, int n)
        {
             PocoSetting setting = new PocoSetting
            {
                AddNullableDataType = true,
                AddKeyAttribute = true,
                AddTableAttribute = true,
                AddRequiredAttribute = true,
                AddNavigation = true
            };

             //var url = "http://services.odata.org/V4/OData/OData.svc";
             O2P o2p = new O2P( setting);
             var code = await o2p.GenerateAsync(new Uri(url));
             Debug.WriteLine(code);

             Assert.AreEqual(o2p.MetaDataVersion, version);
             Assert.AreEqual(o2p.ClassList.Count, n);
             Assert.IsTrue(code.Contains(o2p.SchemaNamespace));

             StringAssert.Contains("[Key]", code);
             StringAssert.Contains("[Required]", code);
             StringAssert.Contains("[Table", code);

        }
예제 #2
0
        public async void GenerateFromHttpWithSettingTest(string url, string version, int n)
        {
            PocoSetting setting = new PocoSetting
            {
                AddNullableDataType  = true,
                AddKeyAttribute      = true,
                AddTableAttribute    = true,
                AddRequiredAttribute = true,
                AddNavigation        = true
            };

            //var url = "http://services.odata.org/V4/OData/OData.svc";
            O2P o2p  = new O2P(setting);
            var code = await o2p.GenerateAsync(new Uri(url));

            Debug.WriteLine(code);

            Assert.AreEqual(o2p.MetaDataVersion, version);
            Assert.AreEqual(o2p.ClassList.Count, n);
            Assert.IsTrue(code.Contains(o2p.SchemaNamespace));

            StringAssert.Contains("[Key]", code);
            StringAssert.Contains("[Required]", code);
            StringAssert.Contains("[Table", code);
            StringAssert.Contains("virtual public Supplier Supplier  {get;set;}", code);
            StringAssert.DoesNotContain("public class Product :", code);
            StringAssert.Contains("System.ComponentModel.DataAnnotations.Schema", code);
            StringAssert.Contains("System.ComponentModel.DataAnnotations", code);
        }
예제 #3
0
        public async Task web_api2_v3_mult_namespace_class_and_enum_Test()
        {
            var conn = new OdataConnectionString
            {
                ServiceUrl = TestSample.MultiSchemaV3,
            };
            var setting = new PocoSetting
            {
                Lang     = Language.CS,
                NameCase = CaseEnum.None,
            };
            var o2P  = new O2P(setting);
            var code = await o2P.GenerateAsync(conn);

            var expected = @"
namespace ODataDemo
{
	public partial class Customer
	{
	    public int ID {get;set;} //PrimaryKey not null
	    public string CustomerName {get;set;} 
	    public string Address {get;set;} 
	}
	public partial class Location
	{
	    public string Address {get;set;} 
	    public string City {get;set;}
	}
}
namespace ODataDemo2
{
	public partial class Customer
	{
    public int ID {get;set;} //PrimaryKey not null
	    public string CustomerName {get;set;} 
	    public string Address {get;set;} 
	}
	public partial class Customer2
	{
	    public int ID {get;set;} //PrimaryKey not null
	    public string CustomerName {get;set;} 
	    public string Address {get;set;} 
	}
	public enum Feature
	 {
        Feature1=0,
        Feature2=1,
        Feature3=2,
        Feature4=3 
	}
}
";

            //Assert
            Assert.That(code.TrimAllSpace(), Does.Contain(expected.TrimAllSpace()));
        }
예제 #4
0
        public async Task GenerateDefaultTest(string url, string version, int n)
        {
            var connString = new OdataConnectionString {
                ServiceUrl = url
            };
            var o2p  = new O2P();
            var code = await o2p.GenerateAsync(connString);

            Assert.IsTrue(code.Contains("public partial class Product"));
        }
예제 #5
0
        public void GeneratePocoFromNullUrlTest()
        {
            var url = "";
            var o2P = new O2P();

            Assert.Throws <UriFormatException>(async() =>
            {
                var code = await o2P.GenerateAsync(new Uri(url));
            });
        }
예제 #6
0
        public async Task GenerateDefaultTestV3()
        {
            var url        = TestSample.NorthWindV3;
            var connString = new OdataConnectionString {
                ServiceUrl = url
            };
            var o2p  = new O2P();
            var code = await o2p.GenerateAsync(connString);

            Assert.IsTrue(code.Contains("public partial class Product"));
        }
예제 #7
0
 public async void GenerateFromHttpDefaultSettingTest(string url, string version, int n)
 {
     //var url = "http://services.odata.org/V4/OData/OData.svc";
     O2P o2p = new O2P();
     var code = await o2p.GenerateAsync(new Uri(url));
     Debug.WriteLine(code);
    
     Assert.AreEqual(o2p.MetaDataVersion, version);
     Assert.AreEqual(o2p.ClassList.Count, n);
     Assert.IsTrue(code.Contains(o2p.SchemaNamespace));
     
 }
예제 #8
0
        public async void GenerateCodeUrlValidAuthenticateNoSettingTest()
        {
            string url     = "http://asd-pc/odata2/api/northwind";
            string version = "4.0";
            int    n       = 26;
            var    o2P     = new O2P();

            var code = await o2P.GenerateAsync(new Uri(url), "hassan", "123");

            Debug.WriteLine(code);
            StringAssert.Contains("public class Product", code);
        }
예제 #9
0
        public async Task GenerateDefaultTestV4()
        {
            var url = TestSample.TripPin4;

            Console.WriteLine(url);
            var connString = new OdataConnectionString {
                ServiceUrl = url
            };
            var o2p  = new O2P();
            var code = await o2p.GenerateAsync(connString);

            Assert.IsTrue(code.Contains("public partial class City"));
        }
예제 #10
0
        public async void GenerateFromHttpDefaultSettingTest(string url, string version, int n)
        {
            //var url = "http://services.odata.org/V4/OData/OData.svc";
            O2P o2p  = new O2P();
            var code = await o2p.GenerateAsync(new Uri(url));

            Debug.WriteLine(code);

            Assert.AreEqual(o2p.MetaDataVersion, version);
            Assert.AreEqual(o2p.ClassList.Count, n);
            Assert.IsTrue(code.Contains(o2p.SchemaNamespace));
            StringAssert.DoesNotContain("System.ComponentModel.DataAnnotations.Schema", code);
            StringAssert.DoesNotContain("System.ComponentModel.DataAnnotations", code);
        }
예제 #11
0
        public async Task Filter_by_namespace_Test()
        {
            var url        = TestSample.NorthWindV4;
            var connString = new OdataConnectionString {
                ServiceUrl = url
            };
            var setting = new PocoSetting {
                Include = new List <string> {
                    "NorthwindModel*"
                }
            };
            var o2p  = new O2P(setting);
            var code = await o2p.GenerateAsync(connString);

            Assert.IsTrue(code.Contains("public partial class Product"));
        }
예제 #12
0
        public async void GenerateFromHttpWithSettingEmptyNamepaceTest(string url, string version, int n)
        {
            PocoSetting setting = new PocoSetting
            {
                NamespacePrefix = ""
            };

            //var url = "http://services.odata.org/V4/OData/OData.svc";
            O2P o2p  = new O2P(setting);
            var code = await o2p.GenerateAsync(new Uri(url));

            Debug.WriteLine(code);

            Assert.AreEqual(o2p.MetaDataVersion, version);
            Assert.AreEqual(o2p.ClassList.Count, n);
            Assert.IsTrue(code.Contains($"namespace {o2p.SchemaNamespace}"));
        }
예제 #13
0
        public async Task Web_api2_v4_base_class_test()
        {
            var conn = new OdataConnectionString
            {
                ServiceUrl = TestSample.SampleWebApiV4,
            };
            var setting = new PocoSetting
            {
                Lang     = Language.CS,
                NameCase = CaseEnum.None,
            };
            var o2P  = new O2P(setting);
            var code = await o2P.GenerateAsync(conn);

            Assert.That(code, Does.Contain("public partial class Circle : Shape"));
            Assert.That(code, Does.Contain("public partial class Rectangle : Shape"));
        }
예제 #14
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello OData2Poco Demo!");
            // string client_id="<Enter client id /or application id here>";
            // string client_secret="<Enter client secret  here>";

            //define connection parameters
            var connString = new OdataConnectionString
            {
                ServiceUrl   = "http://services.odata.org/V4/OData/OData.svc",
                Authenticate = AuthenticationType.none,

                //for oauth2
                //Authenticate = AuthenticationType.oauth2,
                //UserName = client_id,
                //Password = client_secret,
                //TokenParams = "resource=...",
                //TokenUrl = "https://url/of/tokenserver",
            };
            var setting = new PocoSetting
            {
                Attributes = new List <string> {
                    "key"
                },
                AddNavigation       = true,
                AddNullableDataType = true,
            };

            try
            {
                var o2p  = new O2P(setting);
                var code = await o2p.GenerateAsync(connString);

                Console.WriteLine(code);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.WriteLine("Press any key to exit");
                Console.ReadKey();
            }
        }
예제 #15
0
        public async Task web_api2_v3_mult_namespace_Test()
        {
            var conn = new OdataConnectionString
            {
                ServiceUrl = TestSample.MultiSchemaV3,
            };
            var setting = new PocoSetting
            {
                Lang     = Language.CS,
                NameCase = CaseEnum.None,
            };
            var o2P  = new O2P(setting);
            var code = await o2P.GenerateAsync(conn);

            Assert.That(code, Does.Contain("namespace ODataDemo"));
            Assert.That(code, Does.Contain("namespace ODataDemo2"));
            Assert.That(code, Does.Contain("namespace ODataDemo3"));
        }
예제 #16
0
        public async Task Web_api2_v4_abstract_class_test()
        {
            var conn = new OdataConnectionString
            {
                ServiceUrl = TestSample.SampleWebApiV4,
            };
            var setting = new PocoSetting
            {
                Lang     = Language.CS,
                NameCase = CaseEnum.None,
            };
            var o2P  = new O2P(setting);
            var code = await o2P.GenerateAsync(conn);

            var expected = "public abstract partial class Shape";

            Assert.That(code, Does.Contain(expected));
        }
예제 #17
0
        public async void GenerateFromHttpWithSettingInheritTest(string url, string version, int n)
        {
            PocoSetting setting = new PocoSetting
            {
                Inherit = "MyBaseClass, MyInterface"
            };

            //var url = "http://services.odata.org/V4/OData/OData.svc";
            O2P o2p  = new O2P(setting);
            var code = await o2p.GenerateAsync(new Uri(url));

            Debug.WriteLine(code);

            Assert.AreEqual(o2p.MetaDataVersion, version);
            Assert.AreEqual(o2p.ClassList.Count, n);
            Assert.IsTrue(code.Contains(o2p.SchemaNamespace));

            StringAssert.Contains(": MyBaseClass, MyInterface", code);
        }
예제 #18
0
        public async void GenerateFromHttpWithSettingEagerTest(string url, string version, int n)
        {
            PocoSetting setting = new PocoSetting
            {
                AddEager = true
            };

            //var url = "http://services.odata.org/V4/OData/OData.svc";
            O2P o2p  = new O2P(setting);
            var code = await o2p.GenerateAsync(new Uri(url));

            Debug.WriteLine(code);

            Assert.AreEqual(o2p.MetaDataVersion, version);
            Assert.AreEqual(o2p.ClassList.Count, n);
            Assert.IsTrue(code.Contains(o2p.SchemaNamespace));

            StringAssert.Contains("public Supplier Supplier  {get;set;}", code);
        }
예제 #19
0
        public async Task Web_api2_v4_attributes_test(string att)
        {
            var conn = new OdataConnectionString
            {
                ServiceUrl = TestSample.SampleWebApiV4,
            };
            var setting = new PocoSetting
            {
                Lang       = Language.CS,
                NameCase   = CaseEnum.None,
                Attributes = new List <string> {
                    att
                }
            };
            var o2P  = new O2P(setting);
            var code = await o2P.GenerateAsync(conn);

            switch (att)
            {
            case "key":
                Assert.That(code, Does.Contain("[Key]"));
                break;

            case "req":
                Assert.That(code, Does.Contain("[Required]"));
                break;

            case "tab":
                Assert.That(code, Does.Contain("[Table(\"Windows\")]"));
                break;

            case "dm":
                Assert.That(code, Does.Contain("	[DataContract]"));
                Assert.That(code, Does.Contain("  [DataMember]"));
                break;

            case "proto":
                Assert.That(code, Does.Contain("	[ProtoContract]"));
                Assert.That(code, Does.Contain("   [ProtoMember(1)"));
                break;
            }
        }
예제 #20
0
        [TestCase("http://www.google.com")]    //not odata support

        //[ExpectedException(typeof(WebException))]
        //System.Net.WebException : The remote name could not be resolved: 'not_valid_url.com'
        //System.Net.WebException : The remote server returned an error: (404) Not Found.
        public async void GeneratePocoInvalidODataOrUrlTest(string url)
        {
            var o2P        = new O2P();
            var code       = "";
            var metaString = "";


            try
            {
                code = await o2P.GenerateAsync(new Uri(url));

                //metaString = o2P.SaveMetaDataTo("north.xml");
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.FullExceptionMessage());
            }

            Assert.IsEmpty(code);
            Assert.IsEmpty(metaString);
        }
예제 #21
0
        public async Task <string> BaseTest(string url, string version, int n, PocoSetting setting)
        {
            O2P o2P = new O2P(setting);

            var code = await o2P.GenerateAsync(new Uri(url));

            //    var metaString = await o2P.SaveMetaDataTo("north.xml");
            if (o2P.MediaType == Media.Http)
            {
                Assert.Greater(o2P.ServiceHeader.Count, 0);
            }
            Debug.WriteLine(code);
            //Debug.WriteLine(metaString);

            Assert.AreEqual(o2P.MetaDataVersion, version);
            Assert.AreEqual(o2P.ClassList.Count, n);
            Assert.IsTrue(code.Contains(o2P.SchemaNamespace));
            //Assert.IsTrue(MatchFileContent("north.cs", code));
            //Assert.IsTrue(MatchFileContent("north.xml", metaString));
            return(code);
        }
예제 #22
0
        public async void GenerateFromHttpWithSettingNamepaceTest(string url, string version, int n)
        {
            PocoSetting setting = new PocoSetting
            {
                NamespacePrefix = "MyNamespace1.MyNamespace2"
            };

            //var url = "http://services.odata.org/V4/OData/OData.svc";
            O2P o2p  = new O2P(setting);
            var code = await o2p.GenerateAsync(new Uri(url));

            Debug.WriteLine(code);

            Assert.AreEqual(o2p.MetaDataVersion, version);
            Assert.AreEqual(o2p.ClassList.Count, n);

            var namespc = (setting.NamespacePrefix + "." + o2p.SchemaNamespace).Replace("..", ".");

            namespc = namespc.TrimEnd('.');
            //Assert.IsFalse(code.Contains(o2p.SchemaNamespace));
            StringAssert.Contains(namespc, code);
        }
예제 #23
0
        public void GenerateCodeUrlInvalidAuthenticateNoSettingTest()
        {
            string url        = "http://asd-pc/odata2/api/northwind";
            string version    = "4.0";
            int    n          = 26;
            var    code       = "";
            var    metaString = "";
            //File.Delete("north.cs");
            //File.Delete("north.xml");

            var o2P = new O2P();
            var ex  = Assert.Throws <WebException>(async() =>
            {
                code = await o2P.GenerateAsync(new Uri(url), "hassan1", "123");
                //metaString = o2P.SaveMetaDataTo("north.xml");
            }); //.GeneratePoco());

            Debug.WriteLine(ex.Message);
            Console.WriteLine(code);
            //Assert.IsFalse(File.Exists("north.cs"));
            //Assert.IsFalse(File.Exists("north.xml"));
            Assert.IsEmpty(code);
            Assert.IsEmpty(metaString);
        }
        public async Task string_maxlength_attribute_test()
        {
            var conn = new OdataConnectionString
            {
                ServiceUrl = TestSample.SampleWebApiV4,
            };
            var setting = new PocoSetting
            {
                Lang       = Language.CS,
                NameCase   = CaseEnum.None,
                Attributes = new List <string> {
                    "max"
                },
            };
            var o2P  = new O2P(setting);
            var code = await o2P.GenerateAsync(conn);

            var expected = @"
[MaxLength(30)]
 public string Title {get;set;} 
";

            Assert.That(code.TrimAllSpace(), Does.Contain(expected.TrimAllSpace()));
        }
예제 #25
0
        public async Task<string> BaseTest(string url, string version, int n, PocoSetting setting )
        {
            O2P o2P = new O2P(setting);

            var code = await o2P.GenerateAsync(new Uri(url) );
        //    var metaString = await o2P.SaveMetaDataTo("north.xml");
            if (o2P.MediaType == Media.Http)
            {
                Assert.Greater(o2P.ServiceHeader.Count, 0);
            }
            Debug.WriteLine(code);
            //Debug.WriteLine(metaString);

            Assert.AreEqual(o2P.MetaDataVersion, version);
            Assert.AreEqual(o2P.ClassList.Count, n);
            Assert.IsTrue(code.Contains(o2P.SchemaNamespace));
            //Assert.IsTrue(MatchFileContent("north.cs", code));
            //Assert.IsTrue(MatchFileContent("north.xml", metaString));
            return code;
        }
예제 #26
0
        public async Task Web_api2_v4_classes_and_enum_test()
        {
            var conn = new OdataConnectionString
            {
                ServiceUrl = TestSample.SampleWebApiV4,
            };
            var setting = new PocoSetting
            {
                Lang     = Language.CS,
                NameCase = CaseEnum.None,
            };
            var o2P  = new O2P(setting);
            var code = await o2P.GenerateAsync(conn);

            var expected = @"
namespace BookStore
{
	public partial class Window
	{
	    public int Id {get;set;} //PrimaryKey not null
	    public string Title {get;set;} 
	    public Shape Shape {get;set;} 
	}
	public abstract partial class Shape
	{
	    public bool HasBorder {get;set;} // not null
	    public Color Color {get;set;} // not null
	}
	public partial class Circle : Shape
	{
	    public Point Center {get;set;} 
	    public int Radius {get;set;} // not null
	}
	public partial class Point
	{
	    public int X {get;set;} // not null
	    public int Y {get;set;} // not null
	}
	public partial class Rectangle : Shape
	{
	    public Point LeftTop {get;set;} 
	    public int Height {get;set;} // not null
	    public int Weight {get;set;} // not null
	}
	public partial class RoundRectangle : Rectangle
	{
	    public double Round {get;set;} // not null
	}
	public partial class Triangle : Shape
	{
	    public Point P1 {get;set;} 
	    public Point P2 {get;set;} 
	    public Point P3 {get;set;} 
	}
	public enum Color
	 {
        Red=0,
        Blue=1,
        Green=2,
        Yellow=3 
	}
}
";

            //Assert
            Assert.That(code.TrimAllSpace(), Does.Contain(expected.TrimAllSpace()));
        }
예제 #27
0
        [TestCase("http://www.google.com")] //not odata support

        //[ExpectedException(typeof(WebException))]
        //System.Net.WebException : The remote name could not be resolved: 'not_valid_url.com'
        //System.Net.WebException : The remote server returned an error: (404) Not Found.
        public async void GeneratePocoInvalidODataOrUrlTest(string url)
        {
            var o2P = new O2P();
            var code = "";
            var metaString = "";


            try
            {
                code = await o2P.GenerateAsync(new Uri(url));
                //metaString = o2P.SaveMetaDataTo("north.xml");
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.FullExceptionMessage());
            }

            Assert.IsEmpty(code);
            Assert.IsEmpty(metaString);
        }
예제 #28
0
        public void GenerateCodeUrlInvalidAuthenticateNoSettingTest()
        {
            string url = "http://asd-pc/odata2/api/northwind";
            string version = "4.0";
            int n = 26;
            var code = "";
            var metaString = "";
            //File.Delete("north.cs");
            //File.Delete("north.xml");

            var o2P = new O2P();
         var ex=   Assert.Throws<WebException>(async () =>
            {
                code = await o2P.GenerateAsync(new Uri(url), "hassan1", "123");
                //metaString = o2P.SaveMetaDataTo("north.xml");
            }); //.GeneratePoco());
            Debug.WriteLine(ex.Message);
            Console.WriteLine(code);
            //Assert.IsFalse(File.Exists("north.cs"));
            //Assert.IsFalse(File.Exists("north.xml"));
            Assert.IsEmpty(code);
            Assert.IsEmpty(metaString);
        }
예제 #29
0
        public async void GenerateCodeUrlValidAuthenticateNoSettingTest()
        {
            string url = "http://asd-pc/odata2/api/northwind";
            string version = "4.0";
            int n=26;
            var o2P = new O2P();

            var code = await o2P.GenerateAsync(new Uri(url), "hassan", "123");
            Debug.WriteLine(code);
            StringAssert.Contains("public class Product", code);
        }
예제 #30
0
        public void GeneratePocoFromNullUrlTest()
        {
            var url = "";
            var o2P = new O2P();
           
            Assert.Throws<UriFormatException>(async () =>
            {
               var code = await o2P.GenerateAsync(new Uri(url));
            });

        }