Пример #1
0
        public void ChangeExposingSystem_Returns_Ok_When_Existing_And_New_Are_Equal()
        {
            //Arrange
            var interfaceId    = A <int>();
            var existingSystem = new ItSystem()
            {
                Id = A <int>()
            };
            var itInterface = new ItInterface()
            {
                ExhibitedBy = new ItInterfaceExhibit()
                {
                    ItSystem = existingSystem
                }
            };

            ExpectGetInterfaceReturns(interfaceId, itInterface);
            ExpectAllowModifyReturns(itInterface, true);
            ExpectGetSystemReturns(existingSystem.Id, existingSystem);
            ExpectAllowReadReturns(existingSystem, true);
            var transaction = new Mock <IDatabaseTransaction>();

            _transactionManager.Setup(x => x.Begin(It.IsAny <IsolationLevel>())).Returns(transaction.Object);

            //Act
            var result = _sut.ChangeExposingSystem(interfaceId, existingSystem.Id);

            //Assert that no changes were saved
            Assert.True(result.Ok);
            transaction.Verify(x => x.Commit(), Times.Never);
            _interfaceRepository.Verify(x => x.Save(), Times.Never);
        }
        public void Apply_Generates_HostedAt_As_UNDECIDED_If_HostedAt_Is_Null()
        {
            //Arrange
            var system = new ItSystem
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var systemUsage = new ItSystemUsage
            {
                Id = A<int>(),
                OrganizationId = A<int>(),
                ItSystem = system,
                ObjectOwner = defaultTestUser,
                LastChangedByUser = defaultTestUser,
                LastChanged = A<DateTime>(),
                AssociatedDataProcessingRegistrations = new List<DataProcessingRegistration>(),
                HostedAt = null
            };

            var readModel = new ItSystemUsageOverviewReadModel();

            //Act
            _sut.Apply(systemUsage, readModel);

            //Assert
            Assert.Equal(HostedAt.UNDECIDED, readModel.HostedAt);
        }
        private ItSystemUsageOverviewReadModel Test_IsActive_Based_On_ExpirationDate(DateTime expirationDate)
        {
            var system = new ItSystem
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var systemUsage = new ItSystemUsage
            {
                Id = A<int>(),
                OrganizationId = A<int>(),
                ItSystem = system,
                Active = false,
                ExpirationDate = DateTime.Now.AddDays(-1),
                ObjectOwner = defaultTestUser,
                LastChangedByUser = defaultTestUser,
                LastChanged = A<DateTime>(),
                AssociatedDataProcessingRegistrations = new List<DataProcessingRegistration>()
            };

            var readModel = new ItSystemUsageOverviewReadModel();

            _sut.Apply(systemUsage, readModel);

            return readModel;
        }
Пример #4
0
        public void Apply_Returns_Items_With_Uuid_Match()
        {
            //Arrange
            var correctId   = A <Guid>();
            var incorrectId = A <Guid>();
            var matched     = new ItSystem {
                BelongsTo = new Organization()
                {
                    Uuid = correctId
                }
            };
            var excludedNoRightsHolder = new ItSystem {
                BelongsTo = null
            };
            var excludedWrongUuid = new ItSystem {
                BelongsTo = new Organization {
                    Uuid = incorrectId
                }
            };

            var input = new[] { excludedWrongUuid, matched, excludedNoRightsHolder }.AsQueryable();
            var sut = new QueryByRightsHolder(correctId);

            //Act
            var result = sut.Apply(input);

            //Assert
            var itSystem = Assert.Single(result);

            Assert.Same(matched, itSystem);
        }
Пример #5
0
        public void Apply_Returns_Items_With_Key_Match()
        {
            //Arrange
            var correctId   = A <string>();
            var incorrectId = A <string>();
            var matched     = new ItSystem {
                TaskRefs = new List <TaskRef>()
                {
                    new() { TaskKey = correctId }
                }
            };
            var excludedNoTaskRefs = new ItSystem {
                TaskRefs = new List <TaskRef>()
            };
            var excludedWrongUuid = new ItSystem {
                TaskRefs = new List <TaskRef>()
                {
                    new() { TaskKey = incorrectId }
                }
            };

            var input = new[] { excludedWrongUuid, matched, excludedNoTaskRefs }.AsQueryable();
            var sut = new QueryByTaskRef(key: correctId);

            //Act
            var result = sut.Apply(input);

            //Assert
            var itSystem = Assert.Single(result);

            Assert.Same(matched, itSystem);
        }
