Esempio n. 1
0
        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");
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
 public AddmlRecordDefinitionBuilder WithForeignKey(AddmlForeignKey foreignKey)
 {
     _foreignKeys.Add(foreignKey);
     return(this);
 }
Esempio n. 7
0
 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);
        }