public async Task BasicInsertWithoutId() { IMobileServiceTable<Product> table = this.OfflineClient.GetTable<Product>(); Product product = new Product() { AvailableTime = TimeSpan.FromHours(2), DisplayAisle = (short)(2 + 10), InStock = true, Name = "AwesomeProduct" + 2, OptionFlags = (byte)5, OtherId = 34, Price = 30.09M, Type = ProductType.Furniture, Weight = 35.7f, }; await table.InsertAsync(product); Assert.IsNotNull(product.Id); Assert.IsNotNull(product.CreatedAt); Assert.IsNotNull(product.UpdatedAt); Assert.AreEqual(TimeSpan.FromHours(2), product.AvailableTime); Assert.AreEqual((short)12, product.DisplayAisle); Assert.AreEqual(true, product.InStock); Assert.AreEqual("AwesomeProduct2", product.Name); Assert.AreEqual((byte)5, product.OptionFlags); Assert.AreEqual(34, product.OtherId); Assert.AreEqual(30.09M, product.Price); Assert.AreEqual(ProductType.Furniture, product.Type); Assert.AreEqual(35.7f, product.Weight); }
private async Task PrepareTableAsync(MobileServiceClient client) { // Make sure the table is empty IMobileServiceTable<Product> table = client.GetTable<Product>(); IEnumerable<Product> results = await table.ReadAsync(); foreach (Product item in results) { await table.DeleteAsync(item); } products = new Product[50]; for (int i = 0; i < 50; i++) { string id = Guid.NewGuid().ToString(); Product p = new Product() { AvailableTime = TimeSpan.FromHours(i), Id = id, DisplayAisle = (short)(i + 10), InStock = i % 2 == 0, Name = "Product" + i, OptionFlags = (byte)i, OtherId = i, Price = 30.09M, Type = i % 2 == 0 ? ProductType.Food : ProductType.Furniture, Weight = i % 2 == 0 ? 35.7f : (float?)null, }; products[i] = p; await table.InsertAsync(p); } }
public async Task BasicUpdateOffline() { this.NetworkInformation.IsOnline = false; IMobileServiceTable<Product> table = this.OfflineClient.GetTable<Product>(); Guid guid = Guid.NewGuid(); Product product = new Product() { AvailableTime = TimeSpan.FromHours(2), Id = guid.ToString(), DisplayAisle = (short)(2 + 10), InStock = true, Name = "AwesomeProduct" + 2, OptionFlags = (byte)5, OtherId = 34, Price = 30.09M, Type = ProductType.Furniture, Weight = 35.7f, }; await table.InsertAsync(product); product.Price = 20.79M; await table.UpdateAsync(product); Product product2 = (await table.Where(p => p.Id == guid.ToString()).ToEnumerableAsync()).FirstOrDefault(); Assert.AreEqual(20.79M, product.Price); Assert.AreEqual(20.79M, product2.Price); this.NetworkInformation.IsOnline = true; }
public async Task BasicDelete() { IMobileServiceTable<Product> table = this.OfflineClient.GetTable<Product>(); Guid guid = Guid.NewGuid(); Product product = new Product() { AvailableTime = TimeSpan.FromHours(2), Id = guid.ToString(), DisplayAisle = (short)(2 + 10), InStock = true, Name = "AwesomeProduct" + 2, OptionFlags = (byte)5, OtherId = 34, Price = 30.09M, Type = ProductType.Furniture, Weight = 35.7f, }; await table.InsertAsync(product); await table.DeleteAsync(product); //temp until Lookup works Product product2 = (await table.Where(p => p.Id == guid.ToString()).ToEnumerableAsync()).FirstOrDefault(); Assert.IsNull(product2); }
public async Task UpdateUpdateServerWins() { IMobileServiceTable<Product> table = this.OfflineClient.GetTable<Product>(); Guid guid = Guid.NewGuid(); Product product = new Product() { AvailableTime = TimeSpan.FromHours(2), Id = guid.ToString(), DisplayAisle = (short)(2 + 10), InStock = true, Name = "AwesomeProduct" + 2, OptionFlags = (byte)5, OtherId = 34, Price = 30.09M, Type = ProductType.Furniture, Weight = 35.7f, }; await table.InsertAsync(product); product.Price = 20.79M; // store version to simulate conflict string oldVersion = product.Version; await table.UpdateAsync(product, new Dictionary<string, string>() { { "resolveStrategy", "serverWins" } }); string newVersion = product.Version; product.Version = oldVersion; product.Price = 45.67M; await table.UpdateAsync(product, new Dictionary<string, string>() { { "resolveStrategy", "serverWins" } }); Assert.AreEqual(20.79M, product.Price); }
public async Task ReadShouldReadInserts() { this.NetworkInformation.IsOnline = false; IMobileServiceTable<Product> table = this.OfflineClient.GetTable<Product>(); IEnumerable<Product> results = await table.ReadAsync(); Assert.AreEqual(10, results.Count()); Guid guid = Guid.NewGuid(); Product product = new Product() { AvailableTime = TimeSpan.FromHours(2), Id = guid.ToString(), DisplayAisle = (short)(2 + 10), InStock = true, Name = "AwesomeProduct" + 2, OptionFlags = (byte)5, OtherId = 34, Price = 30.09M, Type = ProductType.Furniture, Weight = 35.7f, }; await table.InsertAsync(product); results = await table.ReadAsync(); Assert.AreEqual(11, results.Count()); await table.DeleteAsync(product); results = await table.ReadAsync(); Assert.AreEqual(10, results.Count()); this.NetworkInformation.IsOnline = true; }
public async Task InsertWithSameIdShouldThrowOffline() { this.NetworkInformation.IsOnline = false; IMobileServiceTable<Product> table = this.OfflineClient.GetTable<Product>(); Guid guid = Guid.NewGuid(); Product product = new Product() { AvailableTime = TimeSpan.FromHours(2), Id = guid.ToString(), Version = "AAAAAAAACIQ=", DisplayAisle = (short)(2 + 10), InStock = true, Name = "AwesomeProduct" + 2, OptionFlags = (byte)5, OtherId = 34, Price = 30.09M, Type = ProductType.Furniture, Weight = 35.7f, }; await table.InsertAsync(product); Exception ex = null; try { await table.InsertAsync(product); } catch (Exception e) { ex = e; } Assert.IsNotNull(ex); this.NetworkInformation.IsOnline = true; }
public async Task UpdateDeleteLatestWriteWins() { IMobileServiceTable<Product> table = this.OfflineClient.GetTable<Product>(); Guid guid = Guid.NewGuid(); Product product = new Product() { AvailableTime = TimeSpan.FromHours(2), Id = guid.ToString(), DisplayAisle = (short)(2 + 10), InStock = true, Name = "AwesomeProduct" + 2, OptionFlags = (byte)5, OtherId = 34, Price = 30.09M, Type = ProductType.Furniture, Weight = 35.7f, }; await table.InsertAsync(product); product.Price = 20.79M; // store version to simulate conflict string oldVersion = product.Version; await table.UpdateAsync(product); string newVersion = product.Version; product.Version = oldVersion; // NOTE: this is kind of hacky, but is needed because the way delete are handled. using (this.Storage.Open()) { await this.Storage.UpdateData("products", new JArray(new JObject() { { "id", guid }, { "__version", oldVersion } })); } await table.DeleteAsync(product); Product product2 = (await table.Where(p => p.Id == guid.ToString()).ToEnumerableAsync()).FirstOrDefault(); Assert.IsNull(product2); }
public async Task DeleteDeleteLatestWriteWins() { IMobileServiceTable<Product> table = this.OfflineClient.GetTable<Product>(); Guid guid = Guid.NewGuid(); Product product = new Product() { AvailableTime = TimeSpan.FromHours(2), Id = guid.ToString(), DisplayAisle = (short)(2 + 10), InStock = true, Name = "AwesomeProduct" + 2, OptionFlags = (byte)5, OtherId = 34, Price = 30.09M, Type = ProductType.Furniture, Weight = 35.7f, }; await table.InsertAsync(product); product.Price = 20.79M; // store version to simulate conflict string oldVersion = product.Version; await table.DeleteAsync(product); //put id back product.Id = guid.ToString(); product.Version = oldVersion; await table.DeleteAsync(product); Product product2 = (await table.Where(p => p.Id == guid.ToString()).ToEnumerableAsync()).FirstOrDefault(); Assert.IsNull(product2); }