public void Ctor_CorrectlySets_AllInstanceProperties()
        {
            UseConnection(connection =>
            {
                var fetchedJob = new LiteDbFetchedJob(connection, ObjectId.NewObjectId(), JobId, Queue);

                Assert.Equal(JobId.ToString(), fetchedJob.JobId);
                Assert.Equal(Queue, fetchedJob.Queue);
            });
        }
        public void RemoveFromQueue_ReallyDeletesTheJobFromTheQueue()
        {
            UseConnection(connection =>
            {
                // Arrange
                var queue         = "default";
                var jobId         = 1;
                var id            = CreateJobQueueRecord(connection, jobId, queue);
                var processingJob = new LiteDbFetchedJob(connection, id, jobId, queue);

                // Act
                processingJob.RemoveFromQueue();

                // Assert
                var count = connection.JobQueue.Count();
                Assert.Equal(0, count);
            });
        }
        public void Dispose_SetsFetchedAtValueToNull_IfThereWereNoCallsToComplete()
        {
            UseConnection(connection =>
            {
                // Arrange
                var queue         = "default";
                var jobId         = 1;
                var id            = CreateJobQueueRecord(connection, jobId, queue);
                var processingJob = new LiteDbFetchedJob(connection, id, jobId, queue);

                // Act
                processingJob.Dispose();

                // Assert
                var record = connection.JobQueue.FindAll().ToList().Single();
                Assert.Null(record.FetchedAt);
            });
        }
        public void RemoveFromQueue_DoesNotDelete_UnrelatedJobs()
        {
            UseConnection(connection =>
            {
                // Arrange
                CreateJobQueueRecord(connection, 1, "default");
                CreateJobQueueRecord(connection, 2, "critical");
                CreateJobQueueRecord(connection, 3, "default");

                var fetchedJob = new LiteDbFetchedJob(connection, ObjectId.NewObjectId(), 999, "default");

                // Act
                fetchedJob.RemoveFromQueue();

                // Assert
                var count = connection.JobQueue.Count();
                Assert.Equal(3, count);
            });
        }
        public void Dequeue_ShouldFetchAJob_FromTheSpecifiedQueue()
        {
            // Arrange
            UseConnection(connection =>
            {
                var jobQueue = new JobQueue
                {
                    JobId = 1,
                    Queue = "default"
                };

                connection.JobQueue.Insert(jobQueue);

                var queue = CreateJobQueue(connection);

                // Act
                LiteDbFetchedJob payload = (LiteDbFetchedJob)queue.Dequeue(DefaultQueues, CreateTimingOutCancellationToken());

                // Assert
                Assert.Equal("1", payload.JobId);
                Assert.Equal("default", payload.Queue);
            });
        }