public void ShouldMapFromFirmStatisticsDto() { var dto = new FirmStatisticsDto { ProjectId = 1, Firms = new[] { new FirmStatisticsDto.FirmDto { FirmId = 2, Categories = new[] { new FirmStatisticsDto.FirmDto.CategoryDto { CategoryId = 3, Hits = 4, Shows = 5 } } } } }; var entities = Specs.Map.Bit.FirmCategoryStatistics().Map(dto); Assert.That(entities.Count(), Is.EqualTo(1)); Assert.That(entities.Single().ProjectId, Is.EqualTo(1)); Assert.That(entities.Single().CategoryId, Is.EqualTo(3)); Assert.That(entities.Single().FirmId, Is.EqualTo(2)); Assert.That(entities.Single().Hits, Is.EqualTo(4)); Assert.That(entities.Single().Shows, Is.EqualTo(5)); }
public void ShouldProduceCalculateStatisticsOperationForFirmStatisticsDto() { // Arrange var repositoryFactory = new VerifiableRepositoryFactory(); var dto = new FirmStatisticsDto { ProjectId = 1, Firms = new[] { new FirmStatisticsDto.FirmDto { FirmId = 2, Categories = new[] { new FirmStatisticsDto.FirmDto.CategoryDto { CategoryId = 3, Hits = 4, Shows = 5 } } } } }; SourceDb.Has(new Bit::FirmCategoryStatistics { ProjectId = 1, FirmId = 7 }, new Bit::FirmCategoryStatistics { ProjectId = 2, FirmId = 8 }); var importer = CreateProcessor <FirmStatisticsDto, Bit::FirmCategoryStatistics>(repositoryFactory); // Act var operations = importer.Import(dto).ToArray(); // Assert Assert.That(operations.Count(), Is.EqualTo(1)); repositoryFactory.Verify <Bit::FirmCategoryStatistics>( m => m.Delete(It.Is(Predicate.Match(new Bit::FirmCategoryStatistics { ProjectId = 1, FirmId = 7 }))), Times.AtLeastOnce); repositoryFactory.Verify <Bit::FirmCategoryStatistics>( m => m.Add(It.Is(Predicate.Match(new Bit::FirmCategoryStatistics { ProjectId = 1, FirmId = 2, CategoryId = 3, Hits = 4, Shows = 5 }))), Times.AtLeastOnce); }
private bool TryParseFirmPopularity(XElement xml, out IDataTransferObject dto) { try { dto = new FirmStatisticsDto { ProjectId = (long)xml.Attribute("BranchCode"), Firms = xml.Descendants("Firm").Select(x => { var firmDto = new FirmStatisticsDto.FirmDto { FirmId = (long)x.Attribute("Code"), Categories = x.Descendants("Rubric").Select(y => { var clickCountAttr = y.Attribute("ClickCount"); var impressionCountAttr = y.Attribute("ImpressionCount"); if (clickCountAttr == null || impressionCountAttr == null) { throw new ArgumentException(); } var rubricDto = new FirmStatisticsDto.FirmDto.CategoryDto { CategoryId = (long)y.Attribute("Code"), Hits = (int)clickCountAttr, Shows = (int)impressionCountAttr, }; return(rubricDto); }).ToArray() }; return(firmDto); }).ToArray(), }; return(true); } catch (ArgumentException) { _tracer.Warn("Skip FirmPopularity message due to unsupported format"); dto = null; return(false); } }
public void ShouldProduceCalculateStatisticsOperationForFirmStatisticsDto() { // Arrange var repositoryFactory = new VerifiableRepositoryFactory(); var dto = new FirmStatisticsDto { ProjectId = 1, Firms = new[] { new FirmStatisticsDto.FirmDto { FirmId = 2, Categories = new[] { new FirmStatisticsDto.FirmDto.CategoryDto { CategoryId = 3, Hits = 4, Shows = 5 } } } } }; SourceDb.Has(new Bit::FirmCategoryStatistics { ProjectId = 1, FirmId = 7 }, new Bit::FirmCategoryStatistics { ProjectId = 2, FirmId = 8 }); var metadataSource = new ImportStatisticsMetadataSource(); IMetadataElement importStatisticsMetadata; if (!metadataSource.Metadata.Values.TryGetElementById(new Uri(typeof(FirmStatisticsDto).Name, UriKind.Relative), out importStatisticsMetadata)) { throw new NotSupportedException($"The aggregate of type '{typeof(FirmStatisticsDto).Name}' is not supported."); } var importer = new StatisticsFactImporter <Bit::FirmCategoryStatistics, FirmStatisticsDto>( (ImportStatisticsMetadata <Bit::FirmCategoryStatistics, FirmStatisticsDto>)importStatisticsMetadata, Query, repositoryFactory.Create <Bit::FirmCategoryStatistics>()); // Act var operations = importer.Import(dto).ToArray(); // Assert Assert.That(operations.Count(), Is.EqualTo(1)); repositoryFactory.Verify <Bit::FirmCategoryStatistics>( m => m.Delete(It.Is(Predicate.Match(new Bit::FirmCategoryStatistics { ProjectId = 1, FirmId = 7 }))), Times.AtLeastOnce); repositoryFactory.Verify <Bit::FirmCategoryStatistics>( m => m.Add(It.Is(Predicate.Match(new Bit::FirmCategoryStatistics { ProjectId = 1, FirmId = 2, CategoryId = 3, Hits = 4, Shows = 5 }))), Times.AtLeastOnce); }