Exemple #1
0
        public GroupedDomoData Group(List <Dictionary <string, string> > data, Report report, GenerationSettings settings)
        {
            var groupedData = new Dictionary <string, List <Dictionary <string, string> > >();

            if (!string.IsNullOrEmpty(settings.MasterGroup))
            {
                foreach (var row in data)
                {
                    if (!groupedData.ContainsKey(row[settings.MasterGroup]))
                    {
                        groupedData[row[settings.MasterGroup]] = new List <Dictionary <string, string> >();
                    }

                    groupedData[row[settings.MasterGroup]].Add(row);
                }
            }
            else
            {
                groupedData["default"] = data;
            }

            var contentData = new GroupedDomoData();

            foreach (var group in groupedData)
            {
                var groupedContentData = new ChildGroupedDomoData();

                foreach (var row in group.Value)
                {
                    var hash = string.Join("-",
                                           settings.ChildGroups.Select(childGroup => row[childGroup]))
                               .GetHashCode()
                               .ToString();

                    if (!groupedContentData.ContainsKey(hash))
                    {
                        groupedContentData[hash] = Tuple.Create(report.HeaderColumns.ToDictionary(
                                                                    column => column, column => row[column]),
                                                                new List <Dictionary <string, string> >());
                    }

                    groupedContentData[hash].Item2.Add(report.ContentColumns.ToDictionary(
                                                           column => column, column => row[column]));
                }

                contentData[group.Key] = groupedContentData;
            }

            return(contentData);
        }
Exemple #2
0
        public async Task ReportController_SampleAsync_CallsServicesAsync()
        {
            var reportGenerationService = new Mock <IReportGenerationService>();
            var mongoReportRepository   = new Mock <IMongoReportRepository>();
            var domoService             = new Mock <IDomoService>();

            reportGenerationService.Setup(m => m.ConvertToData(It.IsAny <Dictionary <string,
                                                                                     Tuple <
                                                                                         Dictionary <string, string>,
                                                                                         List <Dictionary <string, string> > > > >()))
            .Returns(new Newtonsoft.Json.Linq.JArray());

            mongoReportRepository.Setup(m => m.GetAsync(It.IsAny <string>()))
            .ReturnsAsync((string slug) => new Report()
            {
                TemplateName = "invoice.docx",
                DataSet      = "invoice_data",
                Slug         = slug
            });

            var data = new GroupedDomoData();

            data.Add("default", new ChildGroupedDomoData());

            domoService.Setup(m => m.GetDataAsync(It.IsAny <Report>(), It.IsAny <GenerationSettings>()))
            .ReturnsAsync(data);

            var controller = new ReportController(mongoReportRepository.Object,
                                                  reportGenerationService.Object,
                                                  domoService.Object);

            var result = await controller.SampleAsync("voya-invoices", new GenerationSettings()
            {
                MasterGroup = "master-group"
            });

            mongoReportRepository.Verify(m => m.GetAsync(It.Is <string>(s => s == "voya-invoices")));
            reportGenerationService.Verify(m => m.ConvertToData(It.IsAny <Dictionary <string,
                                                                                      Tuple <
                                                                                          Dictionary <string, string>,
                                                                                          List <Dictionary <string, string> > > > >()));
            domoService.Verify(m => m.GetDataAsync(It.Is <Report>(r => r.Slug == "voya-invoices"), It.IsAny <GenerationSettings>()));
        }