예제 #1
0
        public async Task WhenTheTokenHasNotBeenAddedItShouldWriteToTheChannel()
        {
            var channel           = Channel.CreateUnbounded <QueuedDownloadToken>();
            var queuedToken       = QueuedDownloadToken.Random();
            var cancellationToken = new CancellationTokenSource().Token;
            var filePath          = queuedToken.TokenPath;

            this.addedDownloadTokensCache.TryAdd(filePath).Returns(true);

            this.readDownloadToken.ExecuteAsync(filePath, cancellationToken).Returns(Task.FromResult(queuedToken.Token));

            await this.target.ExecuteAsync(channel.Writer, filePath, cancellationToken);

            channel.Writer.Complete();

            var writtenTokens = new List <QueuedDownloadToken>();

            await foreach (var item in channel.Reader.ReadAllAsync())
            {
                writtenTokens.Add(item);
            }

            Assert.Single(writtenTokens);
            Assert.Equal(queuedToken, writtenTokens.Single());
        }
예제 #2
0
        public string Execute(QueuedDownloadToken item)
        {
            var folderName = item.Token.StudyName;

            if (item.Token.Job != null)
            {
                folderName += " - " + item.Token.Job.JobName;
            }

            return(FileNameUtilities.Sanitize(folderName));
        }
        public async Task ItShouldInitiateDownload()
        {
            var token1        = QueuedDownloadToken.Random();
            var token2        = QueuedDownloadToken.Random();
            var channelReader = Channel.CreateUnbounded <QueuedDownloadToken>();
            await channelReader.Writer.WriteAsync(token1);

            await channelReader.Writer.WriteAsync(token2);

            channelReader.Writer.Complete();

            var targetFolder           = SingletonRandom.Instance.NextString();
            var generateCsv            = SingletonRandom.Instance.NextBoolean();
            var keepBinary             = SingletonRandom.Instance.NextBoolean();
            var cancellationToken      = new CancellationTokenSource().Token;
            var postProcessorPath      = SingletonRandom.Instance.NextString();
            var postProcessorArguments = SingletonRandom.Instance.NextString();

            this.getDownloadTokenFolderName.Execute(token1).Returns("f1");
            this.getDownloadTokenFolderName.Execute(token2).Returns("f2");

            var availableOutputFolder1 = Path.Combine(targetFolder, "f1.1");
            var availableOutputFolder2 = Path.Combine(targetFolder, "f2.1");

            this.getAvailableOutputFolder.Execute(Path.Combine(targetFolder, "f1")).Returns(availableOutputFolder1);
            this.getAvailableOutputFolder.Execute(Path.Combine(targetFolder, "f2")).Returns(availableOutputFolder2);

            this.performAutomaticStudyDownload.ExecuteAsync(
                Arg.Any <string>(),
                Arg.Any <string>(),
                Arg.Any <string>(),
                Arg.Any <string>(),
                Arg.Any <int?>(),
                Arg.Any <bool>(),
                Arg.Any <bool>(),
                Arg.Any <CancellationToken>()).Returns(Task.CompletedTask);

            this.postProcessStudyDownload.ExecuteAsync(
                Arg.Any <string>(),
                Arg.Any <string>(),
                Arg.Any <string>()).Returns(Task.CompletedTask);

            await this.target.ExecuteAsync(
                channelReader,
                targetFolder,
                generateCsv,
                keepBinary,
                postProcessorPath,
                postProcessorArguments,
                cancellationToken);

            await this.performAutomaticStudyDownload.Received(1).ExecuteAsync(
                token1.TokenPath,
                availableOutputFolder1,
                token1.Token.TenantId,
                token1.Token.StudyId,
                token1.Token.Job?.JobIndex,
                generateCsv,
                keepBinary,
                cancellationToken);

            await this.performAutomaticStudyDownload.Received(1).ExecuteAsync(
                token2.TokenPath,
                availableOutputFolder2,
                token2.Token.TenantId,
                token2.Token.StudyId,
                token2.Token.Job?.JobIndex,
                generateCsv,
                keepBinary,
                cancellationToken);

            await this.postProcessStudyDownload.Received(1).ExecuteAsync(
                postProcessorPath,
                postProcessorArguments,
                availableOutputFolder1);

            await this.postProcessStudyDownload.Received(1).ExecuteAsync(
                postProcessorPath,
                postProcessorArguments,
                availableOutputFolder2);
        }