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); }
/// <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); }
/// <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")); }
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); }
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")); }
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); }
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()); }
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()); }
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); }
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")); }
/// <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; }
/// <summary> /// New instance /// </summary> /// <param name="work"></param> public DevelopersController(IProgramsUnitOfWork work) { this.Work = work; }
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; }
/// <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; }
/// <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; }