public void Test_OnlyToolkitUpdateAvailable()
        {
            //ACTUALLY - CHANGE THE BEHAVIOUR AT LEAST FOR NOW
            // SEEMS THIS SCENARIO IS NOT DESIRED!
            // the challenge is whether it makes sense to update the toolkit (where there are no breaking changes) to make use of new telemetry features
            // versus
            // do not change anything in the client app unless the developer has made an update (and that seems safer)
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>());

            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("2.0.0.0", "1.2.0.0"), this.User1Guid, false, "0.9.0.0", "1.0.0.0");

            UpdateResponse result = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual(0, result.UpdatePackages.Count);
            //Assert.AreEqual("1.0.0.0", result.UpdatePackages.Single().AssemblyVersion);
            //Assert.AreEqual("Telimena.Client.zip", result.UpdatePackages.Single().FileName);
            Assert.IsNull(result.Exception);


            request.AcceptBeta = true;
            result             = sut.UpdateCheck(request).GetAwaiter().GetResult();
            Assert.AreEqual(0, result.UpdatePackages.Count);

            //Assert.AreEqual("1.2.0.0", result.UpdatePackages.Single().AssemblyVersion);
            //Assert.AreEqual("Telimena.Client.zip", result.UpdatePackages.Single().FileName);

            Assert.IsNull(result.Exception);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// New instance
 /// </summary>
 /// <param name="work"></param>
 /// <param name="fileSaver"></param>
 /// <param name="fileRetriever"></param>
 public UpdatePackagesController(IProgramsUnitOfWork work, IFileSaver fileSaver, IFileRetriever fileRetriever, IFileRemover fileRemover)
 {
     this.FileRetriever = fileRetriever;
     this.work          = work;
     this.fileSaver     = fileSaver;
     this.fileRemover   = fileRemover;
 }
        public void Test_ReleaseNotes()
        {
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>
            {
                new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_1, ReleaseNotes = null
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.4", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_2, ReleaseNotes = ""
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.5", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_3, ReleaseNotes = "Version 1.2.0,5 notes"
                }
            });

            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("2.0.0.0", "1.2.0.0")
                                                           , this.User1Guid, false, "1.0.0.0", "1.0.0.0");

            UpdateResponse result = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual("Version 1.2.0,5 notes", result.UpdatePackages[0].ReleaseNotes);
            Assert.AreEqual("", result.UpdatePackages[1].ReleaseNotes);
            Assert.AreEqual(null, result.UpdatePackages[2].ReleaseNotes);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// New instance
 /// </summary>
 /// <param name="work"></param>
 /// <param name="fileSaver"></param>
 /// <param name="fileRetriever"></param>
 public ProgramsController(IProgramsUnitOfWork work, IFileSaver fileSaver, IFileRetriever fileRetriever)
 {
     this.fileSaver       = fileSaver;
     this.fileRetriever   = fileRetriever;
     this.telemetryClient = new TelemetryClient();
     this.Work            = work;
 }
        public void Test_NonStandaloneUpdateAvailable()
        {
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>
            {
                new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.1", 2222, "1.0.0.0")
                {
                    IsStandalone = true, PublicId = this.PrgPkg_1
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.2", 2222, "1.0.0.0")
                {
                    IsStandalone = true, PublicId = this.PrgPkg_2
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_3
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.4", 2222, "1.0.0.0")
                {
                    IsStandalone = true, PublicId = this.PrgPkg_4
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.5", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_5
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.6", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_6
                }
            });

            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("2.0.0.0", "1.2.0.0"), this.User1Guid, false, "1.0.0.0", "1.0.0.0");

            UpdateResponse result = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual(3, result.UpdatePackages.Count());

            Assert.AreEqual(this.PrgPkg_6, result.UpdatePackages[0].PublicId);
            Assert.AreEqual(this.PrgPkg_5, result.UpdatePackages[1].PublicId);
            Assert.AreEqual(this.PrgPkg_4, result.UpdatePackages[2].PublicId);


            //no update here - the version 1.2 is beta, whereas 1.4 has breaking changes
            Assert.IsFalse(result.UpdatePackages.Any(x => x.FileName == "Telimena.Client.zip"));


            request.AcceptBeta = true;
            result             = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual(3, result.UpdatePackages.Count());

            Assert.AreEqual(this.PrgPkg_6, result.UpdatePackages[0].PublicId);
            Assert.AreEqual(this.PrgPkg_5, result.UpdatePackages[1].PublicId);
            Assert.AreEqual(this.PrgPkg_4, result.UpdatePackages[2].PublicId);

            //return the version that is higher than max supported, but does not introduce breaking changes
            //todo - toolkit updating temporarily disabled - update package requires toolkit presence -        Assert.IsTrue(result.UpdatePackages.Last().Version == "1.2.0.0" && result.UpdatePackages.Last().FileName == "Telimena.Client.zip");
            Assert.IsTrue(result.UpdatePackages.All(x => x.FileName != "Telimena.Client.zip"));
        }
 /// <summary>
 /// New instance
 /// </summary>
 /// <param name="work"></param>
 /// <param name="fileSaver"></param>
 /// <param name="fileRetriever"></param>
 public UpdatePackagesController(IProgramsUnitOfWork work, IFileSaver fileSaver, IFileRetriever fileRetriever, IFileRemover fileRemover, TelemetryClient telemetryClient)
 {
     this.FileRetriever   = fileRetriever;
     this.work            = work;
     this.fileSaver       = fileSaver;
     this.fileRemover     = fileRemover;
     this.telemetryClient = telemetryClient;
 }
        public void NonStandalone_NewestIsBeta_ShouldIncludeNonBetaAsWell()
        {
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>
            {
                new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.1", 2222, "1.0.0.0")
                {
                    IsStandalone = true, IsBeta = true, PublicId = this.PrgPkg_1
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.2", 2222, "1.0.0.0")
                {
                    IsStandalone = true, IsBeta = false, PublicId = this.PrgPkg_2
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = true, IsBeta = true, PublicId = this.PrgPkg_3
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.4", 2222, "1.0.0.0")
                {
                    IsStandalone = true, IsBeta = true, PublicId = this.PrgPkg_4
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.6", 2222, "1.0.0.0")
                {
                    IsStandalone = false, IsBeta = true, PublicId = this.PrgPkg_6
                }
            });

            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("2.0.0.0", "1.2.0.0"), this.User1Guid, false, "2.0.0.0", "1.0.0.0");


            //beta is not accepted, therefore should return only one package
            UpdateResponse result = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.IsNull(result.Exception);

            Assert.AreEqual(1, result.UpdatePackages.Count());
            Assert.AreEqual(this.PrgPkg_2, result.UpdatePackages[0].PublicId);
            Assert.AreEqual($"api/v1/update-packages/{this.PrgPkg_2}", result.UpdatePackages[0].DownloadUrl);

            //beta is accepted, however it should still return the info about latest 'stable' release as well
            request.AcceptBeta = true;
            result             = sut.UpdateCheck(request).GetAwaiter().GetResult();
            Assert.IsNull(result.Exception);

            Assert.AreEqual(3, result.UpdatePackages.Count());
            Assert.AreEqual(this.PrgPkg_6, result.UpdatePackages[0].PublicId);
            Assert.AreEqual($"api/v1/update-packages/{this.PrgPkg_6}", result.UpdatePackages[0].DownloadUrl);

            Assert.AreEqual(this.PrgPkg_4, result.UpdatePackages[1].PublicId);
            Assert.AreEqual($"api/v1/update-packages/{this.PrgPkg_4}", result.UpdatePackages[1].DownloadUrl);

            Assert.AreEqual(this.PrgPkg_2, result.UpdatePackages[2].PublicId);
            Assert.AreEqual($"api/v1/update-packages/{this.PrgPkg_2}", result.UpdatePackages[2].DownloadUrl);

            //no update for toolkit, because its already maxed
            Assert.IsFalse(result.UpdatePackages.Any(x => x.FileName == "Telimena.Client.zip"));
        }
        public void Test_NoUpdatesAvailable()
        {
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>());

            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("2.0.0.0", "1.2.0.0"), this.User1Guid, false, "1.4.0.0", "1.0.0.0");

            UpdateResponse result = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.IsEmpty(result.UpdatePackages);
            Assert.IsNull(result.Exception);
        }
        public void Test_OnlyNonStandaloneUpdateAvailable()
        {
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>
            {
                new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_1
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.4", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_2
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.5", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_3, ReleaseNotes = "Version 1.2.0,5 notes"
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.6", 2222, "1.6.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_4
                }
            });

            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("2.0.0.0", "1.2.0.0"), this.User1Guid, false, "1.0.0.0", "1.0.0.0");

            UpdateResponse result = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual(4, result.UpdatePackages.Count());

            Assert.AreEqual(this.PrgPkg_4, result.UpdatePackages[0].PublicId);
            Assert.AreEqual(this.PrgPkg_3, result.UpdatePackages[1].PublicId);
            Assert.AreEqual("Version 1.2.0,5 notes", result.UpdatePackages[1].ReleaseNotes);
            Assert.AreEqual(this.PrgPkg_2, result.UpdatePackages[2].PublicId);
            Assert.AreEqual(this.PrgPkg_1, result.UpdatePackages[3].PublicId);
            //one of the packages supports version 1.6, however 1.6 is beta. It is higher than 1.4 though, so 1.4 is OK
            //todo - toolkit updating temporarily disabled - update package requires toolkit presence -      Assert.AreEqual("1.4.0.0", result.UpdatePackages.Single(x => x.FileName == "Telimena.Client.zip").Version);
            Assert.IsTrue(result.UpdatePackages.All(x => x.FileName != "Telimena.Client.zip"));


            request.AcceptBeta = true;
            result             = sut.UpdateCheck(request).GetAwaiter().GetResult();
            Assert.AreEqual(4, result.UpdatePackages.Count());

            Assert.AreEqual(this.PrgPkg_4, result.UpdatePackages[0].PublicId);
            Assert.AreEqual(this.PrgPkg_3, result.UpdatePackages[1].PublicId);
            Assert.AreEqual(this.PrgPkg_2, result.UpdatePackages[2].PublicId);
            Assert.AreEqual(this.PrgPkg_1, result.UpdatePackages[3].PublicId);

            //one of the packages supports version 1.6
            //todo - toolkit updating temporarily disabled - update package requires toolkit presence - Assert.AreEqual("1.6.0.0", result.UpdatePackages.Single(x => x.FileName == "Telimena.Client.zip").Version);
            Assert.IsTrue(result.UpdatePackages.All(x => x.FileName != "Telimena.Client.zip"));
        }