Пример #6
0
 private static ItSystemResponseDTO ToDTO(ItSystem arg)
 {
     return(new()
     {
         Uuid = arg.Uuid,
         Name = arg.Name,
         RightsHolder = arg.BelongsTo?.Transform(organization => organization.MapOrganizationResponseDTO()),
         BusinessType = arg.BusinessType?.Transform(businessType => businessType.MapIdentityNamePairDTO()),
         Description = arg.Description,
         CreatedBy = arg.ObjectOwner.MapIdentityNamePairDTO(),
         Created = arg.Created,
         Deactivated = arg.Disabled,
         FormerName = arg.PreviousName,
         LastModified = arg.LastChanged,
         LastModifiedBy = arg.LastChangedByUser.Transform(user => user.MapIdentityNamePairDTO()),
         ParentSystem = arg.Parent?.Transform(parent => parent.MapIdentityNamePairDTO()),
         UrlReference = arg.Reference?.URL,
         ExposedInterfaces = arg
                             .ItInterfaceExhibits
                             .Select(exhibit => exhibit.ItInterface)
                             .ToList()
                             .Select(x => x.MapIdentityNamePairDTO())
                             .ToList(),
         RecommendedArchiveDutyResponse = new RecommendedArchiveDutyResponseDTO(arg.ArchiveDutyComment, arg.ArchiveDuty.ToDTOType()),
         UsingOrganizations = arg
                              .Usages
                              .Select(systemUsage => systemUsage.Organization)
                              .Select(organization => organization.MapOrganizationResponseDTO())
                              .ToList(),
         KLE = arg
               .TaskRefs
               .Select(taskRef => new IdentityNamePairResponseDTO(taskRef.Uuid, taskRef.TaskKey))
               .ToList()
     });
 }
        public void Apply_Returns_Items_With_MoreThanOrEqualToUsages()
        {
            //Arrange
            var       correctId   = A <Guid>();
            var       incorrectId = A <Guid>();
            const int gtEq        = 2;
            var       matchedOnEq = new ItSystem {
                Usages = { new ItSystemUsage(), new ItSystemUsage() }
            };
            var matchedOnGte = new ItSystem {
                Usages = { new ItSystemUsage(), new ItSystemUsage(), new ItSystemUsage() }
            };
            var lessThanLowerBound = new ItSystem {
                Usages = new List <ItSystemUsage> {
                    new()
                }
            };

            var input = new[] { matchedOnEq, lessThanLowerBound, matchedOnGte }.AsQueryable();
            var sut = new QueryByNumberOfUsages(gtEq);

            //Act
            var result = sut.Apply(input).ToList();

            //Assert
            Assert.Equal(2, result.Count);
            Assert.Equal(new [] { matchedOnEq, matchedOnGte }, result.ToArray());
        }
 private ItSystemUsage CreateSystemUsage(ItSystem system, ItContract contract, int orgId)
 {
     return(new ItSystemUsage()
     {
         Id = Math.Abs(A <int>()),
         ItSystem = system,
         Contracts = contract != null ? new List <ItContractItSystemUsage>()
         {
             new ItContractItSystemUsage()
             {
                 ItContract = contract
             },
         } : new List <ItContractItSystemUsage>(),
         OrganizationId = orgId,
         isBusinessCritical = A <DataOptions>(),
         DPIA = A <DataOptions>(),
         riskAssessment = A <DataOptions>(),
         LinkToDirectoryUrl = A <string>(),
         HostedAt = A <HostedAt>(),
         preriskAssessment = A <RiskLevel>(),
         SensitiveDataLevels = new List <ItSystemUsageSensitiveDataLevel>()
         {
             new ItSystemUsageSensitiveDataLevel()
             {
                 SensitivityDataLevel = A <SensitiveDataLevel>()
             }
         }
     });
 }
Пример #9
0
        public void Apply_Returns_Items_With_Uuid_Match()
        {
            //Arrange
            var correctId   = A <Guid>();
            var incorrectId = A <Guid>();
            var matched     = new ItSystem {
                BusinessType = new BusinessType {
                    Uuid = correctId
                }
            };
            var excludedNoBusinessType = new ItSystem {
                BusinessType = null
            };
            var excludedWrongUuid = new ItSystem {
                BusinessType = new BusinessType {
                    Uuid = incorrectId
                }
            };

            var input = new[] { excludedWrongUuid, matched, excludedNoBusinessType }.AsQueryable();
            var sut = new QueryByBusinessType(correctId);

            //Act
            var result = sut.Apply(input);

            //Assert
            var itSystem = Assert.Single(result);

            Assert.Same(matched, itSystem);
        }
