public async Task ExecuteOnOfflineStore_Throws_WithItemNotInStore()
        {
            var store = new Mock <IOfflineStore>();

            store.Setup(x => x.GetItemAsync("test", "1234", It.IsAny <CancellationToken>())).Returns(Task.FromResult((JObject)null));
            store.Setup(x => x.UpsertAsync("test", It.IsAny <IEnumerable <JObject> >(), It.IsAny <bool>(), It.IsAny <CancellationToken>())).Returns(Task.CompletedTask);
            var sut = new UpdateOperation("test", "1234");

            await Assert.ThrowsAsync <OfflineStoreException>(() => sut.ExecuteOperationOnOfflineStoreAsync(store.Object, testObject));
        }
        public async Task ExecuteOnOfflineStore_Works_WithItemInStore()
        {
            var store = new Mock <IOfflineStore>();

            store.Setup(x => x.GetItemAsync("test", "1234", It.IsAny <CancellationToken>())).Returns(Task.FromResult(testObject));
            store.Setup(x => x.UpsertAsync("test", It.IsAny <IEnumerable <JObject> >(), It.IsAny <bool>(), It.IsAny <CancellationToken>())).Returns(Task.CompletedTask);
            var sut = new UpdateOperation("test", "1234");

            await sut.ExecuteOperationOnOfflineStoreAsync(store.Object, testObject);

            Assert.Equal(2, store.Invocations.Count);

            var upsert = store.Invocations[1];

            Assert.IsAssignableFrom <IEnumerable <JObject> >(upsert.Arguments[1]);
            var items = (IEnumerable <JObject>)upsert.Arguments[1];

            Assert.Single(items);
            Assert.Equal(testObject, items.First());
        }