Ejemplo n.º 10
0
        public void TestSimplestScenario_MultiplePackagesSameVersion()
        {
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>
            {
                new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.1", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_1
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.2", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_2
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = Guid.NewGuid()
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = Guid.NewGuid()
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = Guid.NewGuid()
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = Guid.NewGuid()
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = false, PublicId = this.PrgPkg_3
                }
            });


            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("3.0.0.0", "1.2.0.1"), this.User1Guid, false, "0.0.0.1", "1.0.0.0");

            UpdateResponse result = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual(this.PrgPkg_3, result.UpdatePackages[0].PublicId);
            Assert.AreEqual(2, result.UpdatePackages.Count);
            //todo - toolkit updating temporarily disabled - update package requires toolkit presence -   Assert.AreEqual("1.0.0.0", result.UpdatePackages.Single(x => x.FileName == "Telimena.Client.zip").Version);
            Assert.IsTrue(result.UpdatePackages.All(x => x.FileName != "Telimena.Client.zip"));


            request.AcceptBeta = true;
            result             = sut.UpdateCheck(request).GetAwaiter().GetResult();
            Assert.AreEqual(this.PrgPkg_3, result.UpdatePackages[0].PublicId);

            //todo - toolkit updating temporarily disabled - update package requires toolkit presence -  Assert.AreEqual("1.2.0.0", result.UpdatePackages.Single(x => x.FileName == "Telimena.Client.zip").Version);
        }