Пример #10
0
        public void Add_Returns_Ok(bool sameOrg)
        {
            //Arrange
            var input = new ItSystemUsage
            {
                ItSystemId     = A <int>(),
                OrganizationId = A <int>()
            };
            var associatedItSystem = new ItSystem
            {
                OrganizationId = sameOrg ? input.OrganizationId : input.OrganizationId + 1,
                AccessModifier = AccessModifier.Public
            };
            var usageCreatedByRepo = new ItSystemUsage();

            SetupRepositoryQueryWith(Enumerable.Empty <ItSystemUsage>());
            _authorizationContext.Setup(x => x.AllowCreate <ItSystemUsage>(input.OrganizationId, input)).Returns(true);
            _systemRepository.Setup(x => x.GetSystem(input.ItSystemId)).Returns(associatedItSystem);
            _authorizationContext.Setup(x => x.AllowReads(associatedItSystem)).Returns(true);
            _usageRepository.Setup(x => x.Create()).Returns(usageCreatedByRepo);

            //Act
            var result = _sut.Add(input);

            //Assert
            Assert.True(result.Ok);
            var createdUsage = result.Value;

            Assert.NotSame(input, createdUsage);
            Assert.Same(usageCreatedByRepo, createdUsage);
            Assert.Equal(input.OrganizationId, createdUsage.OrganizationId);
            Assert.Equal(input.ItSystemId, createdUsage.ItSystemId);
            _usageRepository.Verify(x => x.Insert(usageCreatedByRepo), Times.Once);
            _usageRepository.Verify(x => x.Save(), Times.Once);
        }
        public void Apply_Generates_Read_Model_When_No_Parent_System()
        {
            //Arrange
            var system = new ItSystem
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var systemUsage = new ItSystemUsage
            {
                Id = A<int>(),
                OrganizationId = A<int>(),
                ItSystem = system,
                ObjectOwner = defaultTestUser,
                LastChangedByUser = defaultTestUser,
                LastChanged = A<DateTime>(),
                AssociatedDataProcessingRegistrations = new List<DataProcessingRegistration>()
            };

            var readModel = new ItSystemUsageOverviewReadModel();

            //Act
            _sut.Apply(systemUsage, readModel);

            //Assert
            Assert.Null(readModel.ParentItSystemName);
            Assert.Null(readModel.ParentItSystemId);
        }
        public void Apply_Generates_RiskSupervisionDocumentation_As_Null_If_RiskAssessment_Is_Not_Yes()
        {
            //Arrange
            var system = new ItSystem
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var systemUsage = new ItSystemUsage
            {
                Id = A<int>(),
                OrganizationId = A<int>(),
                ItSystem = system,
                ObjectOwner = defaultTestUser,
                LastChangedByUser = defaultTestUser,
                LastChanged = A<DateTime>(),
                riskAssessment = DataOptions.DONTKNOW,
                RiskSupervisionDocumentationUrlName = A<string>(),
                RiskSupervisionDocumentationUrl = A<string>(),
                AssociatedDataProcessingRegistrations = new List<DataProcessingRegistration>()
            };

            var readModel = new ItSystemUsageOverviewReadModel();

            //Act
            _sut.Apply(systemUsage, readModel);

            //Assert
            Assert.Null(readModel.RiskSupervisionDocumentationName);
            Assert.Null(readModel.RiskSupervisionDocumentationUrl);
        }
Пример #13
0
 public IEnumerable <ItInterface> GetExposedInterfaces()
 {
     return(ItSystem
            .FromNullable()
            .Select(system => system.ItInterfaceExhibits)
            .Select(interfaceExhibits => interfaceExhibits.Select(interfaceExhibit => interfaceExhibit.ItInterface))
            .Select(interfaces => interfaces.ToList())
            .GetValueOrFallback(new List <ItInterface>()));
 }
Пример #14
0
        /// <summary>
        /// Determines whether a user has write access to this instance.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <returns>
        ///   <c>true</c> if user has write access, otherwise <c>false</c>.
        /// </returns>
        public override bool HasUserWriteAccess(User user)
        {
            if (ItSystem != null && ItSystem.HasUserWriteAccess(user))
            {
                return(true);
            }

            return(base.HasUserWriteAccess(user));
        }
Пример #15
0
 private ItSystemUsage CreateSystemUsage(int organizationId, ItSystem itSystem)
 {
     return(new ItSystemUsage
     {
         OrganizationId = organizationId,
         Id = A <int>(),
         ItSystemId = itSystem.Id,
         ItSystem = itSystem
     });
 }
Пример #16
0
        public override bool Execute(KitosContext context)
        {
            var organization = context.GetOrganization(_organizationName);
            var globalAdmin  = context.GetGlobalAdmin();

            //Create the new it system
            var systemWithSameName = GetItSystemnByName(context);

            if (systemWithSameName != null)
            {
                Console.Out.WriteLine($"Existing ITSystem with name {_name} already exists in the database.");
                return(false);
            }

            var itSystem = new ItSystem
            {
                Name                = _name,
                ObjectOwnerId       = globalAdmin.Id,
                OrganizationId      = organization.Id,
                LastChangedByUserId = globalAdmin.Id,
                Uuid                = Guid.NewGuid(),
                ParentId            = _parentId
            };

            context.ItSystems.Add(itSystem);
            context.SaveChanges();

            //Enable usage of the system
            var itSystemUsage = new ItSystemUsage
            {
                ItSystemId          = itSystem.Id,
                OrganizationId      = organization.Id,
                ObjectOwnerId       = globalAdmin.Id,
                LastChangedByUserId = globalAdmin.Id
            };

            itSystemUsage.ResponsibleUsage = new ItSystemUsageOrgUnitUsage
            {
                ItSystemUsage      = itSystemUsage,
                ItSystemUsageId    = itSystemUsage.Id,
                OrganizationUnit   = organization.OrgUnits.First(),
                OrganizationUnitId = organization.Id
            };

            context.ItSystemUsages.Add(itSystemUsage);
            context.SaveChanges();

            var pendingReadModelUpdate = PendingReadModelUpdate.Create(itSystemUsage, PendingReadModelUpdateSourceCategory.ItSystemUsage);

            context.PendingReadModelUpdates.Add(pendingReadModelUpdate);
            context.SaveChanges();

            return(true);
        }
