public void ShouldCallImagesLinksExtractorWithAllLinks() { // Arrange var imagesLinksExtractorMock = Substitute.For <IImageLinksExtractor>(); var dataRetrieverMock = Substitute.For <IDataRetriever>(); var rmqPublisherMock = Substitute.For <IRmqPublisher>(); var configDic = new Dictionary <string, string> { { "Config:Application:TargetUrls", "http://ya.ru http://google.com http://mail.ru" }, { "Config:Binding:SenderExchange", "TestExchange" }, { "Config:Binding:SenderRoutingKeys", "TestRk1 TestRk2 TestRk3" }, }; var builder = new ConfigurationBuilder() .AddInMemoryCollection(configDic); var fakeConfigurationSection = builder .Build() .GetSection("Config"); var sut = new ImageExtractorEngine( imagesLinksExtractorMock, dataRetrieverMock, fakeConfigurationSection, rmqPublisherMock); // Act sut.Start(); // Assert imagesLinksExtractorMock .Received(1) .Extract(Arg.Is("http://ya.ru")); imagesLinksExtractorMock .Received(1) .Extract(Arg.Is("http://google.com")); imagesLinksExtractorMock .Received(1) .Extract(Arg.Is("http://mail.ru")); }
public void ShouldCallPublishForEveryImageMessage() { // Arrange var imagesLinksExtractorMock = Substitute.For <IImageLinksExtractor>(); var dataRetrieverMock = Substitute.For <IDataRetriever>(); var rmqPublisherMock = Substitute.For <IRmqPublisher>(); var configDic = new Dictionary <string, string> { { "Config:Application:TargetUrls", "http://ya.ru http://google.com http://mail.ru" }, { "Config:Binding:SenderExchange", "TestExchange" }, { "Config:Binding:SenderRoutingKeys", "TestRk1,TestRk2,TestRk3" }, }; var routingKeysStringArray = new string[3] { "TestRk1", "TestRk2", "TestRk3" }; var builder = new ConfigurationBuilder() .AddInMemoryCollection(configDic); var fakeConfigurationSection = builder .Build() .GetSection("Config"); var sut = new ImageExtractorEngine( imagesLinksExtractorMock, dataRetrieverMock, fakeConfigurationSection, rmqPublisherMock); List <string> imageLinks = new List <string>(); List <string> nullImageLinks = null; imageLinks.Add("http://ya.ru/1.png"); imageLinks.Add("http://ya.ru/2.png"); imageLinks.Add("http://ya.ru/3.png"); imageLinks.Add("http://ya.ru/4.png"); byte[] firstImage = { 0x1, 0x2, 0x3, 0x4, 0x5 }; byte[] secondImage = { 0x6, 0x7, 0x8, 0x9, 0xA }; byte[] thirdImage = { 0xB, 0xC, 0xD, 0xE, 0xF }; byte[] fourthImage = { 0x0, 0x0, 0x0, 0x0, 0x0 }; var firstImageMessage = new ImageMessage(); firstImageMessage.ImageAsBase64 = Convert.ToBase64String(firstImage); firstImageMessage.ImageNameWithExtension = "1.png"; var secondImageMessage = new ImageMessage(); firstImageMessage.ImageAsBase64 = Convert.ToBase64String(secondImage); firstImageMessage.ImageNameWithExtension = "2.png"; var thirdImageMessage = new ImageMessage(); firstImageMessage.ImageAsBase64 = Convert.ToBase64String(thirdImage); firstImageMessage.ImageNameWithExtension = "3.png"; var fourthImageMessage = new ImageMessage(); firstImageMessage.ImageAsBase64 = Convert.ToBase64String(fourthImage); firstImageMessage.ImageNameWithExtension = "4.png"; byte[] firstExpectedImagePush = Encoding.UTF8.GetBytes( JsonConvert.SerializeObject(firstImageMessage)); byte[] secondExpectedImagePush = Encoding.UTF8.GetBytes( JsonConvert.SerializeObject(secondImageMessage)); byte[] thirdExpectedImagePush = Encoding.UTF8.GetBytes( JsonConvert.SerializeObject(thirdImageMessage)); byte[] fourthExpectedImagePush = Encoding.UTF8.GetBytes( JsonConvert.SerializeObject(fourthImageMessage)); imagesLinksExtractorMock .Extract(Arg.Is("http://ya.ru")) .Returns <List <string> >(imageLinks); imagesLinksExtractorMock .Extract(Arg.Is("http://google.com")) .Returns <List <string> >(nullImageLinks); imagesLinksExtractorMock .Extract(Arg.Is("http://mail.ru")) .Returns <List <string> >(nullImageLinks); dataRetrieverMock .RetrieveBytesAsync(Arg.Is("http://ya.ru/1.png")) .Returns(Task.FromResult(firstImage)); dataRetrieverMock .RetrieveBytesAsync(Arg.Is("http://ya.ru/2.png")) .Returns(Task.FromResult(secondImage)); dataRetrieverMock .RetrieveBytesAsync(Arg.Is("http://ya.ru/3.png")) .Returns(Task.FromResult(thirdImage)); dataRetrieverMock .RetrieveBytesAsync(Arg.Is("http://ya.ru/4.png")) .Returns(Task.FromResult(fourthImage)); // Act sut.Start(); // Assert rmqPublisherMock .Received() .Publish( Arg.Is <byte[]>(e => firstExpectedImagePush.SequenceEqual(e)), Arg.Is <string>("TestExchange"), Arg.Is <string[]>(rk => routingKeysStringArray.SequenceEqual(rk))); }