public void FinishProcessingItem_RemovesRawItemFromBlobStore()
        {
            var mocks = new LocatorMocks();
            var store = new ItemStore(mocks.MockLocator.Object);
            var rawItem = GetSampleItem();

            store.StoreFinishedItem(rawItem);

            mocks.MockRawBlobStore.Verify(b => b.Delete(rawItem.ResourceId), Times.Once());
        }
        public void FinishProcessingItem_UpdatesTableStoreInformation()
        {
            var mocks = new LocatorMocks();
            var store = new ItemStore(mocks.MockLocator.Object);
            var rawItem = GetSampleItem();

            store.StoreFinishedItem(rawItem);

            mocks.MockTableStore.Verify(ts => ts.Update(Match.Create<ItemBase>(ib => ib.ResourceId == rawItem.ResourceId)), Times.Once());
        }
        public void AddNewItem_StoresRawFileInBlob()
        {
            var mocks = new LocatorMocks();
            var store = new ItemStore(mocks.MockLocator.Object);
            var rawItem = GetSampleItem();

            store.AddNewItem(rawItem);

            mocks.MockRawBlobStore.Verify(mrb => mrb.Create(rawItem.ResourceId, rawItem.File), Times.Once());
        }
        public void FinishProcessingItem_AddsItemToFinishedBlobStore()
        {
            var mocks = new LocatorMocks();
            var store = new ItemStore(mocks.MockLocator.Object);
            var rawItem = GetSampleItem();

            store.StoreFinishedItem(rawItem);

            mocks.MockFinishedBlobStore.Verify(b => b.Create(rawItem.ResourceId, rawItem.File), Times.Once());
        }
        public void AddNewItem_RecordsAdditionInTable()
        {
            var mocks = new LocatorMocks();
            var store = new ItemStore(mocks.MockLocator.Object);
            var rawItem = GetSampleItem();

            store.AddNewItem(rawItem);

            mocks.MockTableStore.Verify(mts => mts.Create(Match.Create<ItemBase>(ib => ib.ResourceId == rawItem.ResourceId)), Times.Once());
        }
        public void AddNewItem_AddsItemToQueueForProcessing()
        {
            var mocks = new LocatorMocks();
            var store = new ItemStore(mocks.MockLocator.Object);
            var rawItem = GetSampleItem();

            store.AddNewItem(rawItem);

            mocks.MockQueueStore.Verify(mqs => mqs.Enqueue(Match.Create<ItemBase>(ib => ib.ResourceId == rawItem.ResourceId)), Times.Once());
        }
        public void RetrieveForProcessing_ItemInQueue_DequeuesASingleItem()
        {
            var mocks = new LocatorMocks();
            var store = new ItemStore(mocks.MockLocator.Object);
            Guid id = Guid.NewGuid();
            byte[] expected = new UTF8Encoding().GetBytes("test data");
            mocks.MockQueueStore.Setup(q => q.Dequeue()).Returns(new ItemBase() { ResourceId = id });
            mocks.MockRawBlobStore.Setup(b => b.Retrieve(id)).Returns(expected);

            var actual = store.RetrieveForProcessing();

            mocks.MockRawBlobStore.Verify(b => b.Retrieve(id), Times.Once());
        }
        public void RetrieveForProcessing_NoItemInQueue_ReturnsNull()
        {
            var mocks = new LocatorMocks();
            var store = new ItemStore(mocks.MockLocator.Object);
            Guid id = Guid.NewGuid();
            byte[] expected = new UTF8Encoding().GetBytes("test data");
            mocks.MockQueueStore.Setup(q => q.Dequeue()).Returns<ItemBase>(null);

            var actual = store.RetrieveForProcessing();

            Assert.IsNull(actual);
        }
        public void RetrieveForProcessing_NoItemInQueue_DoesNotAttemptToRetrieveDataFroBlobStore()
        {
            var mocks = new LocatorMocks();
            var store = new ItemStore(mocks.MockLocator.Object);
            Guid id = Guid.NewGuid();
            byte[] expected = new UTF8Encoding().GetBytes("test data");
            mocks.MockQueueStore.Setup(q => q.Dequeue()).Returns<ItemBase>(null);

            var actual = store.RetrieveForProcessing();

            mocks.MockRawBlobStore.Verify(b => b.Retrieve(It.IsAny<Guid>()), Times.Never());
        }
        public void RetrieveForProcessing_ItemInQueue_ReturnsItemWithRawData()
        {
            var mocks = new LocatorMocks();
            var store = new ItemStore(mocks.MockLocator.Object);
            Guid id = Guid.NewGuid();
            byte[] expected = new UTF8Encoding().GetBytes("test data");
            mocks.MockQueueStore.Setup(q => q.Dequeue()).Returns(new ItemBase() { ResourceId = id });
            mocks.MockRawBlobStore.Setup(b => b.Retrieve(id)).Returns(expected);

            var actual = store.RetrieveForProcessing();

            Assert.AreEqual(expected, actual.File);
        }