public InstallationVersion ReadInstallationVersionFromFile(string fileName) { var res = new InstallationVersion(); var xDoc = XDocument.Load(fileName); ReadElementType(xDoc, "CustomerSettings", res); ReadElementType(xDoc, "MainModule", res); ReadElementType(xDoc, "MiniModule", res); ReadElementType(xDoc, "Plugins", res); ReadElementType(xDoc, "MSI", res); return(res); }
private ComponentInstallationResult InstallComponent(int componentId, InstallationVersion version) { var thisComponent = version.InstallationComponents[componentId]; var nextComponent = GetNextInstallationComponent(version, componentId); try { dataAccessDispatcher.Dispatch(thisComponent.InstallationAction); dataAccessDispatcher.Dispatch(thisComponent.DataChangeAction); if (!nextComponent.HasValue || (nextComponent.HasValue && nextComponent.Value.Value.Version.CompareTo(version.Version) > 0)) { /* The next component is part of a newer version, * so at this point we update the solution to reflect that this * installation version has installed. If the solution update fails, * we should rollback and fail the current component too */ try { var solution = dataAccessDispatcher.Dispatch(SolutionActions.GetSolutionByName(CrmConstants.DefaultSolutionSettings.Name)); solution.Version = version.Version.ToString(); dataAccessDispatcher.Dispatch(SolutionActions.UpdateSolution(solution)); } catch { dataAccessDispatcher.Dispatch(thisComponent.RollbackAction); throw; } } if (nextComponent.HasValue) { var nextComponentDescription = nextComponent.Value.Value.InstallationComponents[nextComponent.Value.Key].Description; var nextComponentKey = nextComponent.Value.Key; var nextComponentVersion = nextComponent.Value.Value.Version; return(ComponentInstallationResult.Success(componentId, version.Version, nextComponentKey, nextComponentVersion, nextComponentDescription)); } else { return(ComponentInstallationResult.Success(componentId, version.Version, true)); } } catch (Exception ex) { return(ComponentInstallationResult.Fail(componentId, version.Version, ex.Message)); } }
private void ReadElementType(XDocument xDoc, String elementType, InstallationVersion installationVersion) { var el = xDoc.Descendants(elementType).FirstOrDefault(); if (el != null) { foreach (var element in el.Elements()) { var item = ItemFromXmlNode(element); if (item != null) { item._Type = elementType; installationVersion.Items.Add(item); } } } }
private KeyValuePair <int, InstallationVersion>?GetNextInstallationComponent(InstallationVersion version, int componentId) { if (version.InstallationComponents.ContainsKey(componentId + 1)) { return(new KeyValuePair <int, InstallationVersion>(componentId + 1, version)); } else { var nextVersion = GetNextVersion(version.Version); if (nextVersion != null) { return(new KeyValuePair <int, InstallationVersion>(0, nextVersion)); } } return(null); }
public async Task Installation_Create_DoesCreate() { // Arrange Random rnd = new Random(); Installation installation = new Installation { CompanyName = Guid.NewGuid().ToString(), CompanyAddress = Guid.NewGuid().ToString(), CompanyAddress2 = Guid.NewGuid().ToString(), ZipCode = Guid.NewGuid().ToString(), CityName = Guid.NewGuid().ToString(), CountryCode = Guid.NewGuid().ToString(), Type = InstallationType.Installation, State = InstallationState.NotAssigned, DateInstall = DateTime.UtcNow, DateRemove = DateTime.UtcNow, DateActRemove = DateTime.UtcNow, InstallationEmployeeId = rnd.Next(1, 255), CustomerId = rnd.Next(1, 255), InstallationSdkCaseId = rnd.Next(1, 255), UpdatedByUserId = rnd.Next(1, 255), CreatedByUserId = rnd.Next(1, 255) }; // Act await installation.Create(DbContext); // Assert Installation dbInstallation = DbContext.Installations.AsNoTracking().First(); List <Installation> installations = DbContext.Installations.AsNoTracking().ToList(); InstallationVersion dbInstallationVersion = DbContext.InstallationVersions.AsNoTracking().First(); List <InstallationVersion> installationVersions = DbContext.InstallationVersions.AsNoTracking().ToList(); Assert.NotNull(dbInstallation); Assert.NotNull(dbInstallationVersion); Assert.AreEqual(1, installations.Count); Assert.AreEqual(1, installationVersions.Count); Assert.AreEqual(installation.Id, dbInstallation.Id); Assert.AreEqual(installation.Version, dbInstallation.Version); Assert.AreEqual(installation.WorkflowState, dbInstallation.WorkflowState); Assert.AreEqual(installation.CreatedAt.ToString(), dbInstallation.CreatedAt.ToString()); Assert.AreEqual(installation.CreatedByUserId, dbInstallation.CreatedByUserId); Assert.AreEqual(installation.UpdatedAt.ToString(), dbInstallation.UpdatedAt.ToString()); Assert.AreEqual(installation.UpdatedByUserId, dbInstallation.UpdatedByUserId); Assert.AreEqual(installation.DateInstall.ToString(), dbInstallation.DateInstall.ToString()); Assert.AreEqual(installation.DateRemove.ToString(), dbInstallation.DateRemove.ToString()); Assert.AreEqual(installation.DateActRemove.ToString(), dbInstallation.DateActRemove.ToString()); Assert.AreEqual(installation.InstallationEmployeeId, dbInstallation.InstallationEmployeeId); Assert.AreEqual(installation.CustomerId, dbInstallation.CustomerId); Assert.AreEqual(installation.InstallationSdkCaseId, dbInstallation.InstallationSdkCaseId); Assert.AreEqual(installation.CompanyName, dbInstallation.CompanyName); Assert.AreEqual(installation.CompanyAddress, dbInstallation.CompanyAddress); Assert.AreEqual(installation.CompanyAddress2, dbInstallation.CompanyAddress2); Assert.AreEqual(installation.ZipCode, dbInstallation.ZipCode); Assert.AreEqual(installation.CityName, dbInstallation.CityName); Assert.AreEqual(installation.CountryCode, dbInstallation.CountryCode); Assert.AreEqual(installation.Type, dbInstallation.Type); Assert.AreEqual(installation.State, dbInstallation.State); }