public async Task<byte[]> WebAPICall(AudioJob auj)
 {
     //return Encoding.ASCII.GetBytes("test");
     byte[] byteRes = null;
     AudioJobRepository audioJobRepo = new AudioJobRepository();
     Guid jobID = await audioJobRepo.SubmitWorkItem(auj);
     while (audioJobRepo.GetWorkStatus(jobID) == 2)
     {
         //wait
         await Task.Delay(200);
     }
     if (audioJobRepo.GetWorkStatus(jobID) == 1)
     {
         //sucess
         FileResult result = audioJobRepo.GetResultContents(jobID);
         byteRes = result.getFileContents();
     }
     else
     {
         //fail
         throw new Exception("Task with job ID: " + jobID + " failed");
     }
     return byteRes;
 }
        public async Task TestPostAudioJob()
        {
            //init
            var mockJobs = new Mock<DbSet<Job>>();
            var mockServiceUsers = new Mock<DbSet<ServiceUser>>();
            var mockContext = new Mock<RoboBrailleDataContext>();
            var mockAuSender = new Mock<IAudioJobSender>();

            // arrange
            var users = new List<ServiceUser> { 
                new ServiceUser
                {
                EmailAddress = "*****@*****.**",
                UserId = Guid.Parse("d2b97532-e8c5-e411-8270-f0def103cfd0"),
                ApiKey = Encoding.UTF8.GetBytes("7b76ae41-def3-e411-8030-0c8bfd2336cd"),
                FromDate = new DateTime(2015, 1, 1),
                ToDate = new DateTime(2020, 1, 1),
                UserName = "******",
                Jobs = null
                }
            }.AsQueryable();

            AudioJob auj = new AudioJob()
            {
                Id = Guid.NewGuid(),
                FileContent = new byte[512],
                UserId = Guid.Parse("d2b97532-e8c5-e411-8270-f0def103cfd0"),
                FileExtension = ".pdf",
                FileName = "test",
                MimeType = "application/pdf",
                Status = JobStatus.Started,
                SubmitTime = DateTime.Now,
                DownloadCounter = 0,
                InputFileHash = new byte[64],
                AudioLanguage = Language.daDK,
                FormatOptions = AudioFormat.Mp3,
                SpeedOptions = AudioSpeed.Normal,
                VoicePropriety = new VoicePropriety[] { VoicePropriety.Anne }
            };
            AudioJob auj2 = new AudioJob()
            {
                Id = Guid.NewGuid(),
                FileContent = new byte[256],
                UserId = Guid.Parse("d2b87532-e8c5-e411-8270-f0def103cfd0"),
                FileExtension = ".txt",
                FileName = "test2",
                MimeType = "text/plain",
                Status = JobStatus.Done,
                SubmitTime = DateTime.Now,
                DownloadCounter = 2,
                InputFileHash = new byte[2]
            };
            var jobs = new List<AudioJob> { auj2 }.AsQueryable();

            mockJobs.As<IDbAsyncEnumerable<Job>>().Setup(m => m.GetAsyncEnumerator()).Returns(new TestDbAsyncEnumerator<Job>(jobs.GetEnumerator()));
            mockJobs.As<IQueryable<Job>>().Setup(m => m.Provider).Returns(new TestDbAsyncQueryProvider<Job>(jobs.Provider));

            mockJobs.As<IQueryable<Job>>().Setup(m => m.Expression).Returns(jobs.Expression);
            mockJobs.As<IQueryable<Job>>().Setup(m => m.ElementType).Returns(jobs.ElementType);
            mockJobs.As<IQueryable<Job>>().Setup(m => m.GetEnumerator()).Returns(jobs.GetEnumerator());

            mockServiceUsers.As<IDbAsyncEnumerable<ServiceUser>>().Setup(m => m.GetAsyncEnumerator()).Returns(new TestDbAsyncEnumerator<ServiceUser>(users.GetEnumerator()));
            mockServiceUsers.As<IQueryable<ServiceUser>>().Setup(m => m.Provider).Returns(new TestDbAsyncQueryProvider<ServiceUser>(users.Provider));
            mockServiceUsers.As<IQueryable<ServiceUser>>().Setup(m => m.Expression).Returns(users.Expression);
            mockServiceUsers.As<IQueryable<ServiceUser>>().Setup(m => m.ElementType).Returns(users.ElementType);
            mockServiceUsers.As<IQueryable<ServiceUser>>().Setup(m => m.GetEnumerator()).Returns(users.GetEnumerator());

            mockContext.Setup(m => m.Jobs).Returns(mockJobs.Object);
            mockContext.Setup(m => m.ServiceUsers).Returns(mockServiceUsers.Object);
            mockAuSender.Setup(m => m.SendAudioJobToQueue(auj)).Returns(new byte[512]);

            var repo = new AudioJobRepository(mockContext.Object, mockAuSender.Object);

            var request = new HttpRequestMessage();
            request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Authorization", "Hawk id=\"d2b97532-e8c5-e411-8270-f0def103cfd0\", ts=\"1470657024\", nonce=\"VkcMGB\", mac=\"hXW+BLRoqwlUaQZQtpPToOWnVAh5KbAXGGT5f8dLMVk=\"");
            var serviceController = new AudioController(repo);
            serviceController.Request = request;
            //call
            await serviceController.Post(auj);

            //test
            mockJobs.Verify(m => m.Add(It.IsAny<Job>()), Times.Once());
            mockContext.Verify(m => m.SaveChanges(), Times.Once());
            mockAuSender.Verify(m => m.SendAudioJobToQueue(It.IsAny<AudioJob>()), Times.Once());
        }
        public async Task TestPostAudioJob()
        {
            //init
            var mockJobs         = new Mock <DbSet <Job> >();
            var mockServiceUsers = new Mock <DbSet <ServiceUser> >();
            var mockContext      = new Mock <RoboBrailleDataContext>();
            var mockAuSender     = new Mock <IAudioJobSender>();

            // arrange
            var users = new List <ServiceUser> {
                new ServiceUser
                {
                    EmailAddress = "*****@*****.**",
                    UserId       = Guid.Parse("d2b97532-e8c5-e411-8270-f0def103cfd0"),
                    ApiKey       = Encoding.UTF8.GetBytes("7b76ae41-def3-e411-8030-0c8bfd2336cd"),
                    FromDate     = new DateTime(2015, 1, 1),
                    ToDate       = new DateTime(2020, 1, 1),
                    UserName     = "******",
                    Jobs         = null
                }
            }.AsQueryable();

            AudioJob auj = new AudioJob()
            {
                Id              = Guid.NewGuid(),
                FileContent     = new byte[512],
                UserId          = Guid.Parse("d2b97532-e8c5-e411-8270-f0def103cfd0"),
                FileExtension   = ".pdf",
                FileName        = "test",
                MimeType        = "application/pdf",
                Status          = JobStatus.Started,
                SubmitTime      = DateTime.Now,
                DownloadCounter = 0,
                InputFileHash   = new byte[64],
                AudioLanguage   = Language.daDK,
                FormatOptions   = AudioFormat.Mp3,
                SpeedOptions    = AudioSpeed.Normal,
                VoicePropriety  = new VoicePropriety[] { VoicePropriety.Anne }
            };
            AudioJob auj2 = new AudioJob()
            {
                Id              = Guid.NewGuid(),
                FileContent     = new byte[256],
                UserId          = Guid.Parse("d2b87532-e8c5-e411-8270-f0def103cfd0"),
                FileExtension   = ".txt",
                FileName        = "test2",
                MimeType        = "text/plain",
                Status          = JobStatus.Done,
                SubmitTime      = DateTime.Now,
                DownloadCounter = 2,
                InputFileHash   = new byte[2]
            };
            var jobs = new List <AudioJob> {
                auj2
            }.AsQueryable();

            mockJobs.As <IDbAsyncEnumerable <Job> >().Setup(m => m.GetAsyncEnumerator()).Returns(new TestDbAsyncEnumerator <Job>(jobs.GetEnumerator()));
            mockJobs.As <IQueryable <Job> >().Setup(m => m.Provider).Returns(new TestDbAsyncQueryProvider <Job>(jobs.Provider));

            mockJobs.As <IQueryable <Job> >().Setup(m => m.Expression).Returns(jobs.Expression);
            mockJobs.As <IQueryable <Job> >().Setup(m => m.ElementType).Returns(jobs.ElementType);
            mockJobs.As <IQueryable <Job> >().Setup(m => m.GetEnumerator()).Returns(jobs.GetEnumerator());

            mockServiceUsers.As <IDbAsyncEnumerable <ServiceUser> >().Setup(m => m.GetAsyncEnumerator()).Returns(new TestDbAsyncEnumerator <ServiceUser>(users.GetEnumerator()));
            mockServiceUsers.As <IQueryable <ServiceUser> >().Setup(m => m.Provider).Returns(new TestDbAsyncQueryProvider <ServiceUser>(users.Provider));
            mockServiceUsers.As <IQueryable <ServiceUser> >().Setup(m => m.Expression).Returns(users.Expression);
            mockServiceUsers.As <IQueryable <ServiceUser> >().Setup(m => m.ElementType).Returns(users.ElementType);
            mockServiceUsers.As <IQueryable <ServiceUser> >().Setup(m => m.GetEnumerator()).Returns(users.GetEnumerator());

            mockContext.Setup(m => m.Jobs).Returns(mockJobs.Object);
            mockContext.Setup(m => m.ServiceUsers).Returns(mockServiceUsers.Object);
            mockAuSender.Setup(m => m.SendAudioJobToQueue(auj)).Returns(Encoding.UTF8.GetBytes(testFileResult));

            var repo = new AudioJobRepository(mockContext.Object, mockAuSender.Object);

            var request = new HttpRequestMessage();

            request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Authorization", "Hawk id=\"d2b97532-e8c5-e411-8270-f0def103cfd0\", ts=\"1470657024\", nonce=\"VkcMGB\", mac=\"hXW+BLRoqwlUaQZQtpPToOWnVAh5KbAXGGT5f8dLMVk=\"");
            var serviceController = new AudioController(repo);

            serviceController.Request = request;
            //call
            await serviceController.Post(auj);

            //test
            mockJobs.Verify(m => m.Add(It.IsAny <Job>()), Times.Once());
            mockContext.Verify(m => m.SaveChanges(), Times.Exactly(2));
            mockAuSender.Verify(m => m.SendAudioJobToQueue(It.IsAny <AudioJob>()), Times.Once());
            Assert.IsFalse(File.Exists(testFileResult));
        }
        public void GetNextJobShouldReturnNullIfMachineAlreadyHasAHardSubtitlesJobActive()
        {
            // Arrange
            const string machinename = "TESTMACHINENAME";

            Mock <IHelper>              helper                     = new Mock <IHelper>();
            IAudioJobRepository         audioJobRepository         = new AudioJobRepository(helper.Object);
            IHardSubtitlesJobRepository hardSubtitlesJobRepository = new HardSubtitlesJobRepository(helper.Object, _fixture.ConnectionString);
            IJobRepository              sut = new JobRepository(helper.Object);

            helper.Setup(m => m.GetConnection())
            .Returns(() => new SqlConnection(_fixture.ConnectionString));

            hardSubtitlesJobRepository.Add(new HardSubtitlesJobRequest
            {
                DestinationFilename = "testoutputfilename",
                Needed              = DateTimeOffset.Now,
                OutputFolder        = "testoutputfolder",
                SubtitlesFilename   = "testsubtitlefilename",
                VideoSourceFilename = "testvideofilename"
            }, new List <FFmpegJob>
            {
                new HardSubtitlesJob
                {
                    Needed           = DateTimeOffset.Now,
                    Arguments        = "testarguments",
                    JobCorrelationId = Guid.NewGuid(),
                    SourceFilename   = "testsourcefilename"
                }
            });

            audioJobRepository.Add(new AudioJobRequest
            {
                DestinationFilename = "testoutputfilename",
                Needed          = DateTimeOffset.Now,
                OutputFolder    = "testoutputfolder",
                SourceFilenames = new List <string>
                {
                    "input.wav"
                },
                Targets = new[]
                {
                    new AudioDestinationFormat
                    {
                        AudioCodec = Codec.MP3,
                        Bitrate    = 192,
                        Channels   = Channels.Stereo,
                        Format     = ContainerFormat.MP4
                    }
                }
            }, new List <AudioTranscodingJob>
            {
                new AudioTranscodingJob
                {
                    Needed           = DateTimeOffset.Now,
                    Arguments        = "testarguments",
                    JobCorrelationId = Guid.NewGuid(),
                    SourceFilename   = "testsourcefilename"
                }
            });

            // Act
            var job = sut.GetNextJob(machinename);

            Assert.That(job, Is.Not.Null);

            sut.SaveProgress(job.Id, false, false, TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(30), machinename);

            var result = sut.GetNextJob(machinename);

            // Assert
            Assert.That(result, Is.Null);
        }