public async Task Retreive_WithNonExistantKey_ReturnsNull()
        {
            var store = new InMemoryJobStore(loggerMock.Object);
            var job   = await store.GetById(365);

            job.Should().BeNull();
        }
        public void Save_NullJob_ThrowsNullException()
        {
            var         store = new InMemoryJobStore(loggerMock.Object);
            Func <Task> act   = async() => await store.Save(1, null);

            act.Should().Throw <ArgumentNullException>();
        }
        public void Save_WithPreexistingKey_ThrowsArgumentException()
        {
            var store = new InMemoryJobStore(loggerMock.Object);

            Func <Task> act = async() => await store.Save(1, null);

            Func <Task> act2 = async() => await store.Save(1, null);

            act.Should().Throw <ArgumentException>();
        }
        public async Task GetAll_ReturnsAllAdded()
        {
            var store = new InMemoryJobStore(loggerMock.Object);

            await store.Save(IDGenerator.GenerateNewId(), sortingJob);

            await store.Save(IDGenerator.GenerateNewId(), sortingJob);

            var jobs = await store.GetAll();

            jobs.Should().HaveCount(2);
            jobs.Should().NotContainNulls();
        }
        public async Task Retreive_WithExistingKey_RetrievesAtSavedKey()
        {
            var store = new InMemoryJobStore(loggerMock.Object);
            var id    = IDGenerator.GenerateNewId();

            await store.Save(id, sortingJob);

            var job = await store.GetById(id);

            job.Should().NotBeNull();
            job.Should().BeOfType(typeof(SortingJob));
            job.Should().BeSameAs(sortingJob);
        }
        public async Task Save_RespectsThreads()
        {
            // Best effort thread test

            var store = new InMemoryJobStore(loggerMock.Object);

            Parallel.For(0, 100, async(i) =>
            {
                await store.Save(IDGenerator.GenerateNewId(), sortingJob);
            });

            var allItems = await store.GetAll();

            allItems.Should().NotContainNulls();
            allItems.Should().HaveCount(100);
        }