Пример #1
0
 private void AppendContextsToRegister(IEnumerable <string> contexts)
 {
     foreach (var context in contexts)
     {
         if (!contextsToRegister.Contains(context))
         {
             contextsToRegister.Enqueue(context);
         }
     }
 }
        internal static Moq.Mock <IBackgroundTaskQueue> MockBackgroundTaskQueue(IHashesRepository repository)
        {
            // Arrange
            var workItems = new System.Collections.Concurrent.ConcurrentQueue <IBaseBackgroundOperation>();

            Moq.Mock <IBackgroundTaskQueue>        back_tasks_mock = new Moq.Mock <IBackgroundTaskQueue>();
            Moq.Mock <IBackgroundOperationService> serv_mock       = new Moq.Mock <IBackgroundOperationService>();

            serv_mock.Setup(r => r.StartAsync(Moq.It.IsAny <CancellationToken>()))
            .Returns <CancellationToken>(async(token) =>
            {
                foreach (var wi in workItems)
                {
                    switch (wi)
                    {
                    case CalculateHashesInfoBackgroundOperation calc_hash_op:
                        await repository.CalculateHashesInfo(null, null, default);
                        if (workItems.Contains(wi))
                        {
                            if (back_tasks_mock.Object != null && back_tasks_mock.Object is IBackgroundTaskQueue back_tasks)
                            {
                                var oper = await back_tasks.DequeueAsync(token);
                                //workItems.TryDequeue(out var dummy);
                            }
                        }
                        break;

                    case BeepBackgroundOperation beep:
                        await beep.DoWorkAsync(null, token);
                        break;

                    case DummyBackgroundOperation dummy:
                        await dummy.DoWorkAsync(null, token);
                        break;

                    case YouTubeUploadOperation youtube:
                        await youtube.DoWorkAsync(null, token);
                        break;

                    default:
                        throw new NotSupportedException();
                    }
                }
            });

            serv_mock.Setup(r => r.StopAsync(Moq.It.IsAny <CancellationToken>()))
            .Returns <CancellationToken>((token) => Task.CompletedTask);

            // Arrange
            var operation = new CalculateHashesInfoBackgroundOperation();

            back_tasks_mock.Setup(r => r.QueueBackgroundWorkItem(Moq.It.IsAny <IBaseBackgroundOperation>()))
            .Callback <IBaseBackgroundOperation>((oper) =>
            {
                workItems.Enqueue(oper);

                serv_mock.Object.StartAsync(default);