public void CanBatchQueriesWithDataServicesClient()
        {
            Uri serviceUrl = new Uri(BaseAddress + "/DefaultBatch");

            Default.Container client = new Default.Container(serviceUrl);
            client.Format.UseJson();
            Uri customersRequestUri = new Uri(BaseAddress + "/DefaultBatch/DefaultBatchCustomer");
            DataServiceRequest <Default.DefaultBatchCustomer> customersRequest = new DataServiceRequest <Default.DefaultBatchCustomer>(customersRequestUri);
            Uri singleCustomerRequestUri = new Uri(BaseAddress + "/DefaultBatch/DefaultBatchCustomer(0)");
            DataServiceRequest <Default.DefaultBatchCustomer> singleCustomerRequest = new DataServiceRequest <Default.DefaultBatchCustomer>(singleCustomerRequestUri);

            DataServiceResponse batchResponse = client.ExecuteBatch(customersRequest, singleCustomerRequest);

            if (batchResponse.IsBatchResponse)
            {
                Assert.Equal(202, batchResponse.BatchStatusCode);
            }

            foreach (QueryOperationResponse response in batchResponse)
            {
                Assert.Equal(200, response.StatusCode);
                if (response.Query.RequestUri == customersRequestUri)
                {
                    Assert.Equal(10, response.Cast <Default.DefaultBatchCustomer>().Count());
                    continue;
                }
                if (response.Query.RequestUri == singleCustomerRequestUri)
                {
                    Assert.Equal(1, response.Cast <Default.DefaultBatchCustomer>().Count());
                    continue;
                }
            }
        }
        public virtual void SendsIndividualErrorWhenOneOfTheRequestsFails()
        {
            Uri serviceUrl = new Uri(BaseAddress + "/DefaultBatch");

            Default.Container client = new Default.Container(serviceUrl);
            client.Format.UseJson();

            Default.DefaultBatchCustomer validCustomer = new Default.DefaultBatchCustomer()
            {
                Id   = 10,
                Name = "Customer 10"
            };

            Default.DefaultBatchCustomer invalidCustomer = new Default.DefaultBatchCustomer()
            {
                Id   = -1,
                Name = "Customer -1"
            };

            client.AddToDefaultBatchCustomer(validCustomer);
            client.AddToDefaultBatchCustomer(invalidCustomer);
            DataServiceRequestException exception = Assert.Throws <DataServiceRequestException>(() =>
            {
                DataServiceResponse response = client.SaveChanges(SaveChangesOptions.Batch);
            });

            Assert.Equal(202, exception.Response.BatchStatusCode);
            Assert.Equal(1, exception.Response.Count());
        }
        public void CanPerformCudOperationsOnABatch()
        {
            Uri serviceUrl = new Uri(BaseAddress + "/DefaultBatch");
            var client     = new Default.Container(serviceUrl);

            client.Format.UseJson();

            IList <Default.DefaultBatchCustomer> customers = client.DefaultBatchCustomer.ToList();

            Default.DefaultBatchCustomer customerToDelete = customers.First();
            Default.DefaultBatchCustomer customerToUpdate = customers.Skip(1).First();
            Default.DefaultBatchCustomer customerToAdd    = new Default.DefaultBatchCustomer {
                Id = 10, Name = "Customer 10"
            };

            client.DeleteObject(customerToDelete);
            customerToUpdate.Name = "Updated customer name";
            client.UpdateObject(customerToUpdate);
            client.AddToDefaultBatchCustomer(customerToAdd);

            client.SaveChanges(SaveChangesOptions.Batch);

            var newClient = new Default.Container(serviceUrl);
            IList <Default.DefaultBatchCustomer> changedCustomers = newClient.DefaultBatchCustomer.ToList();

            Assert.False(changedCustomers.Any(x => x.Id == customerToDelete.Id));
            Assert.Equal(customerToUpdate.Name, changedCustomers.Single(x => x.Id == customerToUpdate.Id).Name);
            Assert.Single(changedCustomers, x => x.Id == 10);
        }
        public virtual void CanSetLinksInABatchWithDataServicesClient()
        {
            Uri serviceUrl = new Uri(BaseAddress + "/DefaultBatch");

            Default.Container client = new Default.Container(serviceUrl);
            client.Format.UseJson();

            Default.DefaultBatchCustomer customer = client.DefaultBatchCustomer.ToList().First();
            Default.DefaultBatchOrder    order    = new Default.DefaultBatchOrder()
            {
                Id = 0, PurchaseDate = DateTime.Now
            };

            client.AddToDefaultBatchOrder(order);

            client.AddLink(customer, "Orders", order);

            client.SaveChanges(SaveChangesOptions.Batch);
        }