예제 #1
0
        private Dictionary <string, string> GetEdtFieldValues(StandardMapping mappingUnderTest)
        {
            if (mappingUnderTest.IsEmailField())
            {
                return(GetEmailFieldValues(_idxDocumentIds, mappingUnderTest.EdtName));
            }

            if (mappingUnderTest.EdtType == "MultiValueList")
            {
                var allFieldValues = EdtDocumentRepository.GetMultiValueFieldValues(_idxDocumentIds, _idxToEdtConversionService.MappedEdtDatabaseColumn);

                var combinedValues = allFieldValues.GroupBy(x => x.DocNumber)
                                     .Select(group => new
                {
                    DocNumber = group.Key,
                    Values    = group.Select(x => x.FieldValue).OrderBy(x => x)
                });

                var dictionaryValues = combinedValues.ToDictionary(x => (string)x.DocNumber, x => string.Join(";", x.Values));
                return(dictionaryValues);
            }
            else
            {
                return((_idxToEdtConversionService.MappedEdtDatabaseColumnType == ColumnType.Date) ? EdtDocumentRepository.GetDocumentDateField(_idxDocumentIds, _idxToEdtConversionService.MappedEdtDatabaseColumn)
                                                                    :   EdtDocumentRepository.GetDocumentField(_idxDocumentIds, _idxToEdtConversionService.MappedEdtDatabaseColumn));
            }
        }
예제 #2
0
        public StandardMapping Map(string url)
        {
            var mapping = new StandardMapping(_currentMapping == null ? "" : _currentMapping.BasePath(), _routeHandler).Map(url);

            AddMapping(mapping);

            return(mapping);
        }
        public IdxToEdtConversionService(StandardMapping standardMapping)
        {
            _standardMapping = standardMapping;

            if (!_standardMapping.IsEmailField())
            {
                _edtColumnDetails = GetEdtColumnDetailsFromDisplayName(standardMapping.EdtName);
            }
        }
        public IEnumerable <StandardMapping> GetStandardMappings()
        {
            var fieldsToIgnore = Settings.IgnoredIdxFieldsFromComparison.ToList();

            using (var sr = new StreamReader(Settings.StandardMapPath))
            {
                using (var swIgnored = new StreamWriter(Path.Combine(Settings.LogDirectory, "standard_mappings_ignored.csv")))
                {
                    var headers = sr.ReadLine();
                    ValidateHeadersAreInExpectedPositions(headers);

                    var mappings = new List <StandardMapping>();

                    while (!sr.EndOfStream)
                    {
                        var newMappingTokens = sr.ReadLine()?.Split(_delimiter, StringSplitOptions.None);

                        if (newMappingTokens == null)
                        {
                            continue;
                        }

                        var mapping = new StandardMapping()
                        {
                            EdtName     = newMappingTokens[EdtFieldNameColumn],
                            IdxName     = newMappingTokens[IdxNameColumn],
                            EdtType     = newMappingTokens[StoredEdtTypeColumn],
                            ImportGroup = newMappingTokens[ImporterGroupColumn]
                        };

                        if (mapping.EdtName.Equals(mapping.IdxName) || fieldsToIgnore.Contains(mapping.IdxName) || mapping.EdtName.EndsWith("_unmapped"))
                        {
                            swIgnored.WriteLine($"{mapping.EdtName},{mapping.IdxName}");
                        }
                        else
                        {
                            if (string.IsNullOrEmpty(mapping.EdtType))
                            {
                                TestContext.Out.WriteLine(
                                    $"Warning: EDT Field {mapping.EdtName} has no type, thus will NOT be converted in processing.");
                            }

                            mappings.Add(mapping);
                        }
                    }

                    if (mappings.Count <= 0)
                    {
                        throw new Exception("Failed to read mappings from standard mapping doc, count is 0");
                    }

                    return(mappings);
                }
            }
        }
