private HashSet <string> GetAllFilesInAddmlDefinition(AddmlDefinition addmlDefinition) { return(new HashSet <string>( addmlDefinition.AddmlFlatFileDefinitions .Select(d => d.FileName) .AsEnumerable())); }
public void ShouldParseAddmlWithForeignKey() { AddmlDefinition addmlDefinition = _parser.GetAddmlDefinition(); List <AddmlFlatFileDefinition> addmlFlatFileDefinitions = addmlDefinition.AddmlFlatFileDefinitions; addmlFlatFileDefinitions.Count.Should().Be(3); addmlFlatFileDefinitions[0].Name.Should().Be("Saksregister"); AddmlRecordDefinition addmlRecordDefinition = addmlFlatFileDefinitions[0].AddmlRecordDefinitions[0]; addmlRecordDefinition.Name.Should().Be("Saksregisterpost"); addmlRecordDefinition.Processes.Should().BeEmpty(); addmlRecordDefinition.ForeignKeys.Should().NotBeNullOrEmpty(); addmlRecordDefinition.ForeignKeys.Count.Should().Be(1); AddmlForeignKey foreignKey = addmlRecordDefinition.ForeignKeys[0]; foreignKey.Name.Should().Be("FK1sak"); foreignKey.ForeignKeys.Count.Should().Be(1); foreignKey.ForeignKeys[0].Name.Should().Be("Arkiv_2_delfelt"); foreignKey.ForeignKeyReferenceIndexes[0].GetFlatFileDefinitionName().Should().Be("arkivnoekkelregister"); foreignKey.ForeignKeyReferenceIndexes[0].GetRecordDefinitionName().Should().Be("arkivnoekkelregisterpost"); foreignKey.ForeignKeyReferenceIndexes[0].GetFieldDefinitionName().Should().Be("arkivkode"); List <AddmlFieldDefinition> addmlFieldDefinitions = addmlRecordDefinition.AddmlFieldDefinitions; addmlFieldDefinitions.Count.Should().Be(18); addmlFieldDefinitions[5].Name.Should().Be("Arkiv_2_delfelt"); }
public void Init(AddmlDefinition addmlDefinition) { _processManager = new ProcessManager(addmlDefinition); _fileProcessRunner = new FileProcessRunner(_processManager); _recordProcessRunner = new RecordProcessRunner(_processManager); _fieldProcessRunner = new FieldProcessRunner(_processManager); }
public void ShouldParseAddmlWithNumberOfRecordsProperty() { AddmlDefinition addmlDefinition = _parser.GetAddmlDefinition(); List <AddmlFlatFileDefinition> addmlFlatFileDefinitions = addmlDefinition.AddmlFlatFileDefinitions; addmlFlatFileDefinitions[1].Name.Should().Be("Dokumentregister"); addmlFlatFileDefinitions[1].NumberOfRecords.Should().Be(195); }
public void ShouldParseAddmlWithMultipleRecordDefinitions() { AddmlDefinition addmlDefinition = _parser.GetAddmlDefinition(); List <AddmlFlatFileDefinition> addmlFlatFileDefinitions = addmlDefinition.AddmlFlatFileDefinitions; addmlFlatFileDefinitions[1].Name.Should().Be("Dokumentregister"); addmlFlatFileDefinitions[1].AddmlRecordDefinitions.Count.Should().Be(2); addmlFlatFileDefinitions[1].AddmlRecordDefinitions[0].Name.Should().Be("Eksterne_dokumenter"); addmlFlatFileDefinitions[1].AddmlRecordDefinitions[1].Name.Should().Be("Interne_dokumenter"); }
private void TestBooleanDataType(AddmlDefinition addmlDefinition) { AddmlFlatFileDefinition addmlFlatFileDefinition = addmlDefinition.AddmlFlatFileDefinitions[3]; addmlFlatFileDefinition.Name.Should().Be("ffd_6"); addmlFlatFileDefinition.FileName.Should().Be("jegerK.dat"); AddmlFieldDefinition addmlFieldDefinition = addmlFlatFileDefinition.AddmlRecordDefinitions[0].AddmlFieldDefinitions[10]; addmlFieldDefinition.Name.Should().Be("avgift"); addmlFieldDefinition.Type.Should().Be(new BooleanDataType("J/N")); }
public void ShouldAddControlForeignKeyToFlatFileContainingReferencedPrimaryKey() { AddmlFlatFileDefinition personFile = new AddmlFlatFileDefinitionBuilder().WithName("personFile").Build(); AddmlRecordDefinition personFileRecordDef = new AddmlRecordDefinitionBuilder().WithAddmlFlatFileDefinition(personFile).Build(); AddmlFieldDefinition personPrimaryKey = new AddmlFieldDefinitionBuilder().WithRecordDefinition(personFileRecordDef) .WithName("personPrimaryKey") .IsPartOfPrimaryKey(true).Build(); AddmlFlatFileDefinition addressFile = new AddmlFlatFileDefinitionBuilder().WithName("addressFile").Build(); AddmlRecordDefinition addressFileRecordDef = new AddmlRecordDefinitionBuilder().WithAddmlFlatFileDefinition(addressFile).Build(); new AddmlFieldDefinitionBuilder().WithRecordDefinition(addressFileRecordDef).WithName("addressPrimaryKey").IsPartOfPrimaryKey(true).Build(); AddmlFieldDefinition addressForeignKey = new AddmlFieldDefinitionBuilder().WithRecordDefinition(addressFileRecordDef) .WithName("addressForeignKey") .WithForeignKey(personPrimaryKey) .WithProcess(ControlForeignKey.Name) .Build(); AddmlFlatFileDefinition unrelatedFile = new AddmlFlatFileDefinitionBuilder().WithName("unrelatedFile").Build(); AddmlRecordDefinition unrelatedFileRecordDef = new AddmlRecordDefinitionBuilder().WithAddmlFlatFileDefinition(unrelatedFile).Build(); AddmlFieldDefinition unrelatedFilePrimaryKey = new AddmlFieldDefinitionBuilder().WithRecordDefinition(unrelatedFileRecordDef) .WithName("unrelatedFilePrimaryKey") .IsPartOfPrimaryKey(true).Build(); AddmlDefinition addmlDefinition = new AddmlDefinition(new List <AddmlFlatFileDefinition>() { personFile, addressFile, unrelatedFile }); Dictionary <IAddmlIndex, List <string> > fieldProcesses = addmlDefinition.GetFieldProcessesGroupedByField(); _testOutputHelper.WriteLine("field processes:"); foreach (var item in fieldProcesses) { _testOutputHelper.WriteLine(item.Key.ToString()); if (item.Value == null || !item.Value.Any()) { _testOutputHelper.WriteLine("* [empty]"); } else { foreach (var process in item.Value) { _testOutputHelper.WriteLine($"* {process}"); } } } fieldProcesses[personPrimaryKey.GetIndex()].Contains(ControlForeignKey.Name).Should().BeTrue(); fieldProcesses[addressForeignKey.GetIndex()].Contains(ControlForeignKey.Name).Should().BeTrue(); fieldProcesses[unrelatedFilePrimaryKey.GetIndex()].Contains(ControlForeignKey.Name).Should().BeFalse(); }
private void TestDateDataType(AddmlDefinition addmlDefinition) { AddmlFlatFileDefinition addmlFlatFileDefinition = addmlDefinition.AddmlFlatFileDefinitions[2]; addmlFlatFileDefinition.Name.Should().Be("ffd_5"); addmlFlatFileDefinition.FileName.Should().Be("ikkejeg.dat"); AddmlFieldDefinition addmlFieldDefinition = addmlFlatFileDefinition.AddmlRecordDefinitions[0].AddmlFieldDefinitions[35]; addmlFieldDefinition.Name.Should().Be("fradato"); addmlFieldDefinition.Type.Should().Be(new DateDataType("ddmmyyyy")); }
private void TestFloatDataType(AddmlDefinition addmlDefinition) { AddmlFlatFileDefinition addmlFlatFileDefinition = addmlDefinition.AddmlFlatFileDefinitions[5]; addmlFlatFileDefinition.Name.Should().Be("ffd_8"); addmlFlatFileDefinition.FileName.Should().Be("betalt.dat"); AddmlFieldDefinition addmlFieldDefinition = addmlFlatFileDefinition.AddmlRecordDefinitions[0].AddmlFieldDefinitions[8]; addmlFieldDefinition.Name.Should().Be("beløp"); addmlFieldDefinition.Type.Should().Be(new FloatDataType()); }
public void ShouldAddCollectPrimaryKeyToRecordDefinitionsContainingReferencedPrimaryKey() { AddmlFlatFileDefinition personFile = new AddmlFlatFileDefinitionBuilder().WithName("personFile").Build(); AddmlRecordDefinition personFileRecordDef = new AddmlRecordDefinitionBuilder().WithAddmlFlatFileDefinition(personFile).Build(); AddmlFieldDefinition personPrimaryKey = new AddmlFieldDefinitionBuilder().WithRecordDefinition(personFileRecordDef) .WithName("personPrimaryKey") .IsPartOfPrimaryKey(true).Build(); AddmlFlatFileDefinition addressFile = new AddmlFlatFileDefinitionBuilder().WithName("addressFile").Build(); var addmlForeignKey = new AddmlForeignKey("testkey"); AddmlRecordDefinition addressFileRecordDef = new AddmlRecordDefinitionBuilder() .WithAddmlFlatFileDefinition(addressFile) .WithRecordProcess(A_16_ControlForeignKey.Name) .WithForeignKey(addmlForeignKey) .Build(); new AddmlFieldDefinitionBuilder().WithRecordDefinition(addressFileRecordDef).WithName("addressPrimaryKey").IsPartOfPrimaryKey(true).Build(); AddmlFieldDefinition addressForeignKey = new AddmlFieldDefinitionBuilder().WithRecordDefinition(addressFileRecordDef) .WithName("addressForeignKey") // .WithForeignKey(personPrimaryKey) .Build(); addmlForeignKey.ForeignKeys.Add(addressForeignKey); addmlForeignKey.ForeignKeyReferenceIndexes.Add(personPrimaryKey.GetIndex()); addmlForeignKey.ForeignKeyReferenceFields.Add(personPrimaryKey); AddmlFlatFileDefinition unrelatedFile = new AddmlFlatFileDefinitionBuilder().WithName("unrelatedFile").Build(); AddmlRecordDefinition unrelatedFileRecordDef = new AddmlRecordDefinitionBuilder().WithAddmlFlatFileDefinition(unrelatedFile).Build(); AddmlFieldDefinition unrelatedFilePrimaryKey = new AddmlFieldDefinitionBuilder().WithRecordDefinition(unrelatedFileRecordDef) .WithName("unrelatedFilePrimaryKey") .IsPartOfPrimaryKey(true).Build(); AddmlDefinition addmlDefinition = new AddmlDefinition( new List <AddmlFlatFileDefinition>() { personFile, addressFile, unrelatedFile }, new List <AddmlFlatFileDefinition>() { personFile, addressFile }); Dictionary <IAddmlIndex, List <string> > recordProcesses = addmlDefinition.GetRecordProcessesGroupedByRecord(); DebugPrintListOfProcesses(recordProcesses); recordProcesses[personFileRecordDef.GetIndex()].Contains(AI_01_CollectPrimaryKey.Name).Should().BeTrue(); recordProcesses[addressFileRecordDef.GetIndex()].Contains(A_16_ControlForeignKey.Name).Should().BeTrue(); recordProcesses[unrelatedFileRecordDef.GetIndex()].Should().BeEmpty(); }
public void ShouldNotAddCollectPrimaryKeyProcessWhenControlForeignKeyIsNotDefinedInAnyRecordDefinition() { AddmlFlatFileDefinition personFile = new AddmlFlatFileDefinitionBuilder().WithName("personFile").Build(); AddmlRecordDefinition personFileRecordDef = new AddmlRecordDefinitionBuilder().WithAddmlFlatFileDefinition(personFile).Build(); AddmlFieldDefinition personPrimaryKey = new AddmlFieldDefinitionBuilder().WithRecordDefinition(personFileRecordDef) .WithName("personPrimaryKey") .IsPartOfPrimaryKey(true).Build(); AddmlFlatFileDefinition addressFile = new AddmlFlatFileDefinitionBuilder().WithName("addressFile").Build(); var addmlForeignKey = new AddmlForeignKey("testkey"); AddmlRecordDefinition addressFileRecordDef = new AddmlRecordDefinitionBuilder() .WithAddmlFlatFileDefinition(addressFile) .WithForeignKey(addmlForeignKey) .Build(); new AddmlFieldDefinitionBuilder().WithRecordDefinition(addressFileRecordDef).WithName("addressPrimaryKey").IsPartOfPrimaryKey(true).Build(); var addressField = new AddmlFieldDefinitionBuilder().WithRecordDefinition(addressFileRecordDef) .WithName("addressForeignKey") .Build(); addmlForeignKey.ForeignKeys.Add(addressField); addmlForeignKey.ForeignKeyReferenceIndexes.Add(personPrimaryKey.GetIndex()); addmlForeignKey.ForeignKeyReferenceFields.Add(personPrimaryKey); AddmlDefinition addmlDefinition = new AddmlDefinition( new List <AddmlFlatFileDefinition>() { personFile, addressFile }, new List <AddmlFlatFileDefinition>() { personFile, addressFile }); Dictionary <IAddmlIndex, List <string> > recordProcesses = addmlDefinition.GetRecordProcessesGroupedByRecord(); DebugPrintListOfProcesses(recordProcesses); recordProcesses[personFileRecordDef.GetIndex()].Should().BeEmpty(); recordProcesses[addressFileRecordDef.GetIndex()].Should().BeEmpty(); }
public void ShouldParseAddmlWithProcesses() { AddmlDefinition addmlDefinition = _parser.GetAddmlDefinition(); List <AddmlFlatFileDefinition> addmlFlatFileDefinitions = addmlDefinition.AddmlFlatFileDefinitions; addmlFlatFileDefinitions.Count.Should().Be(3); addmlFlatFileDefinitions[0].Name.Should().Be("Saksregister"); addmlFlatFileDefinitions[0].FileName.Should().Be("SAK.DAT"); addmlFlatFileDefinitions[0].Encoding.Should().Be(Encodings.ISO_8859_1); addmlFlatFileDefinitions[0].RecordSeparator.Should().BeNull(); addmlFlatFileDefinitions[0].AddmlRecordDefinitions.Count.Should().Be(1); addmlFlatFileDefinitions[0].Processes.Should().BeEmpty(); AddmlRecordDefinition addmlRecordDefinition = addmlFlatFileDefinitions[0].AddmlRecordDefinitions[0]; addmlRecordDefinition.Name.Should().Be("Saksregisterpost"); addmlRecordDefinition.Processes.Should().BeEmpty(); List <AddmlFieldDefinition> addmlFieldDefinitions = addmlRecordDefinition.AddmlFieldDefinitions; addmlFieldDefinitions.Count.Should().Be(18); addmlFieldDefinitions[0].Name.Should().Be("Posttype"); addmlFieldDefinitions[0].Processes.Should().Equal( "Analyse_FindMinMaxLengths", "Control_BirthNumber", "Control_Codes", "Analyse_FindMinMaxValues", "Analyse_FrequencyList" ); addmlFieldDefinitions[1].Name.Should().Be("Grad"); addmlFieldDefinitions[2].Name.Should().Be("Saksnr"); addmlFieldDefinitions[3].Name.Should().Be("Dato"); addmlRecordDefinition.PrimaryKey.Should().Equal( new List <AddmlFieldDefinition>() { addmlFieldDefinitions[2] } ); }
public void ShouldParseAddmlWithForeignKey() { AddmlDefinition addmlDefinition = _parser.GetAddmlDefinition(); List <AddmlFlatFileDefinition> addmlFlatFileDefinitions = addmlDefinition.AddmlFlatFileDefinitions; addmlFlatFileDefinitions.Count.Should().Be(3); addmlFlatFileDefinitions[0].Name.Should().Be("Saksregister"); AddmlRecordDefinition addmlRecordDefinition = addmlFlatFileDefinitions[0].AddmlRecordDefinitions[0]; addmlRecordDefinition.Name.Should().Be("Saksregisterpost"); addmlRecordDefinition.Processes.Should().BeEmpty(); List <AddmlFieldDefinition> addmlFieldDefinitions = addmlRecordDefinition.AddmlFieldDefinitions; addmlFieldDefinitions.Count.Should().Be(18); addmlFieldDefinitions[5].Name.Should().Be("Arkiv_2_delfelt"); addmlFieldDefinitions[5].ForeignKey.Should().NotBeNull(); addmlFieldDefinitions[5].ForeignKey.Name.Should().Be("Arkivkode"); addmlFieldDefinitions[5].ForeignKey.AddmlRecordDefinition.Name.Should().Be("Arkivnoekkelregisterpost"); addmlFieldDefinitions[5].ForeignKey.AddmlRecordDefinition.AddmlFlatFileDefinition.Name.Should().Be("Arkivnoekkelregister"); }
public void ShouldParseNoark4ConvertedArkivuttrekkXml() { // Code to convert NOARKIH.XML to addml.xml //string noarkihString = TestUtil.ReadFromFileInTestDataDir("noark4\\NOARKIH.XML"); //string addmlString = NoarkihToAddmlTransformer.Transform(noarkihString); // File is converted from NOARKIH.XML format var testDataDirectory = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\TestData\\noark4"); var workingDirectory = new WorkingDirectory(testDataDirectory, testDataDirectory); AddmlInfo addml = AddmlUtil.ReadFromFile(workingDirectory.Content().WithFile("addml.xml").FullName); AddmlDefinitionParser parser = new AddmlDefinitionParser(addml, workingDirectory, new StatusEventHandler()); AddmlDefinition addmlDefinition = parser.GetAddmlDefinition(); List <AddmlFlatFileDefinition> addmlFlatFileDefinitions = addmlDefinition.AddmlFlatFileDefinitions; addmlFlatFileDefinitions.Count.Should().Be(63); addmlFlatFileDefinitions[0].Name.Should().Be("ORDNPRINSTYPE"); addmlFlatFileDefinitions[0].FileName.Should().Be("OPRITYP.XML"); addmlFlatFileDefinitions[0].Encoding.Should().Be(Encodings.ISO_8859_1); addmlFlatFileDefinitions[0].RecordSeparator.Should().BeNull(); addmlFlatFileDefinitions[0].AddmlRecordDefinitions.Count.Should().Be(1); AddmlRecordDefinition addmlRecordDefinition = addmlFlatFileDefinitions[0].AddmlRecordDefinitions[0]; addmlRecordDefinition.Name.Should().Be("ORDNPRINSTYPE"); List <AddmlFieldDefinition> addmlFieldDefinitions = addmlRecordDefinition.AddmlFieldDefinitions; addmlFieldDefinitions.Count.Should().Be(2); addmlFieldDefinitions[0].Name.Should().Be("OT.KODE"); addmlFieldDefinitions[0].Type.Should().Be(StringDataType.Default); addmlFieldDefinitions[1].Name.Should().Be("OT.BETEGN"); addmlFieldDefinitions[1].Type.Should().Be(StringDataType.Default); addmlRecordDefinition.PrimaryKey.Should().BeNull(); }
public AH_02_ControlExtraOrMissingFiles(AddmlDefinition addmlDefinition, Archive archive) { _addmlDefinition = addmlDefinition; _archive = archive; }
public HardcodedProcessRunner(AddmlDefinition addmlDefinition, Archive archive) { _hardcodedProcesses = new List <IAddmlHardcodedProcess> { new ControlExtraOrMissingFiles(addmlDefinition, archive) }; }
public ProcessManager(AddmlDefinition addmlDefinition) { _addmlDefinition = addmlDefinition; _processesByName = InstantiateProcesses(); }
private List <string> GetAllFilesInAddmlDefinition(AddmlDefinition addmlDefinition) { return(addmlDefinition.AddmlFlatFileDefinitions .Select(d => d.FileName) .ToList()); }
public TestSuite RunTestsOnArchive(TestSession testSession) { AddmlDefinition addmlDefinition = testSession.AddmlDefinition; _addmlProcessRunner.Init(addmlDefinition); List <FlatFile> flatFiles = addmlDefinition.GetFlatFiles(); foreach (FlatFile file in flatFiles) { string testName = string.Format(Messages.RunningAddmlProcessesOnFile, file.GetName()); var recordIdx = 1; _statusEventHandler.RaiseEventFileProcessingStarted( new FileProcessingStatusEventArgs(testName, file.GetName()) ); _addmlProcessRunner.RunProcesses(file); IRecordEnumerator recordEnumerator = _flatFileReaderFactory.GetRecordEnumerator(testSession.Archive, file); int numberOfRecordsWithFieldDelimiterError = 0; while (recordEnumerator != null && recordEnumerator.MoveNext()) { try { _statusEventHandler.RaiseEventRecordProcessingStart(); Record record = recordEnumerator.Current; _addmlProcessRunner.RunProcesses(file, record); foreach (Field field in record.Fields) { _addmlProcessRunner.RunProcesses(file, field); } } catch (ArkadeAddmlDelimiterException exception) { numberOfRecordsWithFieldDelimiterError++; if (numberOfRecordsWithFieldDelimiterError <= MaxNumberOfSingleReportedFieldDelimiterErrors) { _testResultsFailedRecordsList.Add(new TestResult(ResultType.Error, new AddmlLocation(file.GetName(), exception.RecordName, ""), exception.Message + " Felttekst: " + exception.RecordData) ); _statusEventHandler.RaiseEventOperationMessage( $"{AddmlMessages.RecordLengthErrorTestName} i fil {file.GetName()}, post nummer {recordIdx}, feil nummer {numberOfRecordsWithFieldDelimiterError}", exception.Message + " Felttekst: " + exception.RecordData, OperationMessageStatus.Error ); } else { _statusEventHandler.RaiseEventOperationMessage( $"ADDML-poster med feil antall felt i filen {file.GetName()}", $"Totalt antall: {numberOfRecordsWithFieldDelimiterError}", OperationMessageStatus.Error ); } } finally { _statusEventHandler.RaiseEventRecordProcessingStopped(); } recordIdx++; } if (numberOfRecordsWithFieldDelimiterError > 0) { _testResultsFailedRecordsList.Add(new TestResult(ResultType.ErrorGroup, new Location(file.GetName()), $"Filens totale antall poster med feil antall felt: {numberOfRecordsWithFieldDelimiterError}", numberOfRecordsWithFieldDelimiterError) ); } _addmlProcessRunner.EndOfFile(file); _statusEventHandler.RaiseEventFileProcessingFinished( new FileProcessingStatusEventArgs(testName, file.GetName(), true) ); } TestSuite testSuite = _addmlProcessRunner.GetTestSuite(); testSuite.AddTestRun(new AH_02_ControlExtraOrMissingFiles(addmlDefinition, testSession.Archive).GetTestRun()); testSuite.AddTestRun(new AH_03_ControlRecordAndFieldDelimiters(_testResultsFailedRecordsList).GetTestRun()); return(testSuite); }