Пример #1
0
        public async Task Add()
        {
            var fixture = new NC_RDBNull_DbFixtureInitDb();
            await fixture.Initalize();

            using (var orderContext = fixture.CreateContext())
            {
                Assert.Equal(8, orderContext.Categories.Count());
                Assert.Equal(4, orderContext.Customers.Count());
                Assert.Equal(3, orderContext.Orders.Count());
                Assert.Equal(7, orderContext.OrderItems.Count());
                Assert.Equal(5, orderContext.ShippingAddresses.Count());
                Assert.Equal(5, orderContext.CustomerShippingAddress.Count());

                var category = orderContext.Categories.Single(t => t.Name == "jackets");
                Assert.Equal("clothes", orderContext.Categories.Single(t => t.Id == category.ParentId).Name);
                Assert.Equal(2, orderContext.Categories.Where(t => t.ParentId == category.Id).Count());

                var order1 = orderContext.Orders.Include(t => t.Items).Single(t => t.Name == "Order 1");
                Assert.Equal(3, order1.Items.Count());

                var order2 = orderContext.Orders.Include(t => t.Items).Single(t => t.Name == "Order 2");
                Assert.Equal(2, order2.Items.Count());

                var order3 = orderContext.Orders.Include(t => t.Items).Single(t => t.Name == "Order unknown");
                Assert.Equal(2, order3.Items.Count());
            }
        }
Пример #2
0
        private static async Task <T[]> Execute <T>(String request, Object requestData, Func <OrderContext, IEnumerable <T> > fromDbFunc)
        {
            var fixture = new NC_RDBNull_DbFixtureInitDb();
            await fixture.Initalize();

            var parser         = new OeParser(new Uri("http://dummy/"), fixture.OeDataAdapter, fixture.EdmModel);
            var responseStream = new MemoryStream();

            var requestUri = new Uri(@"http://dummy/" + request);

            if (requestData == null)
            {
                await parser.ExecuteGetAsync(requestUri, OeRequestHeaders.JsonDefault, responseStream, CancellationToken.None);
            }
            else
            {
                String data          = JsonConvert.SerializeObject(requestData);
                var    requestStream = new MemoryStream(Encoding.UTF8.GetBytes(data));
                await parser.ExecutePostAsync(requestUri, OeRequestHeaders.JsonDefault, requestStream, responseStream, CancellationToken.None);
            }

            var reader = new ResponseReader(fixture.EdmModel, fixture.DbDataAdapter);

            responseStream.Position = 0;
            T[] fromOe;
            if (typeof(T) == typeof(int))
            {
                String count = new StreamReader(responseStream).ReadToEnd();
                fromOe = count == "" ? null : new T[] { (T)(Object)int.Parse(count) };
            }
            else
            {
                fromOe = reader.Read <T>(responseStream).ToArray();
            }

            if (fromDbFunc == null)
            {
                return(fromOe);
            }

            T[] fromDb;
            using (var orderContext = (OrderContext)fixture.DbDataAdapter.CreateDataContext())
                fromDb = fromDbFunc(orderContext).ToArray();

            var settings = new JsonSerializerSettings()
            {
                DateFormatString      = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffff",
                DateTimeZoneHandling  = DateTimeZoneHandling.Utc,
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                NullValueHandling     = NullValueHandling.Ignore
            };
            String jsonOe = JsonConvert.SerializeObject(fromOe, settings);
            String jsonDb = JsonConvert.SerializeObject(fromDb, settings);

            Console.WriteLine(requestUri);
            Assert.Equal(jsonDb, jsonOe);

            return(fromOe);
        }
Пример #3
0
        public async Task ScalarFunctionWithParameters_get()
        {
            String request = "dbo.ScalarFunctionWithParameters(name='Order 1',id=1,status=null)";

            int[] result = await Execute <int>(request, null, null);

            var fixture = new NC_RDBNull_DbFixtureInitDb();

            using (var orderContext = (OrderContext)fixture.DbDataAdapter.CreateDataContext())
            {
                int count = orderContext.ScalarFunctionWithParameters(1, "Order 1", null);
                Assert.Equal(count, result[0]);
            }
        }