Пример #17
0
        private static IEnumerable <ItSystem> GetHierarchyParents(ItSystem itSystem)
        {
            var parents = new List <ItSystem>();

            if (itSystem.Parent != null)
            {
                parents.Add(itSystem.Parent);
                parents.AddRange(GetHierarchyParents(itSystem.Parent));
            }
            return(parents);
        }
Пример #18
0
        private ItSystem CreateTestItSystem(AccessModifier accessModifier, bool hasAssignedWriteAccess = false)
        {
            var testItSystem = new ItSystem {
                AccessModifier = accessModifier
            };

            if (hasAssignedWriteAccess)
            {
                testItSystem.ObjectOwnerId = _userId;
            }
            return(testItSystem);
        }
Пример #19
0
        private static IEnumerable <ItSystem> GetHierarchyChildren(ItSystem itSystem)
        {
            var systems = new List <ItSystem>();

            systems.AddRange(itSystem.Children);
            foreach (var child in itSystem.Children)
            {
                var children = GetHierarchyChildren(child);
                systems.AddRange(children);
            }
            return(systems);
        }
        public void Apply_Generates_ArchivePeriodEndDate_By_Earliest_StartDate_Of_Still_Valid_ArchivePeriod()
        {
            //Arrange
            var system = new ItSystem
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var systemUsage = new ItSystemUsage
            {
                Id = A<int>(),
                ItSystem = system,
                ObjectOwner = defaultTestUser,
                LastChangedByUser = defaultTestUser,
                LastChanged = A<DateTime>(),
                AssociatedDataProcessingRegistrations = new List<DataProcessingRegistration>()
            };
            var earliestStartDate = DateTime.Now.AddYears(-1);
            var endDateOfEarlistStartDate = DateTime.Now.AddDays(A<int>());
            var archivePeriods = new List<ArchivePeriod>
            {
                new ArchivePeriod
                {
                    Id = A<int>(),
                    ItSystemUsage = systemUsage,
                    StartDate = DateTime.Now.AddDays(-1),
                    EndDate = DateTime.Now.AddDays(1)
                },
                new ArchivePeriod
                {
                    Id = A<int>(),
                    ItSystemUsage = systemUsage,
                    StartDate = earliestStartDate,
                    EndDate = endDateOfEarlistStartDate
                },
                new ArchivePeriod
                {
                    Id = A<int>(),
                    ItSystemUsage = systemUsage,
                    StartDate = DateTime.Now.AddDays(-30),
                    EndDate = endDateOfEarlistStartDate.AddDays(A<int>())
                },
            };
            systemUsage.ArchivePeriods = archivePeriods;

            var readModel = new ItSystemUsageOverviewReadModel();

            //Act
            _sut.Apply(systemUsage, readModel);

            //Assert
            Assert.Equal(endDateOfEarlistStartDate, readModel.ActiveArchivePeriodEndDate);
        }
        private void VerifySystemMigrationCommitted(ItSystemUsage systemUsage, ItSystem newSystem, Mock <IDatabaseTransaction> transaction)
        {
            //Verify update call to system usage with changed system id that points to the new system
            _systemUsageRepository
            .Verify(x => x.Update(It.Is <ItSystemUsage>(usage => usage == systemUsage && systemUsage.ItSystemId == newSystem.Id)),
                    Times.Once);

            //Verify that transaction is committed
            transaction.Verify(x => x.Commit(), Times.Once);

            //Verify that updated domain event was indeed fired
            _domainEventsMock.Verify(x => x.Raise(It.Is <EntityUpdatedEvent <ItSystemUsage> >(x => x.Entity == systemUsage)));
        }
Пример #22
0
 public ItSystemUsageMigration(
     ItSystemUsage systemUsage,
     ItSystem fromItSystem,
     ItSystem toItSystem,
     IEnumerable <ItProject> affectedProjects,
     IEnumerable <ItContract> affectedContracts,
     IEnumerable <SystemRelation> affectedRelations)
 {
     SystemUsage             = systemUsage;
     FromItSystem            = fromItSystem;
     ToItSystem              = toItSystem;
     AffectedProjects        = affectedProjects.ToList().AsReadOnly();
     AffectedContracts       = affectedContracts.ToList().AsReadOnly();
     AffectedSystemRelations = affectedRelations.ToList().AsReadOnly();
 }
Пример #23
0
        public void ChangeExposingSystem_Returns_Forbidden_If_Read_Access_To_System_Is_Denied()
        {
            //Arrange
            var interfaceId = A <int>();
            var itInterface = new ItInterface();
            var newSystemId = A <int>();
            var itSystem    = new ItSystem();

            ExpectGetInterfaceReturns(interfaceId, itInterface);
            ExpectAllowModifyReturns(itInterface, true);
            ExpectGetSystemReturns(newSystemId, itSystem);
            ExpectAllowReadReturns(itSystem, false);

            //Act
            var result = _sut.ChangeExposingSystem(interfaceId, newSystemId);

            //Assert
            Assert.Equal(OperationFailure.Forbidden, result.Error);
        }