예제 #5
0
        public void ValidateFieldPopulation(StandardMapping mappingUnderTest)
        {
            long populated = 0;
            long different = 0;
            long documentsInIdxButNotInEdt = 0;
            long documentsInEdtButNotInIdx = 0;
            long idxUnfound       = 0;
            long unexpectedErrors = 0;
            long matched          = 0;
            long totalsampled     = 0;

            //initiliase conversion service for field under test
            _idxToEdtConversionService = new IdxToEdtConversionService(mappingUnderTest);

            TestLogger.Debug($"Using EDT database column for comparison: {_idxToEdtConversionService.MappedEdtDatabaseColumn}");

            //Get
            var edtValues = GetEdtFieldValues(mappingUnderTest);

            //loop thru each sample document
            foreach (var idxDocument in _idxSample)
            {
                totalsampled++;

                var idxField = GetIdxFieldValue(idxDocument, mappingUnderTest);

                if (!edtValues.TryGetValue(idxDocument.DocumentId, out var edtValueForIdxRecord) && !string.IsNullOrEmpty(idxField))
                {
                    documentsInIdxButNotInEdt++;
                    ComparisonErrors.Add(new Framework.Models.Reporting.ComparisonError(idxDocument.DocumentId, "Document not found in Edt's document table"));
                }
                else
                {
                    if (string.IsNullOrEmpty(idxField))
                    {
                        if (!string.IsNullOrEmpty(edtValueForIdxRecord))
                        {
                            documentsInEdtButNotInIdx++;
                            ComparisonErrors.Add(new Framework.Models.Reporting.ComparisonError(idxDocument.DocumentId, $"Edt had value {edtValueForIdxRecord} for field {mappingUnderTest.EdtName} when Idx had no value."));
                        }
                        else
                        {
                            idxUnfound++;
                            ComparisonErrors.Add(new Framework.Models.Reporting.ComparisonError(idxDocument.DocumentId, $"Field { mappingUnderTest.IdxName } not found in Idx for document"));
                        }
                    }
                    else
                    {
                        try
                        {
                            if (!string.IsNullOrEmpty(edtValueForIdxRecord))
                            {
                                populated++;
                            }

                            var expectedEdtValue = _idxToEdtConversionService.ConvertValueToEdtForm(idxField);

                            if (!edtValueForIdxRecord.Equals(expectedEdtValue, StringComparison.InvariantCultureIgnoreCase))
                            {
                                different++;
                                ComparisonResults.Add(new Framework.Models.Reporting.ComparisonResult(idxDocument.DocumentId, edtValueForIdxRecord, expectedEdtValue, idxField));
                            }
                            else
                            {
                                matched++;
                            }
                        }
                        catch (Exception ex)
                        {
                            unexpectedErrors++;
                            var error = $"{ex.Message}<br></br>{ex.StackTrace}";
                            ComparisonErrors.Add(new Framework.Models.Reporting.ComparisonError(idxDocument.DocumentId, error));
                        }
                    }
                }
            }

            PrintStats(different, matched, documentsInIdxButNotInEdt, documentsInEdtButNotInIdx, idxUnfound, unexpectedErrors, populated, totalsampled);

            if (ComparisonErrors.Count() > 0 || ComparisonResults.Count() > 0)
            {
                var diffFile = PrintComparisonTables(mappingUnderTest.EdtName);
                TestLogger.Info($"Difference and error details written to: <a href=\"{diffFile}\">{diffFile}</a>");
            }

            Assert.Zero(different, $"Differences were seen between expected value and actual value for this Edt field {mappingUnderTest.EdtName}");
            Assert.Zero(unexpectedErrors, $"Unexpected errors experienced during processing {mappingUnderTest.EdtName}");
            Assert.Zero(documentsInIdxButNotInEdt, $"Idx documents were not found in EDT.");
            Assert.Zero(documentsInEdtButNotInIdx, "Edt was found to have field populated for instances where Idx was null");

            if (idxUnfound > 0)
            {
                TestLogger.Info($"The Idx was found to not have a value for field {mappingUnderTest.IdxName} in {idxUnfound} documents/instances.");
            }

            if (populated == 0)
            {
                TestLogger.Info($"No sampled documents had the Edt field {mappingUnderTest.EdtName} populated.");
            }
        }
예제 #6
0
        private string GetIdxFieldValue(Framework.Models.IdxLoadFile.Document idxDocument, StandardMapping mappingUnderTest)
        {
            if (mappingUnderTest.EdtType != "MultiValueList" && !mappingUnderTest.IsEmailField())
            {
                return(idxDocument.AllFields.FirstOrDefault(x => x.Key.Equals(mappingUnderTest.IdxName))?.Value);
            }

            var allFieldValues = idxDocument.AllFields.Where(x => x.Key.Equals(mappingUnderTest.IdxName))
                                 .Select(x => x.Value)
                                 .OrderBy(x => x);

            return(string.Join(";", allFieldValues));
        }