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 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(); }
protected override List <TestResult> GetTestResults() { var results = new List <TestResult>(); foreach (KeyValuePair <string, AddmlForeignKey> item in _foreignKeys) { string index = item.Key; AddmlForeignKey foreignKey = item.Value; if (CollectedPrimaryKeys.ContainsKey(index)) { foreach (string value in foreignKey.Values) { HashSet <string> primaryKeyValues = CollectedPrimaryKeys[index]; if (!primaryKeyValues.Contains(value)) { string errorMessageTemplate = Messages.ControlForeignKeyMessage1; if (foreignKey.IsCombinedForeignKey()) { errorMessageTemplate = Messages.ControlForeignKeyMessage1Combined; } results.Add(new TestResult(ResultType.Error, AddmlLocation.FromFieldIndex(foreignKey.ForeignKeyIndexes), string.Format(errorMessageTemplate, PrettyPrintValue(value), AddmlLocation.FromFieldIndex(foreignKey.ForeignKeyReferenceIndexes)))); } } } else { results.Add(new TestResult(ResultType.Error, AddmlLocation.FromFieldIndex(foreignKey.ForeignKeyIndexes), string.Format(Messages.ControlForeignKeyMessage2, AddmlLocation.FromFieldIndex(foreignKey.ForeignKeyReferenceIndexes)))); } } return(results); }
public ControlForeignKeySingleTest() { AddmlFlatFileDefinition attachmentFileDefinition = new AddmlFlatFileDefinitionBuilder().Build(); _attachmentRecordDef = new AddmlRecordDefinitionBuilder() .WithAddmlFlatFileDefinition(attachmentFileDefinition) .Build(); _messageIdPrimaryKeyFieldDef = new AddmlFieldDefinitionBuilder() .WithRecordDefinition(_attachmentRecordDef) .WithName("MessageId") .IsPartOfPrimaryKey(true) .Build(); AddmlForeignKey foreignKey = new AddmlForeignKey("fk1"); AddmlFlatFileDefinition addmlFlatFileDefinition = new AddmlFlatFileDefinitionBuilder().Build(); _recordDef = new AddmlRecordDefinitionBuilder() .WithAddmlFlatFileDefinition(addmlFlatFileDefinition) .WithRecordProcess(ControlForeignKey.Name) .WithForeignKey(foreignKey) .Build(); _primaryKeyFieldDef = new AddmlFieldDefinitionBuilder() .WithRecordDefinition(_recordDef) .WithName("Id") .IsPartOfPrimaryKey(true) .Build(); _foreignKeyMessageIdFieldDef = new AddmlFieldDefinitionBuilder() .WithRecordDefinition(_recordDef) .WithName("MessageId") .Build(); foreignKey.ForeignKeys.Add(_foreignKeyMessageIdFieldDef); foreignKey.ForeignKeyReferenceIndexes.Add(_messageIdPrimaryKeyFieldDef.GetIndex()); foreignKey.ForeignKeyReferenceFields.Add(_messageIdPrimaryKeyFieldDef); }
public AddmlRecordDefinitionBuilder WithForeignKey(AddmlForeignKey foreignKey) { _foreignKeys.Add(foreignKey); return(this); }
public bool IsPartOfForeignKey(AddmlForeignKey foreignKey) { return(foreignKey.ForeignKeys.Contains(Definition)); }
public A_16_ControlForeignKeyCombinedKeyTest() { _attachmentRecordDef = new AddmlRecordDefinitionBuilder() .WithAddmlFlatFileDefinition(new AddmlFlatFileDefinitionBuilder().Build()) .Build(); _messageIdPrimaryKeyFieldDef = new AddmlFieldDefinitionBuilder() .WithRecordDefinition(_attachmentRecordDef) .WithName("MessageId") .IsPartOfPrimaryKey(true) .Build(); _attachmentNumberPrimaryKeyFieldDef = new AddmlFieldDefinitionBuilder() .WithRecordDefinition(_attachmentRecordDef) .WithName("AttachmentNumber") .IsPartOfPrimaryKey(true) .Build(); _documentRecordDef = new AddmlRecordDefinitionBuilder() .WithAddmlFlatFileDefinition(new AddmlFlatFileDefinitionBuilder().Build()) .Build(); _documentPrimaryKeyFieldDef = new AddmlFieldDefinitionBuilder() .WithRecordDefinition(_documentRecordDef) .WithName("DocumentId") .IsPartOfPrimaryKey(true) .Build(); AddmlForeignKey addmlForeignKeyAttachment = new AddmlForeignKey("fk1-attachment"); AddmlForeignKey addmlForeignKeyDocument = new AddmlForeignKey("fk2-document"); _recordWithBothCombinedAndSingleForeignKeyDef = new AddmlRecordDefinitionBuilder() .WithAddmlFlatFileDefinition(new AddmlFlatFileDefinitionBuilder().Build()) .WithRecordProcess(A_16_ControlForeignKey.Name) .WithForeignKey(addmlForeignKeyAttachment) .WithForeignKey(addmlForeignKeyDocument) .Build(); _primaryKeyFieldDef = new AddmlFieldDefinitionBuilder() .WithRecordDefinition(_recordWithBothCombinedAndSingleForeignKeyDef) .WithName("Id") .IsPartOfPrimaryKey(true) .Build(); _foreignKeyMessageIdFieldDef = new AddmlFieldDefinitionBuilder() .WithRecordDefinition(_recordWithBothCombinedAndSingleForeignKeyDef) .WithName("MessageId") .Build(); _foreignKeyAttachmentNumberFieldDef = new AddmlFieldDefinitionBuilder() .WithRecordDefinition(_recordWithBothCombinedAndSingleForeignKeyDef) .WithName("AttachmentNumber") .Build(); addmlForeignKeyAttachment.ForeignKeys.Add(_foreignKeyMessageIdFieldDef); addmlForeignKeyAttachment.ForeignKeys.Add(_foreignKeyAttachmentNumberFieldDef); addmlForeignKeyAttachment.ForeignKeyReferenceIndexes.Add(_messageIdPrimaryKeyFieldDef.GetIndex()); addmlForeignKeyAttachment.ForeignKeyReferenceIndexes.Add(_attachmentNumberPrimaryKeyFieldDef.GetIndex()); addmlForeignKeyAttachment.ForeignKeyReferenceFields.Add(_messageIdPrimaryKeyFieldDef); addmlForeignKeyAttachment.ForeignKeyReferenceFields.Add(_attachmentNumberPrimaryKeyFieldDef); _foreignKeyDocumentIdFieldDef = new AddmlFieldDefinitionBuilder() .WithRecordDefinition(_recordWithBothCombinedAndSingleForeignKeyDef) .WithName("DocumentId") .Build(); addmlForeignKeyDocument.ForeignKeys.Add(_foreignKeyDocumentIdFieldDef); addmlForeignKeyDocument.ForeignKeyReferenceIndexes.Add(_documentPrimaryKeyFieldDef.GetIndex()); addmlForeignKeyDocument.ForeignKeyReferenceFields.Add(_documentPrimaryKeyFieldDef); }