Ejemplo n.º 11
0
        public void Beta_OnlyBetaAvailable()
        {
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>
            {
                new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.1", 2222, "1.0.0.0")
                {
                    IsStandalone = true, IsBeta = true, PublicId = this.PrgPkg_1
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.2", 2222, "1.0.0.0")
                {
                    IsStandalone = false, IsBeta = true, PublicId = this.PrgPkg_2
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = false, IsBeta = true, PublicId = this.PrgPkg_3
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.4", 2222, "1.0.0.0")
                {
                    IsStandalone = true, IsBeta = true, PublicId = this.PrgPkg_4
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.5", 2222, "1.0.0.0")
                {
                    IsStandalone = false, IsBeta = true, PublicId = this.PrgPkg_5
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.6", 2222, "1.0.0.0")
                {
                    IsStandalone = false, IsBeta = true, PublicId = this.PrgPkg_6
                }
            });

            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("2.0.0.0", "1.2.0.0"), this.User1Guid, false, "2.0.0.0", "1.0.0.0");

            UpdateResponse result = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual(0, result.UpdatePackages.Count());
            Assert.IsNull(result.Exception);

            request.AcceptBeta = true;
            result             = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual(3, result.UpdatePackages.Count());
            Assert.AreEqual(this.PrgPkg_6, result.UpdatePackages[0].PublicId);
            Assert.AreEqual($"api/v1/update-packages/{this.PrgPkg_6}", result.UpdatePackages[0].DownloadUrl);

            Assert.AreEqual(this.PrgPkg_5, result.UpdatePackages[1].PublicId);
            Assert.AreEqual(this.PrgPkg_4, result.UpdatePackages[2].PublicId);
            //no update for toolkit, because its already maxed
            Assert.IsFalse(result.UpdatePackages.Any(x => x.FileName == "Telimena.Client.zip"));
        }
Ejemplo n.º 12
0
        public void Beta_TestSimplestScenario()
        {
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>
            {
                new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.0", 2222, "1.0.0.0")
                {
                    IsStandalone = true, PublicId = this.PrgPkg_1
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.2", 2222, "1.0.0.0")
                {
                    IsStandalone = true, PublicId = this.PrgPkg_2
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = true, IsBeta = true, PublicId = this.PrgPkg_3
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_2, "1.2.0.4", 2222, "1.0.0.0")
                {
                    IsStandalone = true, IsBeta = true, PublicId = this.PrgPkg_4
                }                                                                                                                                                //different program
            });


            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("2.0.0.0", "1.2.0.0"), this.User1Guid, false, "0.5.0.0", "1.0.0.0");

            UpdateResponse result = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual(this.PrgPkg_2, result.UpdatePackages[0].PublicId);
            Assert.AreEqual(1, result.UpdatePackages.Count);
            //return the version that is higher than max supported, but does not introduce breaking changes
            //todo - toolkit updating temporarily disabled - update package requires toolkit presence - Assert.IsTrue(result.UpdatePackages.Last().Version == "1.0.0.0" && result.UpdatePackages.Last().FileName == "Telimena.Client.zip");
            Assert.IsTrue(result.UpdatePackages.All(x => x.FileName != "Telimena.Client.zip"));

            request.AcceptBeta = true;
            result             = sut.UpdateCheck(request).GetAwaiter().GetResult();
            Assert.AreEqual(2, result.UpdatePackages.Count);

            Assert.AreEqual(this.PrgPkg_3, result.UpdatePackages[0].PublicId);
            Assert.AreEqual("api/v1/update-packages/0d9dd99e-242b-4b6c-ba24-1ded4bb9d87d", result.UpdatePackages[0].DownloadUrl);

            Assert.AreEqual(this.PrgPkg_2, result.UpdatePackages[1].PublicId); //this one should be returned as well - because the user might decide to skip the beta version


            //return the version that is higher than max supported, but does not introduce breaking changes
            //todo - toolkit updating temporarily disabled - update package requires toolkit presence -  Assert.AreEqual("1.2.0.0", result.UpdatePackages.Single(x => x.FileName == "Telimena.Client.zip"
            //                                                           && x.DownloadUrl.Contains($"api/v1/toolkit/")).Version);
        }
Ejemplo n.º 13
0
        public void BetaTest_OnlyBetaOnlyNonStandaloneUpdateAvailable()
        {
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>
            {
                new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = false, IsBeta = true, PublicId = this.PrgPkg_1
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.4", 2222, "1.0.0.0")
                {
                    IsStandalone = false, IsBeta = true, PublicId = this.PrgPkg_2
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.5", 2222, "1.0.0.0")
                {
                    IsStandalone = false, IsBeta = true, PublicId = this.PrgPkg_3
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.6", 2222, "1.0.0.0")
                {
                    IsStandalone = false, IsBeta = true, PublicId = this.PrgPkg_4
                }
            });

            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("0.0.0.0", "1.2.0.0"), this.User1Guid, false, "1.8.0.0", "1.0.0.0");
            UpdateResponse     result  = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual(0, result.UpdatePackages.Count());
            Assert.IsNull(result.Exception);

            request.AcceptBeta = true;

            result = sut.UpdateCheck(request).GetAwaiter().GetResult();
            Assert.AreEqual(4, result.UpdatePackages.Count());

            Assert.AreEqual(this.PrgPkg_4, result.UpdatePackages[0].PublicId);
            Assert.AreEqual(this.PrgPkg_3, result.UpdatePackages[1].PublicId);
            Assert.AreEqual(this.PrgPkg_2, result.UpdatePackages[2].PublicId);
            Assert.AreEqual(this.PrgPkg_1, result.UpdatePackages[3].PublicId);

            //return the version that is supported, because it does not introduce breaking changes
            //todo - toolkit updating temporarily disabled - update package requires toolkit presence Assert.AreEqual("2.0.0.0", result.UpdatePackages.Single(x => x.FileName == "Telimena.Client.zip").Version);
            Assert.IsTrue(result.UpdatePackages.All(x => x.FileName != "Telimena.Client.zip"));

            request.VersionData.FileVersion = "3.0.0.0"; //version too high
            result = sut.UpdateCheck(request).GetAwaiter().GetResult();
            Assert.AreEqual(0, result.UpdatePackages.Count());
        }
Ejemplo n.º 14
0
        public static async Task <TelimenaPackageInfo> GetToolkitUpdateInfo(IProgramsUnitOfWork unitOfWork, Program program, UpdateRequest request, string maximumSupportedToolkitVersion)
        {
            ObjectValidator.Validate(() => Version.TryParse(request.ToolkitVersion, out _)
                                     , new ArgumentException($"[{request.ToolkitVersion}] is not a valid version string"));

            List <TelimenaPackageInfo> packages = (await unitOfWork.ToolkitData.GetPackagesNewerThan(request.ToolkitVersion).ConfigureAwait(false))
                                                  .OrderByDescending(x => x.Version, new TelimenaVersionStringComparer()).ToList();

            if (!request.AcceptBeta)
            {
                packages.RemoveAll(x => x.IsBeta);
            }

            if (packages.Any(x => x.IntroducesBreakingChanges))
            {
                packages.Reverse();
                List <TelimenaPackageInfo> listOfCompatiblePackages = new List <TelimenaPackageInfo>();
                foreach (TelimenaPackageInfo package in packages)
                {
                    if (!package.IntroducesBreakingChanges)
                    {
                        listOfCompatiblePackages.Add(package);
                    }
                    else
                    {
                        if (maximumSupportedToolkitVersion.IsNewerOrEqualVersion(package.Version))
                        {
                            listOfCompatiblePackages.Add(package);
                        }
                        else //at this point a breaking package is not supported by the program, so time to break the loop - no point checking even newer ones
                        {
                            break;
                        }
                    }
                }

                return(listOfCompatiblePackages.LastOrDefault());
            }

            return(packages.FirstOrDefault());
        }
Ejemplo n.º 15
0
        public static async Task <string> GetMaximumSupportedToolkitVersion(IProgramsUnitOfWork unitOfWork, List <ProgramUpdatePackageInfo> updatePackages, Program program
                                                                            , UpdateRequest updateRequest)
        {
            string maxVersionInPackages = null;

#pragma warning disable 618
            ProgramUpdatePackageInfo newestPackage = updatePackages.OrderByDescending(x => x.Id).FirstOrDefault();
#pragma warning restore 618
            if (newestPackage != null)
            {
                maxVersionInPackages = newestPackage.SupportedToolkitVersion;
            }
            else
            {
                //no updates now, so figure out what version is supported by the client already
                var version = program.DetermineProgramVersion(updateRequest.VersionData);
                ProgramUpdatePackageInfo previousPackage =
                    await unitOfWork.UpdatePackages.FirstOrDefaultAsync(x => x.ProgramId == program.Id && x.Version == version).ConfigureAwait(false);

                if (previousPackage != null)
                {
                    maxVersionInPackages = previousPackage.SupportedToolkitVersion;
                }
                else
                {
                    var pkg = (await unitOfWork.ProgramPackages.FirstOrDefaultAsync(x => x.ProgramId == program.Id)
                               .ConfigureAwait(false));

                    maxVersionInPackages = pkg?.SupportedToolkitVersion ?? "0.0.0.0";
                }
            }

            if (updateRequest.ToolkitVersion.IsNewerOrEqualVersion(maxVersionInPackages))
            {
                return(updateRequest.ToolkitVersion);
            }

            return(maxVersionInPackages);
        }
Ejemplo n.º 16
0
        public void TestSimplestScenario_PreviousWasBeta()
        {
            IProgramsUnitOfWork unit = this.GetUnit(new List <ProgramUpdatePackageInfo>
            {
                new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.1", 2222, "1.0.0.0")
                {
                    IsStandalone = true, PublicId = this.PrgPkg_1
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.2", 2222, "1.0.0.0")
                {
                    IsStandalone = true, PublicId = this.PrgPkg_2, IsBeta = true
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_1, "1.2.0.3", 2222, "1.0.0.0")
                {
                    IsStandalone = true, PublicId = this.PrgPkg_3
                }
                , new ProgramUpdatePackageInfo("pkg.zip", this.Prg_2, "1.2.0.4", 2222, "2.0.0.0")
                {
                    IsStandalone = true, PublicId = this.PrgPkg_4
                }                                                                                                                                 //different program
            });


            ProgramsController sut     = new ProgramsController(unit, new Mock <IFileSaver>().Object, new Mock <IFileRetriever>().Object);
            UpdateRequest      request = new UpdateRequest(this.Program1Key, new VersionData("2.0.0.0", "1.2.0.0"), this.User1Guid, false, "1.0.0.0", "1.0.0.0");

            UpdateResponse result = sut.UpdateCheck(request).GetAwaiter().GetResult();

            Assert.AreEqual(this.PrgPkg_3, result.UpdatePackages.Single().PublicId);
            //one of the packages accepts a higher version, but its a package for different program, so no updater update here

            request.AcceptBeta = true;
            result             = sut.UpdateCheck(request).GetAwaiter().GetResult();
            Assert.AreEqual(this.PrgPkg_3, result.UpdatePackages[0].PublicId);

            //todo - toolkit updating temporarily disabled - update package requires toolkit presence -             Assert.AreEqual("1.2.0.0", result.UpdatePackages.Single(x => x.FileName == "Telimena.Client.zip").Version);
            Assert.IsTrue(result.UpdatePackages.All(x => x.FileName != "Telimena.Client.zip"));
        }
Ejemplo n.º 17
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RegisterProgramController"/> class.
 /// </summary>
 /// <param name="work">The work.</param>
 /// <param name="logger">The logger.</param>
 public RegisterProgramController(IProgramsUnitOfWork work, ILog logger)
 {
     this.Work   = work;
     this.logger = logger;
 }
Ejemplo n.º 18
0
 /// <summary>
 /// New instance
 /// </summary>
 /// <param name="work"></param>
 public DevelopersController(IProgramsUnitOfWork work)
 {
     this.Work = work;
 }
Ejemplo n.º 19
0
        public static async Task <IHttpActionResult> GetDownloadLatestProgramPackageResponse(IProgramsUnitOfWork unitOfWork, int programId, IFileRetriever fileRetriever)
        {
            ProgramPackageInfo packageInfo = await unitOfWork.ProgramPackages.GetLatestProgramPackageInfo(programId).ConfigureAwait(false);

            byte[] bytes = await unitOfWork.ProgramPackages.GetPackage(packageInfo.Id, fileRetriever).ConfigureAwait(false);

            HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new ByteArrayContent(bytes)
            };

            result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = packageInfo.FileName
            };
            result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

            return(new ResponseMessageResult(result));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ProgramManagementController"/> class.
 /// </summary>
 /// <param name="work">The work.</param>
 public ProgramManagementController(IProgramsUnitOfWork work, IFileRetriever fileRetriever)
 {
     this.Work          = work;
     this.fileRetriever = fileRetriever;
 }
Ejemplo n.º 21
0
 /// <summary>
 /// New instance
 /// </summary>
 /// <param name="work"></param>
 /// <param name="fileSaver"></param>
 /// <param name="fileRetriever"></param>
 public ProgramsController(IProgramsUnitOfWork work, IFileSaver fileSaver, IFileRetriever fileRetriever)
 {
     this.fileSaver     = fileSaver;
     this.fileRetriever = fileRetriever;
     this.Work          = work;
 }
Ejemplo n.º 22
0
 /// <summary>
 /// Initializes a new instance of the <see cref="HomeController"/> class.
 /// </summary>
 /// <param name="work">The work.</param>
 public HomeController(IProgramsUnitOfWork work)
 {
     this.work = work;
 }