Пример #24
0
        public void Add_Returns_Forbidden_If_ReadAccess_To_ItSystem_Is_Declined()
        {
            //Arrange
            var itSystemUsage = new ItSystemUsage {
                ItSystemId = A <int>(), OrganizationId = A <int>()
            };
            var itSystem = new ItSystem();

            SetupRepositoryQueryWith(Enumerable.Empty <ItSystemUsage>());
            _authorizationContext.Setup(x => x.AllowCreate <ItSystemUsage>(itSystemUsage.OrganizationId, itSystemUsage)).Returns(true);
            _systemRepository.Setup(x => x.GetSystem(itSystemUsage.ItSystemId)).Returns(itSystem);
            _authorizationContext.Setup(x => x.AllowReads(itSystem)).Returns(false);

            //Act
            var result = _sut.Add(itSystemUsage);

            //Assert
            Assert.False(result.Ok);
            Assert.Equal(OperationFailure.Forbidden, result.Error);
        }
Пример #25
0
        public void GetAccessRightsForEntity_Returns_Based_On_AccessRights(bool allowRead, bool allowModify, bool allowDelete)
        {
            //Arrange
            var id       = A <int>();
            var itSystem = new ItSystem();

            _systemRepository.Setup(x => x.GetByKey(id)).Returns(itSystem);
            ExpectAllowReadReturns(allowRead, itSystem);
            ExpectAllowModifyReturns(allowModify, itSystem);
            ExpectAllowDeleteReturns(allowDelete, itSystem);

            //Act
            var responseMessage = _sut.GetAccessRightsForEntity(id, true);

            //Assert
            var dto = ExpectResponseOf <EntityAccessRightsDTO>(responseMessage);

            Assert.Equal(allowRead, dto.CanView);
            Assert.Equal(allowModify, dto.CanEdit);
            Assert.Equal(allowDelete, dto.CanDelete);
        }
Пример #26
0
        public void Add_Returns_Forbidden_If_Usage_Of_Local_System_In_Other_Org_Is_Attempted()
        {
            //Arrange
            var itSystemUsage = new ItSystemUsage {
                ItSystemId = A <int>(), OrganizationId = A <int>()
            };
            var itSystem = new ItSystem()
            {
                OrganizationId = itSystemUsage.OrganizationId + 1, AccessModifier = AccessModifier.Local
            };

            SetupRepositoryQueryWith(Enumerable.Empty <ItSystemUsage>());
            _authorizationContext.Setup(x => x.AllowCreate <ItSystemUsage>(itSystemUsage.OrganizationId, itSystemUsage)).Returns(true);
            _systemRepository.Setup(x => x.GetSystem(itSystemUsage.ItSystemId)).Returns(itSystem);
            _authorizationContext.Setup(x => x.AllowReads(itSystem)).Returns(true);

            //Act
            var result = _sut.Add(itSystemUsage);

            //Assert
            Assert.False(result.Ok);
            Assert.Equal(OperationFailure.Forbidden, result.Error);
        }
Пример #27
0
        public void UpdateKLE_Given_Summary_Updates_ItSystem()
        {
            //Arrange
            var       updateObjects = SetupUpdateObjects();
            const int itSystemKey   = 1;
            var       itSystem      = new ItSystem
            {
                Id       = itSystemKey,
                TaskRefs = new List <TaskRef> {
                    updateObjects.removedTaskRef
                }
            };

            updateObjects.removedTaskRef.ItSystems = new List <ItSystem> {
                itSystem
            };

            //Act
            _sut.UpdateKLE(0);

            //Assert
            Assert.False(itSystem.TaskRefs.Contains(updateObjects.removedTaskRef));
        }