Пример #4
0
        public async Task ScalarFunction_get()
        {
            String request = "dbo.ScalarFunction";

            int[] result = await Execute <int>(request, null, null);

            var fixture = new NC_RDBNull_DbFixtureInitDb();

            using (var orderContext = (OrderContext)fixture.DbDataAdapter.CreateDataContext())
            {
                int count = orderContext.ScalarFunction();
                Assert.Equal(count, result[0]);
            }
        }
Пример #5
0
        public async Task ScalarFunction_get()
        {
            String request = "dbo.ScalarFunction";

            Object[] result = await Execute <int>(request, null, null);

            var fixture = new NC_RDBNull_DbFixtureInitDb();

            using (OrderContext orderContext = fixture.CreateContext())
            {
                int count = orderContext.ScalarFunction();
                Assert.Equal(count, (int)result[0]);
            }
        }
Пример #6
0
        public async Task ScalarFunctionWithParameters_post()
        {
            String request     = "dbo.ScalarFunctionWithParameters";
            var    requestData = new { id = (int?)1, name = "Order 1", status = (OrderStatus?)null };

            int[] result = await Execute <int>(request, requestData, null);

            var fixture = new NC_RDBNull_DbFixtureInitDb();

            using (var orderContext = (OrderContext)fixture.DbDataAdapter.CreateDataContext())
            {
                int count = orderContext.ScalarFunctionWithParameters(1, "Order 1", null);
                Assert.Equal(count, result[0]);
            }
        }
Пример #7
0
        public async Task ResetDb_post()
        {
            String request = "ResetDb";

            await Execute <int>(request, "", null);

            var fixture = new NC_RDBNull_DbFixtureInitDb();

            using (var orderContext = (OrderContext)fixture.DbDataAdapter.CreateDataContext())
            {
                int count = orderContext.Categories.Count() +
                            orderContext.Customers.Count() +
                            orderContext.Orders.Count() +
                            orderContext.OrderItems.Count();
                Assert.Equal(0, count);
            }
        }
Пример #8
0
        public async Task ResetDb_get()
        {
            String request = "ResetDb";

            await Execute <int>(request, null, null);

            var fixture = new NC_RDBNull_DbFixtureInitDb();

            using (OrderContext orderContext = fixture.CreateContext())
            {
                int count = orderContext.Categories.Count() +
                            orderContext.Customers.Count() +
                            orderContext.Orders.Count() +
                            orderContext.OrderItems.Count();
                Assert.Equal(0, count);
            }
        }
Пример #9
0
        public async Task Delete()
        {
            var fixture = new NC_RDBNull_DbFixtureInitDb();
            await fixture.Initalize();

            await fixture.ExecuteBatchAsync("Delete").ConfigureAwait(false);

            using (var orderContext = fixture.CreateContext())
            {
                Assert.Equal(5, orderContext.Categories.Count());
                Assert.Equal(4, orderContext.Customers.Count());
                Assert.Equal(2, orderContext.Orders.Count());
                Assert.Equal(3, orderContext.OrderItems.Count());

                var order1 = orderContext.Orders.Include(t => t.Items).Single(t => t.Name == "Order 1");
                Assert.Equal("Product order 1 item 3", order1.Items.Single().Product);
            }
        }
