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);
        }
Beispiel #2
0
        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);
                    }
                }
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }