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); } }
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); }
private void SetCopyLocalForProject() { var projects = (Array)Global.Dte.ActiveSolutionProjects; var activeProject = (Project)projects.GetValue(0); int changeCount = ReferencesHelper.SetCopyLocalFlag(activeProject); SaveProjectIfNeeded(activeProject); LogChangesToOutput(changeCount); }
/// <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); } } }
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); }
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); }
/// <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); }
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" }
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" }
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" }
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)); } }
/// <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); }
/// <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(); } } }