public async Task QueueOperationAsync_RemovesExistingOperation_WhenOperationIsCancelled()
        {
            var testNewOperation      = new CreateMobileServiceFileOperation("id", "fileId");
            var testExistingOperation = new Mock <IMobileServiceFileOperation>();

            testExistingOperation.SetupGet(m => m.Id).Returns("testID");
            testExistingOperation.Setup(m => m.OnQueueingNewOperation(It.Is <IMobileServiceFileOperation>(o => o == testNewOperation)))
            .Callback(() => testExistingOperation.SetupGet(m => m.State).Returns(FileOperationState.Cancelled));


            MobileServiceFileSyncContextInput input = MobileServiceFileSyncContextInput.CreateWithout(MobileServiceFileSyncContextArgs.OperationQueue);

            var operationQueueMock = new Mock <IFileOperationQueue>();

            operationQueueMock.Setup(m => m.GetOperationByFileIdAsync(It.Is <string>(s => string.Compare(s, testNewOperation.FileId) == 0)))
            .Returns(() => Task.FromResult <IMobileServiceFileOperation>(testExistingOperation.Object));

            input.OperationsQueue = operationQueueMock.Object;

            MobileServiceFileSyncContext context = CreateContext(input);

            await context.QueueOperationAsync(testNewOperation);

            Assert.Equal(FileOperationState.Cancelled, testExistingOperation.Object.State);
            operationQueueMock.Verify(m => m.RemoveAsync(It.Is <string>(s => s == testExistingOperation.Object.Id)), Times.Once());
        }
        public async Task QueueOperationAsync_NotifiesExistingOperation_WhenOperationIsQueued()
        {
            var testNewOperation      = new CreateMobileServiceFileOperation("id", "fileId");
            var testExistingOperation = new Mock <IMobileServiceFileOperation>();

            MobileServiceFileSyncContextInput input = MobileServiceFileSyncContextInput.CreateWithout(MobileServiceFileSyncContextArgs.OperationQueue);

            var operationQueueMock = new Mock <IFileOperationQueue>();

            operationQueueMock.Setup(m => m.GetOperationByFileIdAsync(It.Is <string>(s => string.Compare(s, testNewOperation.FileId) == 0)))
            .Returns(() => Task.FromResult <IMobileServiceFileOperation>(testExistingOperation.Object));

            input.OperationsQueue = operationQueueMock.Object;

            MobileServiceFileSyncContext context = CreateContext(input);

            await context.QueueOperationAsync(testNewOperation);

            testExistingOperation.Verify(m => m.OnQueueingNewOperation(It.Is <IMobileServiceFileOperation>(o => o.Equals(testNewOperation))), Times.Once());
        }
示例#3
0
        public async Task AddFileAsync(MobileServiceFile file)
        {
            var metadata = new MobileServiceFileMetadata
            {
                FileId             = file.Id,
                FileName           = file.Name,
                Length             = file.Length,
                Location           = FileLocation.Local,
                ContentMD5         = file.ContentMD5,
                ParentDataItemType = file.TableName,
                ParentDataItemId   = file.ParentId
            };

            await metadataStore.CreateOrUpdateAsync(metadata);

            var operation = new CreateMobileServiceFileOperation(Guid.NewGuid().ToString(), file.Id);

            await QueueOperationAsync(operation);

            NotifyFileOperationCompletion(file, FileOperationKind.Create, FileOperationSource.Local);
        }
示例#4
0
 private bool IsOperationValid(CreateMobileServiceFileOperation operation)
 {
     return(operation.FileId == this.inputFile.Id &&
            operation.Kind == FileOperationKind.Create &&
            operation.State == FileOperationState.Pending);
 }