public async Task DeleteAsyncById_CanDeleteEntities()
        {
            var store = new OfflineSQLiteStore(ConnectionString);

            store.DefineTable(TestTable, IdEntityDefinition);
            await store.InitializeAsync();

            await store.UpsertAsync(TestTable, IdEntityValues, false);

            // Page before the deletion.
            var page = await store.GetPageAsync(new QueryDescription(TestTable) { IncludeTotalCount = true });

            Assert.Equal(IdEntityValues.Length, page.Count);
            Assert.Contains(page.Items, o => o.Value <string>("stringValue") == "item#1");

            var ids = IdEntityValues.Skip(2).Take(2).Select(o => o.Value <string>("id")).ToArray();
            await store.DeleteAsync(TestTable, ids);

            // Page after the deletion.
            var page2 = await store.GetPageAsync(new QueryDescription(TestTable) { IncludeTotalCount = true });

            Assert.Equal(IdEntityValues.Length - 2, page2.Count);
            Assert.DoesNotContain(page2.Items, o => o.Value <string>("id") == ids[0]);
            Assert.DoesNotContain(page2.Items, o => o.Value <string>("id") == ids[1]);
        }
        public async Task DeleteAsyncByQuery_Throws_OnMissingTable()
        {
            var store = new OfflineSQLiteStore(ConnectionString);

            store.DefineTable(TestTable, IdEntityDefinition);
            await store.InitializeAsync();

            await Assert.ThrowsAsync <InvalidOperationException>(() => store.DeleteAsync(new QueryDescription("movies")));
        }
        public async Task DeleteAsyncById_EmptyListOfIds()
        {
            var store = new OfflineSQLiteStore(ConnectionString);

            store.DefineTable(TestTable, IdEntityDefinition);
            await store.InitializeAsync();

            await store.UpsertAsync(TestTable, IdEntityValues, false);

            // Page before the deletion.
            var page = await store.GetPageAsync(new QueryDescription(TestTable) { IncludeTotalCount = true });

            Assert.Equal(IdEntityValues.Length, page.Count);

            var ids = Array.Empty <string>();
            await store.DeleteAsync(TestTable, ids);

            // Page after the deletion.
            var page2 = await store.GetPageAsync(new QueryDescription(TestTable) { IncludeTotalCount = true });

            Assert.Equal(IdEntityValues.Length, page2.Count);
        }
        public async Task DeleteAsyncByQuery_CanDeleteEntities()
        {
            var store = new OfflineSQLiteStore(ConnectionString);

            store.DefineTable(TestTable, IdEntityDefinition);
            await store.InitializeAsync();

            await store.UpsertAsync(TestTable, IdEntityValues, false);

            // Page before the deletion.
            var page = await store.GetPageAsync(new QueryDescription(TestTable) { IncludeTotalCount = true });

            Assert.Equal(IdEntityValues.Length, page.Count);
            Assert.Contains(page.Items, o => o.Value <string>("stringValue") == "item#1");

            QueryDescription query = QueryDescription.Parse(TestTable, "$filter=(stringValue eq 'item#1')");
            await store.DeleteAsync(query);

            // Page after the deletion.
            var page2 = await store.GetPageAsync(new QueryDescription(TestTable) { IncludeTotalCount = true });

            Assert.Equal(IdEntityValues.Length - 1, page2.Count);
            Assert.DoesNotContain(page2.Items, o => o.Value <string>("stringValue") == "item#1");
        }
 public async Task DeleteAsyncByQuery_Throws_WhenStoreIsNotInitialized()
 {
     var store = new OfflineSQLiteStore(ConnectionString);
     await Assert.ThrowsAsync <InvalidOperationException>(() => store.DeleteAsync(new QueryDescription(TestTable)));
 }
 public async Task DeleteAsyncById_Throws_WhenStoreIsNotInitialized()
 {
     var store = new OfflineSQLiteStore(ConnectionString);
     await Assert.ThrowsAsync <InvalidOperationException>(() => store.DeleteAsync(TestTable, new[] { "id" }));
 }