Ejemplo n.º 1
0
        public async Task Can_Delete_Objects_Which_Are_Referred_By_Report()
        {
            //Arrange - a broken link in both a system and an interface
            PurgeBrokenExternalReferencesReportTable();
            var system = await ItSystemHelper.CreateItSystemInOrganizationAsync(A <Guid>().ToString("N"), TestEnvironment.DefaultOrganizationId, AccessModifier.Public);

            await ReferencesHelper.CreateReferenceAsync(A <string>(), null, SystemReferenceUrl, Display.Url, r => r.ItSystem_Id = system.Id);

            var referenceToBeExplicitlyDeleted = await ReferencesHelper.CreateReferenceAsync(A <string>(), null, SystemReferenceUrl, Display.Url, r => r.ItSystem_Id = system.Id);

            var interfaceDto = await InterfaceHelper.CreateInterface(InterfaceHelper.CreateInterfaceDto(A <string>(), A <string>(), TestEnvironment.DefaultOrganizationId, AccessModifier.Public));

            interfaceDto = await InterfaceHelper.SetUrlAsync(interfaceDto.Id, InterfaceUrl);

            await BrokenExternalReferencesReportHelper.TriggerRequestAsync();

            var dto = await WaitForReportGenerationCompletedAsync();

            Assert.True(dto.Available);

            //Act
            using (var deleteReferenceResponse = await ReferencesHelper.DeleteReferenceAsync(referenceToBeExplicitlyDeleted.Id))
                using (var deleteItSystemResponse = await ItSystemHelper.DeleteItSystemAsync(system.Id, TestEnvironment.DefaultOrganizationId))
                    using (var deleteInterfaceResponse = await InterfaceHelper.SendDeleteInterfaceRequestAsync(interfaceDto.Id))
                    {
                        Assert.Equal(HttpStatusCode.OK, deleteReferenceResponse.StatusCode);
                        Assert.Equal(HttpStatusCode.OK, deleteItSystemResponse.StatusCode);
                        Assert.Equal(HttpStatusCode.OK, deleteInterfaceResponse.StatusCode);
                    }
        }
Ejemplo n.º 2
0
        public async Task Get_CurrentCsv_Returns_Unicode_Encoded_Csv()
        {
            //Arrange - a broken link in both a system and an interface
            PurgeBrokenExternalReferencesReportTable();
            var system = await ItSystemHelper.CreateItSystemInOrganizationAsync(A <Guid>().ToString("N"), TestEnvironment.DefaultOrganizationId, AccessModifier.Public);

            var systemReferenceName = A <string>();
            await ReferencesHelper.CreateReferenceAsync(systemReferenceName, null, SystemReferenceUrl, Display.Url, r => r.ItSystem_Id = system.Id);

            var interfaceDto = await InterfaceHelper.CreateInterface(InterfaceHelper.CreateInterfaceDto(A <string>(), A <string>(), TestEnvironment.DefaultOrganizationId, AccessModifier.Public));

            interfaceDto = await InterfaceHelper.SetUrlAsync(interfaceDto.Id, InterfaceUrl);

            //Act
            await BrokenExternalReferencesReportHelper.TriggerRequestAsync();

            var dto = await WaitForReportGenerationCompletedAsync();

            //Assert that the two controlled errors are present
            Assert.True(dto.Available);
            var report = await GetBrokenLinksReportAsync();

            var brokenSystemLink = Assert.Single(report[system.Name]);

            AssertBrokenLinkRow(brokenSystemLink, "IT System", system.Name, systemReferenceName, "Se fejlkode", "404", SystemReferenceUrl);
            var brokenInterfaceLink = Assert.Single(report[interfaceDto.Name]);

            AssertBrokenLinkRow(brokenInterfaceLink, "Snitflade", interfaceDto.Name, string.Empty, "Se fejlkode", "404", InterfaceUrl);
        }