Пример #28
0
 public static NamedEntityWithEnabledStatusDTO MapToNamedEntityWithEnabledStatusDTO(this ItSystem source)
 {
     return(new NamedEntityWithEnabledStatusDTO(source.Id, source.Name, source.Disabled));
 }
        public void Apply_Generates_Correct_Read_Model()
        {
            //Arrange
            var outgoingRelationItSystem = new ItSystem
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var outgoingRelationInterface = new ItInterface
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var outgoingRelationItSystemUsage = new ItSystemUsage
            {
                Id = A<int>(),
                OrganizationId = A<int>(),
                ItSystem = outgoingRelationItSystem
            };
            var outgoingRelation = new SystemRelation(outgoingRelationItSystemUsage)
            {
                Id = A<int>(),
                RelationInterface = outgoingRelationInterface,
                ToSystemUsage = outgoingRelationItSystemUsage
            };

            var incomingRelationItSystem = new ItSystem
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var incomingRelationItSystemUsage = new ItSystemUsage
            {
                Id = A<int>(),
                OrganizationId = A<int>(),
                ItSystem = incomingRelationItSystem
            };
            var incomingRelation = new SystemRelation(incomingRelationItSystemUsage)
            {
                Id = A<int>()
            };

            var supplier = new Organization
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var user = new User
            {
                Id = A<int>(),
                Name = A<string>(),
                LastName = A<string>(),
                Email = $"{A<string>()}@{A<string>()}.dk"
            };
            var right = new ItSystemRight
            {
                Id = A<int>(),
                User = user,
                UserId = user.Id,
                RoleId = A<int>()
            };
            var contract = new ItContract
            {
                Id = A<int>(),
                Name = A<string>(),
                Supplier = supplier
            };
            var project = new ItProject
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var dataProcessingRegistration = new DataProcessingRegistration()
            {
                Id = A<int>(),
                Name = A<string>(),
                IsAgreementConcluded = A<YesNoIrrelevantOption>()
            };
            var parentSystem = new ItSystem
            {
                Id = A<int>(),
                Name = A<string>(),
                Disabled = A<bool>()
            };
            var system = new ItSystem
            {
                Id = A<int>(),
                OrganizationId = A<int>(),
                Name = A<string>(),
                Disabled = A<bool>(),
                Parent = parentSystem,
                Uuid = A<Guid>(),
                BelongsTo = new Organization
                {
                    Id = A<int>(),
                    Name = A<string>()
                },
                BusinessType = new BusinessType
                {
                    Id = A<int>(),
                    Name = A<string>()
                },
                TaskRefs = new List<TaskRef>
                {
                    new TaskRef
                    {
                        Id = A<int>(),
                        TaskKey = A<string>(),
                        Description = A<string>()
                    }
                }
            };
            var systemUsage = new ItSystemUsage
            {
                Id = A<int>(),
                OrganizationId = A<int>(),
                ItSystem = system,
                Active = A<bool>(),
                ExpirationDate = DateTime.Now.AddDays(-1),
                Version = A<string>(),
                LocalCallName = A<string>(),
                LocalSystemId = A<string>(),
                Rights = new List<ItSystemRight>
                {
                    right
                },
                Reference = new ExternalReference
                {
                    Id = A<int>(),
                    Title = A<string>(),
                    ExternalReferenceId = A<string>(),
                    URL = A<string>()
                },
                ObjectOwnerId = user.Id,
                ObjectOwner = user,
                LastChangedByUserId = user.Id,
                LastChangedByUser = user,
                LastChanged = A<DateTime>(),
                Concluded = A<DateTime>(),
                ItProjects = new List<ItProject>
                {
                    project
                },
                ArchiveDuty = A<ArchiveDutyTypes>(),
                Registertype = A<bool>(),
                riskAssessment = DataOptions.YES,
                RiskSupervisionDocumentationUrlName = A<string>(),
                RiskSupervisionDocumentationUrl = A<string>(),
                LinkToDirectoryUrlName = A<string>(),
                LinkToDirectoryUrl = A<string>(),
                AssociatedDataProcessingRegistrations = new List<DataProcessingRegistration>
                {
                    dataProcessingRegistration
                },
                GeneralPurpose = A<string>(),
                HostedAt = A<HostedAt>(),
                UsageRelations = new List<SystemRelation>
                {
                    outgoingRelation
                },
                UsedByRelations = new List<SystemRelation>
                {
                    incomingRelation
                }
            };

            // Add ResponsibleOrganizationUnit
            var organizationUnit = new OrganizationUnit
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var systemUsageOrgUnitUsage = new ItSystemUsageOrgUnitUsage
            {
                OrganizationUnit = organizationUnit,
                OrganizationUnitId = organizationUnit.Id,
                ItSystemUsage = systemUsage,
                ItSystemUsageId = systemUsage.Id
            };
            systemUsage.ResponsibleUsage = systemUsageOrgUnitUsage;

            _businessTypeService.Setup(x => x.GetOption(system.OrganizationId, system.BusinessType.Id)).Returns(Maybe<(BusinessType, bool)>.Some((system.BusinessType, true)));

            // Add MainContract
            var mainContract = new ItContractItSystemUsage
            {
                ItContractId = contract.Id,
                ItContract = contract,
                ItSystemUsageId = systemUsage.Id,
                ItSystemUsage = systemUsage
            };
            systemUsage.MainContract = mainContract;

            // Add SensitiveDataLevel
            var sensitiveDataLevel = new ItSystemUsageSensitiveDataLevel
            {
                Id = A<int>(),
                ItSystemUsage = systemUsage,
                SensitivityDataLevel = A<SensitiveDataLevel>()
            };
            systemUsage.SensitiveDataLevels = new List<ItSystemUsageSensitiveDataLevel> { sensitiveDataLevel };

            // Add ArchivePeriod
            var archivePeriods = new List<ArchivePeriod>
            {
                new ArchivePeriod
                {
                    Id = A<int>(),
                    ItSystemUsage = systemUsage,
                    StartDate = DateTime.Now.AddDays(-1),
                    EndDate = DateTime.Now.AddDays(1)
                }
            };
            systemUsage.ArchivePeriods = archivePeriods;

            var readModel = new ItSystemUsageOverviewReadModel();

            //Act
            _sut.Apply(systemUsage, readModel);

            //Assert
            //System usage
            Assert.Equal(systemUsage.Id, readModel.SourceEntityId);
            Assert.Equal(systemUsage.OrganizationId, readModel.OrganizationId);
            Assert.Equal(systemUsage.IsActive, readModel.IsActive);
            Assert.Equal(systemUsage.Version, readModel.Version);
            Assert.Equal(systemUsage.LocalCallName, readModel.LocalCallName);
            Assert.Equal(systemUsage.LocalSystemId, readModel.LocalSystemId);
            Assert.Equal(user.Id, readModel.ObjectOwnerId);
            Assert.Equal(user.GetFullName(), readModel.ObjectOwnerName);
            Assert.Equal(user.Id, readModel.LastChangedById);
            Assert.Equal(user.GetFullName(), readModel.LastChangedByName);
            Assert.Equal(systemUsage.LastChanged, readModel.LastChangedAt);
            Assert.Equal(systemUsage.Concluded, readModel.Concluded);
            Assert.Equal(systemUsage.ArchiveDuty, readModel.ArchiveDuty);
            Assert.Equal(systemUsage.Registertype, readModel.IsHoldingDocument);
            Assert.Equal(systemUsage.RiskSupervisionDocumentationUrlName, readModel.RiskSupervisionDocumentationName);
            Assert.Equal(systemUsage.RiskSupervisionDocumentationUrl, readModel.RiskSupervisionDocumentationUrl);
            Assert.Equal(systemUsage.LinkToDirectoryUrlName, readModel.LinkToDirectoryName);
            Assert.Equal(systemUsage.LinkToDirectoryUrl, readModel.LinkToDirectoryUrl);
            Assert.Equal(systemUsage.GeneralPurpose, readModel.GeneralPurpose);
            Assert.Equal(systemUsage.HostedAt, readModel.HostedAt);

            // Sensitive data levels
            var rmSensitiveDataLevel = Assert.Single(readModel.SensitiveDataLevels);
            Assert.Equal(sensitiveDataLevel.SensitivityDataLevel, rmSensitiveDataLevel.SensitivityDataLevel);
            Assert.Equal(sensitiveDataLevel.SensitivityDataLevel.GetReadableName(), readModel.SensitiveDataLevelsAsCsv);

            //System
            Assert.Equal(system.Name, readModel.SystemName);
            Assert.Equal(system.Disabled, readModel.ItSystemDisabled);
            Assert.Equal(system.Uuid.ToString("D"), readModel.ItSystemUuid);
            Assert.Equal(system.BelongsTo.Id, readModel.ItSystemRightsHolderId);
            Assert.Equal(system.BelongsTo.Name, readModel.ItSystemRightsHolderName);
            Assert.Equal(system.BusinessType.Id, readModel.ItSystemBusinessTypeId);
            Assert.Equal(system.BusinessType.Name, readModel.ItSystemBusinessTypeName);

            //Parent System
            Assert.Equal(parentSystem.Name, readModel.ParentItSystemName);
            Assert.Equal(parentSystem.Id, readModel.ParentItSystemId);
            Assert.Equal(parentSystem.Disabled, readModel.ParentItSystemDisabled);

            //Assigned Roles
            var roleAssignment = Assert.Single(readModel.RoleAssignments);
            Assert.Equal(user.Id, roleAssignment.UserId);
            Assert.Equal(user.GetFullName(), roleAssignment.UserFullName);
            Assert.Equal(right.RoleId, roleAssignment.RoleId);
            Assert.Equal(user.Email, roleAssignment.Email);

            //Responsible Organization Unit
            Assert.Equal(organizationUnit.Id, readModel.ResponsibleOrganizationUnitId);
            Assert.Equal(organizationUnit.Name, readModel.ResponsibleOrganizationUnitName);

            //KLE
            Assert.Equal(system.TaskRefs.First().TaskKey, readModel.ItSystemKLEIdsAsCsv);
            Assert.Equal(system.TaskRefs.First().Description, readModel.ItSystemKLENamesAsCsv);
            var taskRef = Assert.Single(readModel.ItSystemTaskRefs);
            Assert.Equal(system.TaskRefs.First().TaskKey, taskRef.KLEId);
            Assert.Equal(system.TaskRefs.First().Description, taskRef.KLEName);

            //Reference
            Assert.Equal(systemUsage.Reference.Title, readModel.LocalReferenceTitle);
            Assert.Equal(systemUsage.Reference.URL, readModel.LocalReferenceUrl);
            Assert.Equal(systemUsage.Reference.ExternalReferenceId, readModel.LocalReferenceDocumentId);

            //Main Contract
            Assert.Equal(contract.Id, readModel.MainContractId);
            Assert.Equal(contract.Supplier.Id, readModel.MainContractSupplierId);
            Assert.Equal(contract.Supplier.Name, readModel.MainContractSupplierName);
            Assert.Equal(contract.IsActive, readModel.MainContractIsActive.GetValueOrDefault(false));
            Assert.True(readModel.HasMainContract);

            //Projects
            Assert.Equal(project.Name, readModel.ItProjectNamesAsCsv);
            var rmProject = Assert.Single(readModel.ItProjects);
            Assert.Equal(project.Id, rmProject.ItProjectId);
            Assert.Equal(project.Name, rmProject.ItProjectName);

            //ArchivePeriods
            var rmArchivePeriod = Assert.Single(readModel.ArchivePeriods);
            Assert.Equal(archivePeriods.First().StartDate, rmArchivePeriod.StartDate);
            Assert.Equal(archivePeriods.First().EndDate, rmArchivePeriod.EndDate);
            Assert.Equal(archivePeriods.First().EndDate, readModel.ActiveArchivePeriodEndDate);

            //DataProcessingRegistrations
            Assert.Equal(dataProcessingRegistration.Name, readModel.DataProcessingRegistrationNamesAsCsv);
            Assert.Equal(dataProcessingRegistration.IsAgreementConcluded.GetValueOrDefault(YesNoIrrelevantOption.UNDECIDED).GetReadableName(), readModel.DataProcessingRegistrationsConcludedAsCsv);
            var rmDataProcessingRegistration = Assert.Single(readModel.DataProcessingRegistrations);
            Assert.Equal(dataProcessingRegistration.Name, rmDataProcessingRegistration.DataProcessingRegistrationName);
            Assert.Equal(dataProcessingRegistration.IsAgreementConcluded, rmDataProcessingRegistration.IsAgreementConcluded);

            //Outgoing Relation interfaces
            Assert.Equal(outgoingRelationInterface.Name, readModel.DependsOnInterfacesNamesAsCsv);
            var rmDependsOnInterface = Assert.Single(readModel.DependsOnInterfaces);
            Assert.Equal(outgoingRelationInterface.Id, rmDependsOnInterface.InterfaceId);
            Assert.Equal(outgoingRelationInterface.Name, rmDependsOnInterface.InterfaceName);

            //Outgoing Relation systems
            Assert.Equal(outgoingRelationItSystem.Name, readModel.OutgoingRelatedItSystemUsagesNamesAsCsv);
            var rmDependsOnSystem = Assert.Single(readModel.OutgoingRelatedItSystemUsages);
            Assert.Equal(outgoingRelationItSystemUsage.Id, rmDependsOnSystem.ItSystemUsageId);
            Assert.Equal(outgoingRelationItSystem.Name, rmDependsOnSystem.ItSystemUsageName);

            //Incoming Relations
            Assert.Equal(incomingRelationItSystem.Name, readModel.IncomingRelatedItSystemUsagesNamesAsCsv);
            var rmIncomingRelatedSystemUsage = Assert.Single(readModel.IncomingRelatedItSystemUsages);
            Assert.Equal(incomingRelationItSystemUsage.Id, rmIncomingRelatedSystemUsage.ItSystemUsageId);
            Assert.Equal(incomingRelationItSystem.Name, rmIncomingRelatedSystemUsage.ItSystemUsageName);
        }
        public void Apply_Generates_DataProcessingRegistrationCsv_Correctly_With_Multiple_DataProcessingRegistrations()
        {
            //Arrange
            var dpr1 = new DataProcessingRegistration
            {
                Id = A<int>(),
                Name = A<string>(),
                IsAgreementConcluded = YesNoIrrelevantOption.YES
            };
            var dpr2 = new DataProcessingRegistration
            {
                Id = A<int>(),
                Name = A<string>(),
                IsAgreementConcluded = YesNoIrrelevantOption.NO
            };
            var dpr3 = new DataProcessingRegistration
            {
                Id = A<int>(),
                Name = A<string>(),
                IsAgreementConcluded = YesNoIrrelevantOption.IRRELEVANT
            };
            var dpr4 = new DataProcessingRegistration
            {
                Id = A<int>(),
                Name = A<string>(),
                IsAgreementConcluded = YesNoIrrelevantOption.UNDECIDED
            };
            var dpr5 = new DataProcessingRegistration
            {
                Id = A<int>(),
                Name = A<string>(),
                IsAgreementConcluded = YesNoIrrelevantOption.UNDECIDED
            };
            var system = new ItSystem
            {
                Id = A<int>(),
                Name = A<string>()
            };
            var systemUsage = new ItSystemUsage
            {
                Id = A<int>(),
                OrganizationId = A<int>(),
                ItSystem = system,
                ObjectOwner = defaultTestUser,
                LastChangedByUser = defaultTestUser,
                LastChanged = A<DateTime>(),
                riskAssessment = DataOptions.DONTKNOW,
                RiskSupervisionDocumentationUrlName = A<string>(),
                RiskSupervisionDocumentationUrl = A<string>(),
                AssociatedDataProcessingRegistrations = new List<DataProcessingRegistration>()
                {
                    dpr1,
                    dpr2,
                    dpr3,
                    dpr4,
                    dpr5
                }
            };

            var readModel = new ItSystemUsageOverviewReadModel();

            //Act
            _sut.Apply(systemUsage, readModel);

            //Assert
            Assert.Equal($"{dpr1.Name}, {dpr2.Name}, {dpr3.Name}, {dpr4.Name}, {dpr5.Name}", readModel.DataProcessingRegistrationNamesAsCsv);
            Assert.Equal($"{dpr1.IsAgreementConcluded.GetValueOrDefault().GetReadableName()}, " +
                $"{dpr2.IsAgreementConcluded.GetValueOrDefault().GetReadableName()}, " +
                $"{dpr3.IsAgreementConcluded.GetValueOrDefault().GetReadableName()}", readModel.DataProcessingRegistrationsConcludedAsCsv);
        }