Пример #10
0
        public void Test()
        {
            SelectTestDefinition[] requestMethodNames = SelectTestDefinition.GetSelectTestDefinitions();
            requestMethodNames = requestMethodNames.Where(t => t.MethodName == "FilterEnum" || t.MethodName == "FilterEnumNull").ToArray();

            var fixture = new NC_RDBNull_DbFixtureInitDb();
            var parser  = new OeGetParser(fixture.EdmModel);

            for (int i = 0; i < requestMethodNames.Length; i++)
            {
                OeQueryContext queryContext1 = parser.CreateQueryContext(fixture.ParseUri(requestMethodNames[i].Request), 0, false, OeMetadataLevel.Minimal);
                OeQueryContext queryContext2 = parser.CreateQueryContext(fixture.ParseUri(requestMethodNames[i].Request), 0, false, OeMetadataLevel.Minimal);

                var constantToParameterMapper = new FakeReadOnlyDictionary <ConstantNode, OeQueryCacheDbParameterDefinition>();
                if (queryContext1.ODataUri.Skip != null)
                {
                    var constantNode = OeCacheComparerParameterValues.CreateSkipConstantNode((int)queryContext1.ODataUri.Skip.Value, queryContext1.ODataUri.Path);
                    constantToParameterMapper.Add(constantNode, new OeQueryCacheDbParameterDefinition("p_0", typeof(int)));
                }
                if (queryContext1.ODataUri.Top != null)
                {
                    var constantNode = OeCacheComparerParameterValues.CreateTopConstantNode((int)queryContext1.ODataUri.Top.Value, queryContext1.ODataUri.Path);
                    constantToParameterMapper.Add(constantNode, new OeQueryCacheDbParameterDefinition($"p_{constantToParameterMapper.Count}", typeof(int)));
                }

                OeCacheContext cacheContext1 = queryContext1.CreateCacheContext();
                OeCacheContext cacheContext2 = queryContext2.CreateCacheContext();
                bool           result        = new OeCacheComparer(constantToParameterMapper, false).Compare(cacheContext1, cacheContext2);
                Assert.True(result);

                for (int j = i + 1; j < requestMethodNames.Length; j++)
                {
                    queryContext2 = parser.CreateQueryContext(fixture.ParseUri(requestMethodNames[j].Request), 0, false, OeMetadataLevel.Minimal);

                    constantToParameterMapper = new FakeReadOnlyDictionary <ConstantNode, OeQueryCacheDbParameterDefinition>();
                    result = new OeCacheComparer(constantToParameterMapper, false).Compare(cacheContext1, cacheContext2);
                    Assert.False(result);
                }
            }
        }
Пример #11
0
        //[Fact]
        public void CacheCode()
        {
            var hashes = new Dictionary <int, List <String> >();

            SelectTestDefinition[] requestMethodNames = SelectTestDefinition.GetSelectTestDefinitions();

            var fixture = new NC_RDBNull_DbFixtureInitDb();
            var parser  = new OeGetParser(fixture.EdmModel);

            for (int i = 0; i < requestMethodNames.Length; i++)
            {
                OeQueryContext queryContext = parser.CreateQueryContext(fixture.ParseUri(requestMethodNames[i].Request), 0, false, OeMetadataLevel.Minimal);
                int            hash         = OeCacheComparer.GetCacheCode(queryContext.CreateCacheContext());
                if (!hashes.TryGetValue(hash, out List <String> value))
                {
                    value = new List <String>();
                    hashes.Add(hash, value);
                }
                value.Add(requestMethodNames[i].MethodName);
            }

            var duplicate = hashes.Where(p => p.Value.Count > 1).Select(p => p.Value).ToArray();
        }
Пример #12
0
        public async Task Update()
        {
            var fixture = new NC_RDBNull_DbFixtureInitDb();
            await fixture.Initalize();

            await fixture.ExecuteBatchAsync("Update").ConfigureAwait(false);

            using (var orderContext = fixture.CreateContext())
            {
                var category = orderContext.Categories.Single(t => t.Name == "sombrero jacket");
                Assert.Equal("jackets", orderContext.Categories.Single(t => t.Id == category.ParentId).Name);

                Assert.Equal(4, orderContext.Customers.Count());
                Assert.Equal(3, orderContext.Orders.Count());
                Assert.Equal(7, orderContext.OrderItems.Count());

                var order1 = orderContext.Orders.Include(t => t.Items).Single(t => t.Id == 1);
                Assert.Equal("New Order 1", order1.Name);
                Assert.Equal("New Product order 1 item 3", order1.Items.Single(t => t.Id == 3).Product);

                Assert.Equal(Sex.Female, orderContext.Customers.Single(c => c.Country == "RU" && c.Id == 1).Sex);
                Assert.Null(orderContext.Customers.Single(c => c.Country == "EN" && c.Id == 1).Sex);
            }
        }