Ejemplo n.º 3
0
        private void SetCopyLocalForProject()
        {
            var projects      = (Array)Global.Dte.ActiveSolutionProjects;
            var activeProject = (Project)projects.GetValue(0);

            int changeCount = ReferencesHelper.SetCopyLocalFlag(activeProject);

            SaveProjectIfNeeded(activeProject);
            LogChangesToOutput(changeCount);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Copie les executables et les artefacts dans le répertoire d'exécution
        /// </summary>
        /// <param name="model">The model.</param>
        public static void CopyToRuntimeFolder(CandleModel model)
        {
            if (model.Component == null)
            {
                return;
            }

            ILogger logger       = ServiceLocator.Instance.GetService <ILogger>();
            string  targetFolder = string.Empty;

            try
            {
                // Recherche du projet de démarrage pour savoir dans quel répertoire copier les artifacts
                object[] files = (object[])ServiceLocator.Instance.ShellHelper.Solution.SolutionBuild.StartupProjects;
                if (files == null || files.Length == 0)
                {
                    return; // Pas trouvé
                }
                string startupProjectName = (string)files[0];
                startupProjectName = Path.GetFileNameWithoutExtension(startupProjectName);
                EnvDTE.Project startupProject = ServiceLocator.Instance.ShellHelper.FindProjectByName(startupProjectName);
                if (startupProject == null)
                {
                    // Recherche diffèrente pour un projet web
                    startupProjectName = Path.GetFileName(startupProjectName);
                    startupProject     = ServiceLocator.Instance.ShellHelper.FindProjectByName(startupProjectName);
                    if (startupProject == null)
                    {
                        if (logger != null)
                        {
                            logger.Write("Copy binary to runtime folder error", "Unable to find the startup project " + startupProjectName, LogType.Warning);
                        }
                        return;
                    }
                }

                // Vérification des dépendances
                ReferencesHelper.CheckReferences(false, null, new ConfigurationMode(), ReferenceScope.Runtime, model);

                ConfigurationMode mode = new ConfigurationMode(startupProject);

                // Répertoire destination
                targetFolder = Path.Combine(Path.GetDirectoryName(startupProject.FullName), mode.BinPath);

                CopyInFolder(targetFolder, model, mode);
            }
            catch (Exception ex)
            {
                if (logger != null)
                {
                    logger.WriteError("Copy to runtime folder", String.Format("erreur when copying runtime artifacts to {0}", targetFolder), ex);
                }
            }
        }
Ejemplo n.º 5
0
        public async Task Can_Set_Master_Reference()
        {
            //Arrange
            var registration = await DataProcessingRegistrationHelper.CreateAsync(TestEnvironment.DefaultOrganizationId, A <string>());

            var reference = await ReferencesHelper.CreateReferenceAsync(A <string>(), A <string>(), A <string>(), Display.Url, r => r.DataProcessingRegistration_Id = registration.Id);

            //Act - check its possible to set a reference as master in a data processing registration
            using var setMasterResponse = await DataProcessingRegistrationHelper.SendSetMasterReferenceRequestAsync(registration.Id, reference.Id);

            //Assert response
            Assert.Equal(HttpStatusCode.OK, setMasterResponse.StatusCode);
        }
Ejemplo n.º 6
0
        private void SetCopyLocalForSolution()
        {
            var projects    = SolutionHelper.GetProjects(Global.Dte);
            int changeCount = 0;

            foreach (var project in projects)
            {
                changeCount += ReferencesHelper.SetCopyLocalFlag(project);
                SaveProjectIfNeeded(project);
            }

            LogChangesToOutput(changeCount);
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Liste des relations entre composants
 /// </summary>
 /// <returns></returns>
 public List <DependencyGraphVisitor.RelationShip> GetAllRelations()
 {
     if (_dependencies == null)
     {
         lock (sync)
         {
             if (_dependencies == null)
             {
                 _dependencies = ReferencesHelper.GetAllDependencies();
             }
         }
     }
     return(_dependencies);
 }
        /// <summary>
        /// Set Copy Local for the current solution.
        /// </summary>
        private static void SetCopyLocalForSolution()
        {
            var projects    = SolutionHelper.GetProjects(_dte);
            int changeCount = 0;

            foreach (var project in projects.Where(project => !_options.Skip(project.Name)))
            {
                changeCount += ReferencesHelper.SetCopyLocalFlag(project, _options.CopyLocalFlag, _options.PreviewMode);
                if (!_options.PreviewMode)
                {
                    SaveProjectIfNeeded(project);
                }
            }

            LogChangesToOutput(changeCount);
        }
Ejemplo n.º 9
0
        public async Task Can_Create_Reference_In_DataProcessingRegistration()
        {
            //Arrange
            var dpa = await DataProcessingRegistrationHelper.CreateAsync(TestEnvironment.DefaultOrganizationId, A <string>());

            //Act - create two similar references... we expect the first one to be the master
            var expectedMasterReference = await ReferencesHelper.CreateReferenceAsync(_title, _externalReferenceId, _referenceUrl, _display, dto => dto.DataProcessingRegistration_Id = dpa.Id);

            await ReferencesHelper.CreateReferenceAsync(_title, _externalReferenceId, _referenceUrl, _display, dto => dto.DataProcessingRegistration_Id = dpa.Id);

            //Assert
            AssertCreatedReference(_title, expectedMasterReference, _externalReferenceId, _referenceUrl, _display);
            dpa = await DataProcessingRegistrationHelper.GetAsync(dpa.Id);

            Assert.Equal(2, dpa.References.Length);
            Assert.Equal(expectedMasterReference.Id, dpa.References.FirstOrDefault(x => x.MasterReference).FromNullable().Select(x => x.Id).GetValueOrFallback(-1)); //First reference must be marked as "the reference"
        }
Ejemplo n.º 10
0
        public async Task Can_Create_Reference_In_ItProject()
        {
            //Arrange
            var project = await ItProjectHelper.CreateProject(A <string>(), TestEnvironment.DefaultOrganizationId);

            //Act - create two similar references... we expect the first one to be the master
            var expectedMasterReference = await ReferencesHelper.CreateReferenceAsync(_title, _externalReferenceId, _referenceUrl, _display, dto => dto.ItProject_Id = project.Id);

            await ReferencesHelper.CreateReferenceAsync(_title, _externalReferenceId, _referenceUrl, _display, dto => dto.ItProject_Id = project.Id);

            //Assert
            AssertCreatedReference(_title, expectedMasterReference, _externalReferenceId, _referenceUrl, _display);
            project = await ItProjectHelper.GetProjectAsync(project.Id);

            Assert.Equal(2, project.ExternalReferences.Count);
            Assert.Equal(expectedMasterReference.Id, project.ReferenceId.GetValueOrDefault(-1)); //First reference must be marked as "the reference"
        }
Ejemplo n.º 11
0
        public async Task Can_Create_Reference_In_ItSystem()
        {
            //Arrange
            var systemDto = await ItSystemHelper.CreateItSystemInOrganizationAsync(A <string>(), TestEnvironment.DefaultOrganizationId, AccessModifier.Public);


            //Act - create two similar references... we expect the first one to be the master
            var expectedMasterReference = await ReferencesHelper.CreateReferenceAsync(_title, _externalReferenceId, _referenceUrl, _display, dto => dto.ItSystem_Id = systemDto.Id);

            await ReferencesHelper.CreateReferenceAsync(_title, _externalReferenceId, _referenceUrl, _display, dto => dto.ItSystem_Id = systemDto.Id);

            //Assert
            AssertCreatedReference(_title, expectedMasterReference, _externalReferenceId, _referenceUrl, _display);
            systemDto = await ItSystemHelper.GetSystemAsync(systemDto.Id);

            Assert.Equal(2, systemDto.ExternalReferences.Count);
            Assert.Equal(expectedMasterReference.Id, systemDto.ReferenceId.GetValueOrDefault(-1)); //First reference must be marked as "the reference"
        }
Ejemplo n.º 12
0
        internal void ValidateReferences(ValidationContext context)
        {
            //// Synchronization des metadonnées des composants externes
            //// et récupération des modèles (pas les sous-modèles) si il ne sont pas en local
            //try
            //{
            //    DSLFactory.Candle.SystemModel.Repository.RepositoryManager.Instance.ModelsMetadata.SynchronizeExternalComponentsMetadata(this);
            //}
            //catch (Exception ex)
            //{
            //    ILogger logger = ServiceLocator.Instance.GetService<ILogger>();
            //    if (logger != null)
            //        logger.WriteError("Validate model", "Synchronize external models", ex);
            //}

            // Validation si tous les modèles et sous-modéles sont à jour.
            ReferencesHelper.CheckReferences(false, context, new ConfigurationMode(), ReferenceScope.Runtime, this);
        }
        /// <summary>
        /// Set Copy Local for the active project.
        /// </summary>
        private static void SetCopyLocalForProject()
        {
            var projects      = (Array)_dte.ActiveSolutionProjects;
            var activeProject = (Project)projects.GetValue(0);

            if (!_options.Skip(activeProject.Name))
            {
                int changeCount = ReferencesHelper.SetCopyLocalFlag(activeProject, _options.CopyLocalFlag,
                                                                    _options.PreviewMode);
                SaveProjectIfNeeded(activeProject);
                LogChangesToOutput(changeCount);
            }
            else
            {
                Common.WriteToDTEOutput(_dte, string.Format(
                                            "'{0}' was skipped from processing (Set in Tools -> Options -> VSCopyLocal).",
                                            activeProject.Name));
            }
        }
#pragma warning restore VSTHRD010

        private void Execute(bool withRegeneration)
        {
            GenerationItem generationItem;

            Attempt.Action(
                () =>
            {
                ThreadHelper.ThrowIfNotOnUIThread();

                var textView = GetTextView();
                if (textView == null)
                {
                    throw new InvalidOperationException("Could not find the text view");
                }

                var caretPosition = textView.Caret.Position.BufferPosition;
                var document      = caretPosition.Snapshot.GetOpenDocumentInCurrentContextWithChanges();

                var messageLogger = new AggregateLogger();
                messageLogger.Initialize();

                var item = VsProjectHelper.GetProjectItem(document.FilePath);

                var options = _package.Options;
                var source  = new ProjectItemModel(item, options.GenerationOptions);

                var projectItem = source.Item;

                var nameParts = VsProjectHelper.GetNameParts(projectItem);

                if (source.TargetProject == null && options.GenerationOptions.CreateProjectAutomatically)
                {
                    var testProject = SolutionUtilities.CreateTestProjectInCurrentSolution(_dte, source.Project, options.GenerationOptions);
                    ReferencesHelper.AddNugetPackagesToProject(testProject, StandardReferenceHelper.GetReferencedNugetPackages(options), messageLogger.LogMessage, _package);
                }

                var targetProject = source.TargetProject;
                if (targetProject == null && !options.GenerationOptions.AllowGenerationWithoutTargetProject)
                {
                    throw new InvalidOperationException("Cannot create tests for '" + Path.GetFileName(source.FilePath) + "' because there is no project '" + source.TargetProjectName + "'");
                }

                var projectDictionary = new Dictionary <EnvDTE.Project, Tuple <HashSet <TargetAsset>, HashSet <IReferencedAssembly> > >();
                var set = new HashSet <TargetAsset>();
                var assemblyReferences = new HashSet <IReferencedAssembly>();
                if (targetProject != null)
                {
                    projectDictionary[targetProject] = Tuple.Create(set, assemblyReferences);
                }

                var targetProjectItems = TargetFinder.FindTargetFolder(targetProject, nameParts, true, out var targetPath);
                if (targetProjectItems == null && !options.GenerationOptions.AllowGenerationWithoutTargetProject)
                {
                    // we asked to create targetProjectItems - so if it's null we effectively had a problem getting to the target project
                    throw new InvalidOperationException("Cannot create tests for '" + Path.GetFileName(source.FilePath) + "' because there is no project '" + source.TargetProjectName + "'");
                }

                _package.JoinableTaskFactory.RunAsync(
                    () => Attempt.ActionAsync(
                        async() =>
                {
                    var methodSymbol = await GetTargetSymbolAsync(textView).ConfigureAwait(true);

                    if (methodSymbol != null)
                    {
                        var sourceNameSpaceRoot = VsProjectHelper.GetProjectRootNamespace(source.Project);

                        Func <string, string> namespaceTransform;
                        if (source.TargetProject != null)
                        {
                            var targetNameSpaceRoot = VsProjectHelper.GetProjectRootNamespace(source.TargetProject);
                            namespaceTransform      = NamespaceTransform.Create(sourceNameSpaceRoot, targetNameSpaceRoot);
                        }
                        else
                        {
                            namespaceTransform = x => x + ".Tests";
                        }

                        generationItem = new GenerationItem(source, methodSymbol.Item1, targetProjectItems, targetPath, set, assemblyReferences, namespaceTransform, options.GenerationOptions);

                        await CodeGenerator.GenerateCodeAsync(new[] { generationItem }, withRegeneration, _package, projectDictionary, messageLogger).ConfigureAwait(true);
                    }
                }, _package));
            }, _package);
        }
#pragma warning restore VSTHRD010

        private void Execute(bool withRegeneration)
        {
            var generationItems   = new List <GenerationItem>();
            var projectDictionary = new Dictionary <Project, Tuple <HashSet <TargetAsset>, HashSet <IReferencedAssembly> > >();

            var messageLogger = new AggregateLogger();

            messageLogger.Initialize();

            Attempt.Action(
                () =>
            {
                ThreadHelper.ThrowIfNotOnUIThread();
#pragma warning disable VSTHRD010

                if (!IsAvailable)
                {
                    throw new InvalidOperationException("Cannot generate unit tests for this item because no supported files were found");
                }

                var options = _package.Options;
                var sources = SolutionUtilities.GetSelectedFiles(_dte, true, options.GenerationOptions).Where(ProjectItemModel.IsSupported).ToList();

                var targetProjects = new Dictionary <Project, Project>();

                foreach (var source in sources)
                {
                    if (targetProjects.ContainsKey(source.Project))
                    {
                        continue;
                    }

                    if (source.TargetProject == null && options.GenerationOptions.CreateProjectAutomatically)
                    {
                        var testProject = SolutionUtilities.CreateTestProjectInCurrentSolution(_dte, source.Project, options.GenerationOptions);
                        ReferencesHelper.AddNugetPackagesToProject(testProject, StandardReferenceHelper.GetReferencedNugetPackages(options), messageLogger.LogMessage, _package);
                    }

                    var targetProject = source.TargetProject;

                    if (targetProject == null && !options.GenerationOptions.AllowGenerationWithoutTargetProject)
                    {
                        throw new InvalidOperationException("Cannot create tests for '" + Path.GetFileName(source.FilePath) + "' because there is no project '" + source.TargetProjectName + "'");
                    }

                    if (targetProject != null)
                    {
                        targetProjects[source.Project]   = targetProject;
                        projectDictionary[targetProject] = Tuple.Create(new HashSet <TargetAsset>(), new HashSet <IReferencedAssembly>());
                    }
                }

                foreach (var source in sources)
                {
                    var projectItem = source.Item;

                    if (!withRegeneration && TargetFinder.FindExistingTargetItem(source, options.GenerationOptions, out _) == FindTargetStatus.Found)
                    {
                        if (sources.Count == 1)
                        {
                            throw new InvalidOperationException("Cannot create tests for '" + Path.GetFileName(source.FilePath) + "' because tests already exist. If you want to re-generate tests for this item, hold down the left Shift key and right-click the item.");
                        }

                        continue;
                    }

                    var nameParts = VsProjectHelper.GetNameParts(projectItem);

                    targetProjects.TryGetValue(source.Project, out var targetProject);
                    var targetProjectItems = TargetFinder.FindTargetFolder(targetProject, nameParts, true, out var targetPath);

                    if (targetProjectItems == null && !options.GenerationOptions.AllowGenerationWithoutTargetProject)
                    {
                        // we asked to create targetProjectItems - so if it's null we effectively had a problem getting to the target project
                        throw new InvalidOperationException("Cannot create tests for '" + Path.GetFileName(source.FilePath) + "' because there is no project '" + source.TargetProjectName + "'");
                    }

                    var sourceNameSpaceRoot = VsProjectHelper.GetProjectRootNamespace(source.Project);
                    HashSet <TargetAsset> requiredAssets;
                    HashSet <IReferencedAssembly> referencedAssemblies;

                    if (targetProject != null && projectDictionary.TryGetValue(targetProject, out var targetProjectEntry))
                    {
                        requiredAssets       = targetProjectEntry.Item1;
                        referencedAssemblies = targetProjectEntry.Item2;
                    }
                    else
                    {
                        requiredAssets       = new HashSet <TargetAsset>();
                        referencedAssemblies = new HashSet <IReferencedAssembly>();
                    }

                    Func <string, string> namespaceTransform;
                    if (source.TargetProject != null)
                    {
                        var targetNameSpaceRoot = VsProjectHelper.GetProjectRootNamespace(source.TargetProject);
                        namespaceTransform      = NamespaceTransform.Create(sourceNameSpaceRoot, targetNameSpaceRoot);
                    }
                    else
                    {
                        namespaceTransform = x => x + ".Tests";
                    }

                    generationItems.Add(new GenerationItem(source, null, targetProjectItems, targetPath, requiredAssets, referencedAssemblies, namespaceTransform, options.GenerationOptions));
                }
#pragma warning restore VSTHRD010
            }, _package);

            if (generationItems.Any())
            {
                _package.JoinableTaskFactory.RunAsync(() => Attempt.ActionAsync(() => CodeGenerator.GenerateCodeAsync(generationItems, withRegeneration, _package, projectDictionary, messageLogger), _package));
            }
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Génération du projet correspondant à cette couche
        /// </summary>
        /// <param name="elem">The elem.</param>
        public virtual void GenerateVSProject(ICustomizableElement elem)
        {
            _layer = elem as SoftwareLayer;
            if (_layer == null)
            {
                return;
            }

            Project project = null;

            if (Context.CanGenerate(_layer.Id))
            {
                // Nom du dossier qui contient le projet
                string folderName = _layer.GetProjectFolderName();

                // Template du projet
                string templateName = GetProjectTemplate(_layer);

                // Création du projet si il n'existe pas
                project = ServiceLocator.Instance.ShellHelper.CreateVSProject(folderName, _layer.VSProjectName, templateName);

                if (project != null)
                {
                    ServiceLocator.Instance.ShellHelper.SetProperty(project, "DefaultNamespace", _layer.Namespace);
                    ServiceLocator.Instance.ShellHelper.SetProperty(project, "AssemblyName", _layer.AssemblyName);

                    // Ajout des références
                    ServiceLocator.Instance.ShellHelper.AddProjectReferencesToProject(project,
                                                                                      ReferencesHelper.GetReferences(
                                                                                          Context.Mode,
                                                                                          ReferenceScope.Compilation,
                                                                                          ServiceLocator.Instance.
                                                                                          ShellHelper.SolutionFolder,
                                                                                          _layer));

                    if (_layer is Layer && ((Layer)_layer).StartupProject)
                    {
                        ServiceLocator.Instance.ShellHelper.Solution.SolutionBuild.StartupProjects = project.UniqueName;
                    }
                }
            }
            else
            {
                // Si il y avait un élément sélectionné pour la génération, il faut quand même
                // initialisé le projet concerné
                project = GetProject();
            }

            //            ShellHelper.SetProjectProperty( project, ConfigurationMode.All, "OutputPath", ResolveRepositoryPath( DSLFactory.Candle.SystemModel.Repository.RepositoryManager.LATEST ) );
            Context.Project = project;
        }
        public async Task ReadModels_Contain_Correct_Content()
        {
            //Arrange
            var name                 = A <string>();
            var dpName               = $"Dp:{name}";
            var subDpName            = $"Sub_Dp:{name}";
            var systemName           = $"SYSTEM:{name}";
            var contractName         = $"CONTRACT:{name}";
            var refName              = $"REF:{name}";
            var refUserAssignedId    = $"REF:{name}EXT_ID";
            var refUrl               = $"https://www.test-rm{A<uint>()}.dk";
            var refDisp              = A <Display>();
            var organizationId       = TestEnvironment.DefaultOrganizationId;
            var isAgreementConcluded = A <YesNoIrrelevantOption>();
            var oversightInterval    = A <YearMonthIntervalOption>();
            var oversightCompleted   = A <YesNoUndecidedOption>();
            var oversightDate        = A <DateTime>();
            var oversightRemark      = A <string>();

            Console.Out.WriteLine($"Testing in the context of DPR with name:{name}");

            var dataProcessor = await OrganizationHelper.CreateOrganizationAsync(organizationId, dpName, "22334455", OrganizationTypeKeys.Virksomhed, AccessModifier.Public);

            var subDataProcessor = await OrganizationHelper.CreateOrganizationAsync(organizationId, subDpName, "22314455", OrganizationTypeKeys.Virksomhed, AccessModifier.Public);

            var registration = await DataProcessingRegistrationHelper.CreateAsync(organizationId, name);

            await DataProcessingRegistrationHelper.SendChangeOversightIntervalOptionRequestAsync(registration.Id, oversightInterval);

            await DataProcessingRegistrationHelper.SendChangeIsOversightCompletedRequestAsync(registration.Id, oversightCompleted);

            var businessRoleDtos = await DataProcessingRegistrationHelper.GetAvailableRolesAsync(registration.Id);

            var role           = businessRoleDtos.First();
            var availableUsers = await DataProcessingRegistrationHelper.GetAvailableUsersAsync(registration.Id, role.Id);

            var user = availableUsers.First();

            _testOutputHelper.WriteLine($"Attempting to assign user {user.Id}:{user.Email} as role {role.Id}:{role.Name} in dpr {registration.Id}:{registration.Name}");
            using var response = await DataProcessingRegistrationHelper.SendAssignRoleRequestAsync(registration.Id, role.Id, user.Id);

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);

            //Basis for transfer
            var options          = (await DataProcessingRegistrationHelper.GetBasisForTransferOptionsAsync(TestEnvironment.DefaultOrganizationId)).ToList();
            var basisForTransfer = options[Math.Abs(A <int>()) % options.Count];

            using var assignResponse = await DataProcessingRegistrationHelper.SendAssignBasisForTransferRequestAsync(registration.Id, basisForTransfer.Id);

            Assert.Equal(HttpStatusCode.OK, assignResponse.StatusCode);

            //Enable and set third country
            var transferToThirdCountries = A <YesNoUndecidedOption>();

            using var setInsecureCountryStateResponse = await DataProcessingRegistrationHelper.SendSetUseTransferToInsecureThirdCountriesStateRequestAsync(registration.Id, transferToThirdCountries);

            Assert.Equal(HttpStatusCode.OK, setInsecureCountryStateResponse.StatusCode);

            //Set data responsible
            var dataOptions = await DataProcessingRegistrationHelper.GetAvailableOptionsRequestAsync(organizationId);

            var dataResponsibleOption = dataOptions.DataResponsibleOptions.First();

            using var setDataResponsibleResponse = await DataProcessingRegistrationHelper.SendAssignDataResponsibleRequestAsync(registration.Id, dataResponsibleOption.Id);

            Assert.Equal(HttpStatusCode.OK, setDataResponsibleResponse.StatusCode);

            //Set oversight option
            var oversightOption = dataOptions.OversightOptions.First();

            using var setOversightOptionResponse = await DataProcessingRegistrationHelper.SendAssignOversightOptionRequestAsync(registration.Id, oversightOption.Id);

            Assert.Equal(HttpStatusCode.OK, setDataResponsibleResponse.StatusCode);

            //Enable and set sub processors
            using var setStateRequest = await DataProcessingRegistrationHelper.SendSetUseSubDataProcessorsStateRequestAsync(registration.Id, YesNoUndecidedOption.Yes);

            Assert.Equal(HttpStatusCode.OK, setStateRequest.StatusCode);

            using var sendAssignDataProcessorRequestAsync = await DataProcessingRegistrationHelper.SendAssignDataProcessorRequestAsync(registration.Id, dataProcessor.Id);

            Assert.Equal(HttpStatusCode.OK, sendAssignDataProcessorRequestAsync.StatusCode);

            using var sendAssignSubDataProcessorRequestAsync = await DataProcessingRegistrationHelper.SendAssignSubDataProcessorRequestAsync(registration.Id, subDataProcessor.Id);

            Assert.Equal(HttpStatusCode.OK, sendAssignSubDataProcessorRequestAsync.StatusCode);

            //Concluded state
            await DataProcessingRegistrationHelper.SendChangeIsAgreementConcludedRequestAsync(registration.Id, isAgreementConcluded);

            //Latest oversight date
            await DataProcessingRegistrationHelper.SendAssignOversightDateRequestAsync(registration.Id, oversightDate, oversightRemark);

            //References
            await ReferencesHelper.CreateReferenceAsync(refName, refUserAssignedId, refUrl, refDisp, dto => dto.DataProcessingRegistration_Id = registration.Id);

            //Systems
            var itSystemDto = await ItSystemHelper.CreateItSystemInOrganizationAsync(systemName, organizationId, AccessModifier.Public);

            var usage = await ItSystemHelper.TakeIntoUseAsync(itSystemDto.Id, organizationId);

            using var assignSystemResponse = await DataProcessingRegistrationHelper.SendAssignSystemRequestAsync(registration.Id, usage.Id);

            Assert.Equal(HttpStatusCode.OK, assignSystemResponse.StatusCode);

            //Contracts
            var contractDto = await ItContractHelper.CreateContract(contractName, organizationId);

            using var assignDataProcessingResponse = await ItContractHelper.SendAssignDataProcessingRegistrationAsync(contractDto.Id, registration.Id);

            Assert.Equal(HttpStatusCode.OK, assignDataProcessingResponse.StatusCode);

            //Wait for read model to rebuild (wait for the LAST mutation)
            await WaitForReadModelQueueDepletion();

            Console.Out.WriteLine("Read models are up to date");

            //Act
            var readModels = (await DataProcessingRegistrationHelper.QueryReadModelByNameContent(organizationId, name, 1, 0)).ToList();

            //Assert
            var readModel = Assert.Single(readModels);

            Console.Out.WriteLine("Read model found");
            Assert.Equal(name, readModel.Name);
            Assert.Equal(registration.Id, readModel.SourceEntityId);
            Assert.Equal(refName, readModel.MainReferenceTitle);
            Assert.Equal(refUrl, readModel.MainReferenceUrl);
            Assert.Equal(refUserAssignedId, readModel.MainReferenceUserAssignedId);
            Assert.Equal(oversightInterval, readModel.OversightInterval);
            Assert.Equal(oversightCompleted, readModel.IsOversightCompleted);
            Assert.Equal(dataProcessor.Name, readModel.DataProcessorNamesAsCsv);
            Assert.Equal(subDataProcessor.Name, readModel.SubDataProcessorNamesAsCsv);
            Assert.Equal(isAgreementConcluded, readModel.IsAgreementConcluded);
            Assert.Equal(transferToThirdCountries, readModel.TransferToInsecureThirdCountries);
            Assert.Equal(basisForTransfer.Name, readModel.BasisForTransfer);
            Assert.Equal(dataResponsibleOption.Name, readModel.DataResponsible);
            Assert.Equal(oversightOption.Name, readModel.OversightOptionNamesAsCsv);
            Assert.Equal(contractName, readModel.ContractNamesAsCsv);
            Assert.Equal(systemName, readModel.SystemNamesAsCsv);
            Assert.Equal(oversightDate, readModel.LatestOversightDate);

            Console.Out.WriteLine("Flat values asserted");
            Console.Out.WriteLine("Asserting role assignments");

            var roleAssignment = Assert.Single(readModel.RoleAssignments);

            Console.Out.WriteLine("Found one role assignment as expected");

            Assert.Equal(role.Id, roleAssignment.RoleId);
            Assert.Equal(user.Id, roleAssignment.UserId);
            Assert.Equal(user.Name, roleAssignment.UserFullName);

            Console.Out.WriteLine("Role data verified");

            //Assert that the source object can be deleted and that the readmodel is gone now
            var deleteResponse = await DataProcessingRegistrationHelper.SendDeleteRequestAsync(registration.Id);

            Assert.Equal(HttpStatusCode.OK, deleteResponse.StatusCode);

            readModels = (await DataProcessingRegistrationHelper.QueryReadModelByNameContent(organizationId, name, 1, 0)).ToList();
            Assert.Empty(readModels);
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Generates the specified service provider.
        /// </summary>
        /// <param name="serviceProvider">The service provider.</param>
        /// <param name="modelFileName">Name of the model file.</param>
        /// <param name="selectedElement">The selected element.</param>
        public static void Generate(IServiceProvider serviceProvider, string modelFileName, ICustomizableElement selectedElement)
        {
            if (modelFileName == null)
            {
                throw new ArgumentNullException("modelFileName");
            }

            ILogger    logger = ServiceLocator.Instance.GetService <ILogger>();
            IIDEHelper ide    = ServiceLocator.Instance.IDEHelper;

            Generator.s_serviceProvider = serviceProvider;

            try
            {
                // Sauvegarde de tous les documents
                ServiceLocator.Instance.ShellHelper.Solution.DTE.Documents.SaveAll();

                CandleModel model = CandleModel.GetModelFromCurrentSolution(modelFileName);
                // Chargement du modèle
                //ModelLoader loader = ModelLoader.GetLoader(modelFileName, false);
                //if (loader == null || loader.Model == null)
                //{
                //    if (logger != null)
                //        logger.Write("Generator", "unable to load the model", LogType.Error);
                //    return;
                //}

                //CandleModel model = loader.Model;
                if (model.Component == null)
                {
                    if (logger != null)
                    {
                        logger.Write("Generator", "model contains no software component.", LogType.Error);
                    }
                    return;
                }
                if (StrategyManager.GetInstance(model.Store).GetStrategies(null, true).Count == 0)
                {
                    if (logger != null)
                    {
                        logger.Write("Generator", "No strategies configured.", LogType.Error);
                    }
                    return;
                }

//                CandleModel model = loader.Model;

                s_context = new GenerationContext(model, modelFileName, selectedElement != null ? selectedElement.Id : Guid.Empty);

                GenerationPass generationPassesSelected = GenerationPass.CodeGeneration | GenerationPass.MetaModelUpdate;
                try
                {
                    // Demande des stratégies à executer
                    if (selectedElement != null)
                    {
                        RunningStrategiesForm dlg = new RunningStrategiesForm(selectedElement.StrategiesOwner);
                        if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
                        {
                            return;
                        }
                        s_context.SelectedStrategies = dlg.SelectedStrategies;
                        generationPassesSelected     = dlg.SelectedGenerationPasses;
                    }

                    if (logger != null)
                    {
                        logger.BeginProcess(true, true);
                    }

                    // Préparation de l'IDE
                    ide.SetWaitCursor();
                    ide.DisplayProgress("Generate...", 1, 3);

                    Microsoft.VisualStudio.Modeling.Validation.ValidationContext vc = new Microsoft.VisualStudio.Modeling.Validation.ValidationContext(Microsoft.VisualStudio.Modeling.Validation.ValidationCategories.Save, model);
                    if (vc.CurrentViolations.Count > 0)
                    {
                        if (ide != null)
                        {
                            if (ide.ShowMessageBox("There is validation errors, continue generate ?", "Generation", MessageBoxButtons.YesNo) == DialogResult.No)
                            {
                                return;
                            }
                        }
                    }

                    // Au cas ou cette passe a été forcé dans la boite de dialogue
                    if ((generationPassesSelected & GenerationPass.ElementAdded) == GenerationPass.ElementAdded)
                    {
                        if (logger != null)
                        {
                            logger.BeginStep("Code Generation for the ElementAdded event", LogType.Info);
                        }
                        s_context.GenerationPass = GenerationPass.ElementAdded;
                        using (Transaction transaction = model.Store.TransactionManager.BeginTransaction("Update metamodel"))
                        {
                            model.Component.GenerateCode(s_context);
                            transaction.Commit();
                        }
                        if (logger != null)
                        {
                            logger.EndStep();
                        }
                    }

                    // Mise à jour du méta modèle
                    if ((generationPassesSelected & GenerationPass.MetaModelUpdate) == GenerationPass.MetaModelUpdate)
                    {
                        if (logger != null)
                        {
                            logger.BeginStep("1) Meta Model Update", LogType.Info);
                        }
                        s_context.GenerationPass = GenerationPass.MetaModelUpdate;
                        using (Transaction transaction = model.Store.TransactionManager.BeginTransaction("Update metamodel"))
                        {
                            // On ne veut pas que les wizards soient appelés
                            model.Store.TransactionManager.CurrentTransaction.TopLevelTransaction.Context.ContextInfo[StrategyManager.IgnoreStrategyWizards] = true;
                            model.Component.GenerateCode(s_context);
                            if (transaction.HasPendingChanges)
                            {
                                transaction.Commit();
                            }
                        }
                        if (logger != null)
                        {
                            logger.EndStep();
                        }
                    }

                    if (logger != null)
                    {
                        logger.BeginStep("1) Check references", LogType.Info);
                    }

                    // Vérification des dépendances
                    ReferencesHelper.CheckReferences(true, vc, new ConfigurationMode(), ReferenceScope.Compilation, model);
                    if (logger != null)
                    {
                        logger.EndStep();
                    }

                    ide.DisplayProgress("Generate...", 2, 3);

                    // Génération de code
                    if ((generationPassesSelected & GenerationPass.CodeGeneration) == GenerationPass.CodeGeneration)
                    {
                        if (logger != null)
                        {
                            logger.BeginStep("2) Code Generation", LogType.Info);
                        }
                        s_context.GenerationPass = GenerationPass.CodeGeneration;
                        model.Component.GenerateCode(s_context);
                        if (logger != null)
                        {
                            logger.EndStep();
                        }
                    }
                }
                finally
                {
                    Mapper.Instance.Save();
                }

                //if (logger != null)
                //    logger.BeginStep("Generation epilogue", LogType.Debug);


                //if (logger != null)
                //    logger.EndStep();
            }
            catch (Exception ex)
            {
                if (logger != null)
                {
                    logger.WriteError("Generator", "Generator", ex);
                }
            }
            finally
            {
                // On s'assure de faire disparaitre la progress bar
                ide.DisplayProgress("", 2, 0);
                if (logger != null)
                {
                    logger.EndProcess();
                }
                if (ide != null)
                {
                    ide.ShowErrorList();
                }
            }
        }