public CuratedFeedTest(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _commandlineHelper = new CommandlineHelper(TestOutputHelper);
     _clientSdkHelper = new ClientSdkHelper(TestOutputHelper);
     _packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
 }
 public NugetCommandLineTests(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _clientSdkHelper = new ClientSdkHelper(testOutputHelper);
     _commandlineHelper = new CommandlineHelper(testOutputHelper);
     _packageCreationHelper = new PackageCreationHelper(testOutputHelper);
 }
        public void GetUpdates1199RegressionTest()
        {
            // Use the same package name, but force the version to be unique.
            string packageName      = "NuGetGallery.FunctionalTests.ODataTests.GetUpdates1199RegressionTest";
            string ticks            = DateTime.Now.Ticks.ToString();
            string version1         = new System.Version(ticks.Substring(0, 6) + "." + ticks.Substring(6, 6) + "." + ticks.Substring(12, 6)).ToString();
            string version2         = new System.Version(Convert.ToInt32(ticks.Substring(0, 6) + 1).ToString() + "." + ticks.Substring(6, 6) + "." + ticks.Substring(12, 6)).ToString();
            string standardOutput   = string.Empty;
            string standardError    = string.Empty;
            string package1Location = PackageCreationHelper.CreatePackageWithTargetFramework(packageName, version1, "net45");
            int    exitCode         = CmdLineHelper.UploadPackage(package1Location, UrlHelper.V2FeedPushSourceUrl, out standardOutput, out standardError);

            Assert.IsTrue((exitCode == 0), "The package upload via Nuget.exe didnt suceed properly. Check the logs to see the process error and output stream.  Exit Code: " + exitCode + ". Error message: \"" + standardError + "\"");
            string package2Location = PackageCreationHelper.CreatePackageWithTargetFramework(packageName, version2, "net40");

            exitCode = CmdLineHelper.UploadPackage(package2Location, UrlHelper.V2FeedPushSourceUrl, out standardOutput, out standardError);
            Assert.IsTrue((exitCode == 0), "The package upload via Nuget.exe didnt suceed properly. Check the logs to see the process error and output stream.  Exit Code: " + exitCode + ". Error message: \"" + standardError + "\"");

            WebRequest request = WebRequest.Create(UrlHelper.V2FeedRootUrl + @"/GetUpdates()?packageIds='NuGetGallery.FunctionalTests.ODataTests.GetUpdates1199RegressionTest%7COwin%7CMicrosoft.Web.Infrastructure%7CMicrosoft.AspNet.Identity.Core%7CMicrosoft.AspNet.Identity.EntityFramework%7CMicrosoft.AspNet.Identity.Owin%7CMicrosoft.AspNet.Web.Optimization%7CRespond%7CWebGrease%7CjQuery%7CjQuery.Validation%7CMicrosoft.Owin.Security.Twitter%7CMicrosoft.Owin.Security.OAuth%7CMicrosoft.Owin.Security.MicrosoftAccount%7CMicrosoft.Owin.Security.Google%7CMicrosoft.Owin.Security.Facebook%7CMicrosoft.Owin.Security.Cookies%7CMicrosoft.Owin%7CMicrosoft.Owin.Host.SystemWeb%7CMicrosoft.Owin.Security%7CModernizr%7CMicrosoft.jQuery.Unobtrusive.Validation%7CMicrosoft.AspNet.WebPages%7CMicrosoft.AspNet.Razor%7Cbootstrap%7CAntlr%7CMicrosoft.AspNet.Mvc%7CNewtonsoft.Json%7CEntityFramework'&versions='" + version1 + "%7C1.0%7C1.0.0.0%7C1.0.0%7C1.0.0%7C1.0.0%7C1.1.1%7C1.2.0%7C1.5.2%7C1.10.2%7C1.11.1%7C2.0.0%7C2.0.0%7C2.0.0%7C2.0.0%7C2.0.0%7C2.0.0%7C2.0.0%7C2.0.0%7C2.0.0%7C2.6.2%7C3.0.0%7C3.0.0%7C3.0.0%7C3.0.0%7C3.4.1.9004%7C5.0.0%7C5.0.6%7C6.0.0'&includePrerelease=false&includeAllVersions=false&targetFrameworks='net45'&versionConstraints='%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C'");
            // Get the response.
            WebResponse  response     = request.GetResponse();
            StreamReader sr           = new StreamReader(response.GetResponseStream());
            string       responseText = sr.ReadToEnd();

            // Verify at least one package is in the output.
            Assert.IsTrue(responseText.Contains(@"<title type=""text"">NuGetGallery.FunctionalTests.ODataTests.GetUpdates1199RegressionTest</title>"));
            Assert.IsTrue(responseText.Contains(@"<d:Version>" + version2 + "</d:Version><d:NormalizedVersion>" + version2 + "</d:NormalizedVersion>"));
        }
Example #4
0
        public void _1826Regression()
        {
            string packageName = "NuGetGallery.FunctionalTests.Fluent._1826RegressionTest";
            string ticks       = DateTime.Now.Ticks.ToString();
            string version     = new System.Version(ticks.Substring(0, 6) + "." + ticks.Substring(6, 6) + "." + ticks.Substring(12, 6)).ToString();

            string newPackageLocation = PackageCreationHelper.CreatePackage(packageName, version, null, null, null, null, null, @"
                <group>
                    <dependency id=""jQuery"" version=""2.1.0"" />
                </group>
                <group targetFramework="".NETFramework4.0"">
                    <dependency id=""Newtonsoft.Json"" version=""6.0.1"" />
                    <dependency id=""jQuery"" version=""2.1.0"" />
                </group>
            ");

            // Log on using the test account.
            I.LogOn(EnvironmentSettings.TestAccountName, EnvironmentSettings.TestAccountPassword);

            // Navigate to the upload page and upload the package.
            I.UploadPackageUsingUI(newPackageLocation);
            I.Click("input[value='Submit']");

            // Validate that the package has uploaded.
            I.Expect.Url(UrlHelper.BaseUrl + @"packages/" + packageName + "/" + version);
            I.Expect.Count(1).Of("h4:contains('All Frameworks')");
            I.Expect.Count(1).Of("h4:contains('.NETFramework 4.0')");
        }
        public override IEnumerator <WebTestRequest> GetRequestEnumerator()
        {
            var defaultExtractionRule = AssertAndValidationHelper.GetDefaultExtractHiddenFields();

            // Do initial login
            var logonGet = AssertAndValidationHelper.GetLogonGetRequest();

            yield return(logonGet);

            var logonPost = AssertAndValidationHelper.GetLogonPostRequest(this);

            yield return(logonPost);

            var uploadRequest = AssertAndValidationHelper.GetHttpRequestForUrl(UrlHelper.UploadPageUrl);

            yield return(uploadRequest);

            var packageId             = $"UploadPackageFromUI.{DateTimeOffset.UtcNow.Ticks}";
            var packageCreationHelper = new PackageCreationHelper();
            var packageFullPath       = packageCreationHelper.CreatePackage(packageId).Result;
            var uploadPostRequest     = AssertAndValidationHelper.GetUploadPostRequestForPackage(this, packageFullPath);

            yield return(uploadPostRequest);

            //This second get request to upload is to put us on the new "Verify Page"
            // which is just the upload page in a different state.
            // This is to get the RequestVerificationToken for the folloing request. (upload and verify were merged onto the same page).
            var uploadRequest2 = AssertAndValidationHelper.GetHttpRequestForUrl(UrlHelper.UploadPageUrl);

            yield return(uploadRequest2);

            var verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0", UrlHelper.GetPackagePageUrl(packageId, "1.0.0"), packageId);

            yield return(verifyUploadPostRequest);
        }
Example #6
0
        public async Task LockedPackageCannotBeModified()
        {
            // Arrange
            string version = "2.0.0";

            var packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
            var location = await packageCreationHelper.CreatePackage(LockedPackageId, version);

            // Act & Assert
            // 1. Try to upload package
            TestOutputHelper.WriteLine($"1. Trying to upload package '{LockedPackageId}', version '{version}' to locked package id.");
            var processResult = await _commandlineHelper.UploadPackageAsync(location, UrlHelper.V2FeedPushSourceUrl);

            Assert.True(processResult.ExitCode != 0, "Package push succeeded, although was expected to fail.");
            Assert.Contains("locked", processResult.StandardError);

            // 2. Try unlisting the locked package
            // Perform a sanity check that the package exists
            await _clientSdkHelper.VerifyPackageExistsInV2Async(LockedPackageId, LockedPackageVersion);

            TestOutputHelper.WriteLine($"5. Trying to unlist locked package '{LockedPackageId}', version '{LockedPackageVersion}'.");
            processResult = await _commandlineHelper.DeletePackageAsync(LockedPackageId, LockedPackageVersion, UrlHelper.V2FeedPushSourceUrl);

            Assert.True(processResult.ExitCode != 0, "Package delete succeeded, although was expected to fail.");
            Assert.Contains("locked", processResult.StandardError);
        }
 public CuratedFeedTest(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _commandlineHelper     = new CommandlineHelper(TestOutputHelper);
     _clientSdkHelper       = new ClientSdkHelper(TestOutputHelper);
     _packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
 }
Example #8
0
 public NugetCommandLineTests(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _clientSdkHelper       = new ClientSdkHelper(testOutputHelper);
     _commandlineHelper     = new CommandlineHelper(testOutputHelper);
     _packageCreationHelper = new PackageCreationHelper(testOutputHelper);
 }
Example #9
0
        public async Task ScopedApiKeysCanOnlyPushAndUnlistWithCorrectScopes()
        {
            // Arrange
            var packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
            var commandlineHelper     = new CommandlineHelper(TestOutputHelper);

            // Try to upload package using 'unlist' API key
            await _clientSdkHelper.FailToUploadPackage(GalleryConfiguration.Instance.Account.ApiKeyUnlist);

            // Try to upload package using 'push version' API key
            await _clientSdkHelper.FailToUploadPackage(GalleryConfiguration.Instance.Account.ApiKeyPushVersion);

            // Upload package using 'push' API key
            await _clientSdkHelper.UploadPackage(GalleryConfiguration.Instance.Account.ApiKeyPush);

            // Try to upload new version of package using 'unlist' API key
            await _clientSdkHelper.FailToUploadPackageVersion(GalleryConfiguration.Instance.Account.ApiKeyUnlist);

            // Upload new version of package using 'push version' API key
            await _clientSdkHelper.UploadPackageVersion(GalleryConfiguration.Instance.Account.ApiKeyPushVersion);

            // Try unlisting package version1 using 'push' API key
            await _clientSdkHelper.FailToUnlistPackage(GalleryConfiguration.Instance.Account.ApiKeyPush);

            // Try unlisting package version2 using 'push version' API key
            await _clientSdkHelper.FailToUnlistPackage(GalleryConfiguration.Instance.Account.ApiKeyPushVersion);

            // Unlist a package using 'unlist' API key
            await _clientSdkHelper.UnlistPackage(GalleryConfiguration.Instance.Account.ApiKeyUnlist);
        }
Example #10
0
 public V2FeedExtendedTests(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _clientSdkHelper       = new ClientSdkHelper(TestOutputHelper);
     _commandlineHelper     = new CommandlineHelper(TestOutputHelper);
     _odataHelper           = new ODataHelper(TestOutputHelper);
     _packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
 }
 public V2FeedExtendedTests(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _clientSdkHelper = new ClientSdkHelper(TestOutputHelper);
     _commandlineHelper = new CommandlineHelper(TestOutputHelper);
     _odataHelper = new ODataHelper(TestOutputHelper);
     _packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
 }
Example #12
0
        public async Task DuplicatePushesAreRejectedAndNotDeleted()
        {
            // Arrange
            using (var client = new HttpClient())
            {
                var packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
                var packageId             = $"{nameof(DuplicatePushesAreRejectedAndNotDeleted)}.{DateTime.UtcNow.Ticks}";

                for (var i = 0; i < 10; i++)
                {
                    if (i > 0)
                    {
                        TestOutputHelper.WriteLine(string.Empty);
                        TestOutputHelper.WriteLine(new string('=', 80));
                        TestOutputHelper.WriteLine(string.Empty);
                    }

                    var packageVersion = $"1.0.{i}";
                    TestOutputHelper.WriteLine($"Starting package {packageId} {packageVersion}...");

                    var packagePath = await packageCreationHelper.CreatePackage(packageId, packageVersion);

                    var tasks   = new List <Task <HttpStatusCode> >();
                    var barrier = new Barrier(TaskCount);

                    // Act
                    for (var taskIndex = 0; taskIndex < TaskCount; taskIndex++)
                    {
                        tasks.Add(PushAsync(client, packagePath, barrier));
                    }

                    var statusCodes = await Task.WhenAll(tasks);

                    // Assert
                    for (var taskIndex = 1; taskIndex <= statusCodes.Length; taskIndex++)
                    {
                        TestOutputHelper.WriteLine($"Task {taskIndex:D2} push:     HTTP {(int)statusCodes[taskIndex - 1]}");
                    }

                    var downloadUrl = $"{UrlHelper.V2FeedRootUrl}package/{packageId}/{packageVersion}";
                    using (var response = await client.GetAsync(downloadUrl))
                    {
                        TestOutputHelper.WriteLine($"Package download: HTTP {(int)response.StatusCode}");

                        Assert.Equal(response.StatusCode, HttpStatusCode.OK);
                        var expectedBytes      = File.ReadAllBytes(packagePath);
                        var actualPackageBytes = await response.Content.ReadAsByteArrayAsync();

                        // The file length assertion is easier to read in the log.
                        Assert.Equal(expectedBytes.Length, actualPackageBytes.Length);
                        Assert.Equal(expectedBytes, actualPackageBytes);
                    }

                    Assert.Equal(1, statusCodes.Count(x => x == HttpStatusCode.Created));
                    Assert.Equal(TaskCount - 1, statusCodes.Count(x => x == HttpStatusCode.Conflict));
                }
            }
        }
Example #13
0
        public override IEnumerator <WebTestRequest> GetRequestEnumerator()
        {
            ExtractHiddenFields defaultExtractionRule = AssertAndValidationHelper.GetDefaultExtractHiddenFields();

            //Do initial login
            WebTestRequest logonGet = AssertAndValidationHelper.GetLogonGetRequest();

            yield return(logonGet);

            logonGet = null;

            WebTestRequest logonPost = AssertAndValidationHelper.GetLogonPostRequest(this);

            yield return(logonPost);

            logonPost = null;

            WebTestRequest uploadRequest = AssertAndValidationHelper.GetHttpRequestForUrl(UrlHelper.UploadPageUrl);

            yield return(uploadRequest);

            if (this.LastResponse.ResponseUri.ToString().Contains("verify-upload"))
            {
                WebTestRequest cancelGet = AssertAndValidationHelper.GetCancelGetRequest();
                yield return(cancelGet);

                cancelGet     = null;
                uploadRequest = AssertAndValidationHelper.GetHttpRequestForUrl(UrlHelper.UploadPageUrl);
                yield return(uploadRequest);
            }
            uploadRequest = null;

            //Upload a new package.
            string packageId        = this.Name + DateTime.Now.Ticks.ToString();
            string version          = "1.0.0";
            string minClientVersion = "2.3";
            string packageFullPath  = PackageCreationHelper.CreatePackage(packageId, version, minClientVersion);

            WebTestRequest uploadPostRequest = AssertAndValidationHelper.GetUploadPostRequestForPackage(this, packageFullPath);

            yield return(uploadPostRequest);

            uploadPostRequest = null;

            WebTestRequest verifyUploadRequest = new WebTestRequest(UrlHelper.VerifyUploadPageUrl);

            verifyUploadRequest.ExtractValues += new EventHandler <ExtractionEventArgs>(defaultExtractionRule.Extract);
            yield return(verifyUploadRequest);

            verifyUploadRequest = null;

            WebTestRequest verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0", UrlHelper.GetPackagePageUrl(packageId, "1.0.0"), packageId);

            yield return(verifyUploadPostRequest);

            verifyUploadPostRequest = null;
        }
Example #14
0
        private async Task PushDuplicates(string packageId, string packageVersion, bool isFirstTask)
        {
            using (var client = new HttpClient())
            {
                var packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
                if (!isFirstTask)
                {
                    TestOutputHelper.WriteLine(string.Empty);
                    TestOutputHelper.WriteLine(new string('=', 80));
                    TestOutputHelper.WriteLine(string.Empty);
                }

                TestOutputHelper.WriteLine($"Starting package {packageId} {packageVersion}...");

                var packagePath = await packageCreationHelper.CreatePackage(packageId, packageVersion);

                var tasks   = new List <Task <HttpStatusCode> >();
                var barrier = new Barrier(TaskCount);

                // Act
                for (var taskIndex = 0; taskIndex < TaskCount; taskIndex++)
                {
                    tasks.Add(PushAsync(client, packagePath, barrier));
                }

                var statusCodes = await Task.WhenAll(tasks);

                // Assert
                for (var taskIndex = 1; taskIndex <= statusCodes.Length; taskIndex++)
                {
                    TestOutputHelper.WriteLine($"{packageId}/{packageVersion} Task {taskIndex:D2} push:     HTTP {(int)statusCodes[taskIndex - 1]}");
                }

                //Wait for the packages to be available in V2(due to async validation)
                await _clientSdkHelper.VerifyPackageExistsInV2Async(packageId, packageVersion);

                var downloadUrl = $"{UrlHelper.V2FeedRootUrl}package/{packageId}/{packageVersion}";
                using (var response = await client.GetAsync(downloadUrl))
                {
                    TestOutputHelper.WriteLine($"Package {packageId}/{packageVersion}  download: HTTP {(int)response.StatusCode}");

                    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

                    var actualPackageBytes = await response.Content.ReadAsByteArrayAsync();

                    using (var stream = new MemoryStream(actualPackageBytes))
                        using (var packageReader = new PackageArchiveReader(stream))
                        {
                            Assert.Equal(packageId, packageReader.NuspecReader.GetId());
                            Assert.Equal(packageVersion, packageReader.NuspecReader.GetVersion().ToNormalizedString());
                        }
                }

                Assert.Equal(1, statusCodes.Count(x => x == HttpStatusCode.Created));
                Assert.Equal(TaskCount - 1, statusCodes.Count(x => x == HttpStatusCode.Conflict));
            }
        }
        public override IEnumerator <WebTestRequest> GetRequestEnumerator()
        {
            //run this test only if read-only mode is set. This is to avoid false failures while doing Run all tests locally.
            if (!EnvironmentSettings.ReadOnlyMode.Equals("True", StringComparison.OrdinalIgnoreCase))
            {
                yield break;
            }

            var defaultExtractionRule = AssertAndValidationHelper.GetDefaultExtractHiddenFields();

            // Do initial login
            var logonGet = AssertAndValidationHelper.GetLogonGetRequest();

            yield return(logonGet);

            var logonPost = AssertAndValidationHelper.GetLogonPostRequest(this);

            yield return(logonPost);

            var uploadRequest = AssertAndValidationHelper.GetHttpRequestForUrl(UrlHelper.UploadPageUrl);

            yield return(uploadRequest);

            if (LastResponse.ResponseUri.ToString().Contains("verify-upload"))
            {
                // if there is a upload in progress, try to submit that upload instead of creating a new package (since we are just going to verify that upload doesn't go through).
                //Extract the package Id of the pending upload.
                var response   = LastResponse.BodyString;
                var startIndex = response.IndexOf("<p>", StringComparison.Ordinal);
                var endIndex   = response.IndexOf("</p>", startIndex, StringComparison.Ordinal);
                var packageId  = response.Substring(startIndex + 3, endIndex - (startIndex + 3));
                AddCommentToResult(packageId);   //Adding the package ID to result for debugging.
                var verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0", UrlHelper.VerifyUploadPageUrl, Constants.ReadOnlyModeError, 503);
                yield return(verifyUploadPostRequest);
            }
            else
            {
                // The API key is part of the nuget.config file that is present under the solution dir.
                var packageId             = DateTime.Now.Ticks.ToString();
                var packageCreationHelper = new PackageCreationHelper();
                var packageFullPath       = packageCreationHelper.CreatePackage(packageId).Result;

                var uploadPostRequest = AssertAndValidationHelper.GetUploadPostRequestForPackage(this, packageFullPath);
                yield return(uploadPostRequest);

                var verifyUploadRequest = new WebTestRequest(UrlHelper.VerifyUploadPageUrl);
                verifyUploadRequest.ExtractValues += defaultExtractionRule.Extract;
                yield return(verifyUploadRequest);

                var verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0", UrlHelper.VerifyUploadPageUrl, Constants.ReadOnlyModeError, 503);
                yield return(verifyUploadPostRequest);
            }
        }
        public void AddPackageToWindows8CuratedFeed()
        {
            string packageId       = testContextInstance.TestName + DateTime.Now.Ticks.ToString();
            string packageFullPath = PackageCreationHelper.CreateWindows8CuratedPackage(packageId);
            int    exitCode        = CmdLineHelper.UploadPackage(packageFullPath, UrlHelper.V2FeedPushSourceUrl);

            Assert.IsTrue((exitCode == 0), "The package upload via Nuget.exe didnt suceed properly. Check the logs to see the process error and output stream");
            //check if the package is present in windows 8 feed.
            //TBD : Need to check the exact the url for curated feed.
            System.Threading.Thread.Sleep(60000);
            Assert.IsTrue(ClientSDKHelper.CheckIfPackageExistsInSource(packageId, UrlHelper.Windows8CuratedFeedUrl), "Package {0} is not found in the site {1} after uploading.", packageId, UrlHelper.Windows8CuratedFeedUrl);
        }
Example #17
0
        public override IEnumerator <WebTestRequest> GetRequestEnumerator()
        {
            // Temporary workaround for the SSL issue, which keeps the upload test from working with cloudapp.net sites
            if (!UrlHelper.BaseUrl.Contains("nugettest.org") && !UrlHelper.BaseUrl.Contains("nuget.org"))
            {
                yield break;
            }

            var defaultExtractionRule = AssertAndValidationHelper.GetDefaultExtractHiddenFields();

            // Do initial login
            var logonGet = AssertAndValidationHelper.GetLogonGetRequest();

            yield return(logonGet);

            var logonPost = AssertAndValidationHelper.GetLogonPostRequest(this);

            yield return(logonPost);

            var uploadRequest = AssertAndValidationHelper.GetHttpRequestForUrl(UrlHelper.UploadPageUrl);

            yield return(uploadRequest);

            if (LastResponse.ResponseUri.ToString().Contains("verify-upload"))
            {
                // If there is a upload in progress, try to submit that upload instead of creating a new package (since we are just going to verify that upload goes through UI).
                // Extract the package Id of the pending upload.
                var response   = LastResponse.BodyString;
                var startIndex = response.IndexOf("<p>", StringComparison.Ordinal);
                var endIndex   = response.IndexOf("</p>", startIndex, StringComparison.Ordinal);
                var packageId  = response.Substring(startIndex + 3, endIndex - (startIndex + 3));
                AddCommentToResult(packageId);   //Adding the package ID to result for debugging.
                var verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0", UrlHelper.VerifyUploadPageUrl, Constants.ReadOnlyModeError, 503);
                yield return(verifyUploadPostRequest);
            }
            else
            {
                // The API key is part of the nuget.config file that is present under the solution dir.
                var packageId             = DateTime.Now.Ticks.ToString();
                var packageCreationHelper = new PackageCreationHelper();
                var packageFullPath       = packageCreationHelper.CreatePackage(packageId).Result;

                var uploadPostRequest = AssertAndValidationHelper.GetUploadPostRequestForPackage(this, packageFullPath);
                yield return(uploadPostRequest);

                var verifyUploadRequest = new WebTestRequest(UrlHelper.VerifyUploadPageUrl);
                verifyUploadRequest.ExtractValues += defaultExtractionRule.Extract;
                yield return(verifyUploadRequest);

                var verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0", UrlHelper.GetPackagePageUrl(packageId, "1.0.0"), packageId);
                yield return(verifyUploadPostRequest);
            }
        }
        public override IEnumerator<WebTestRequest> GetRequestEnumerator()
        {
            //run this test only if read-only mode is set. This is to avoid false failures while doing Run all tests locally.
            if (!EnvironmentSettings.ReadOnlyMode.Equals("True", StringComparison.OrdinalIgnoreCase))
            {
                yield break;
            }

            var defaultExtractionRule = AssertAndValidationHelper.GetDefaultExtractHiddenFields();

            // Do initial login
            var logonGet = AssertAndValidationHelper.GetLogonGetRequest();
            yield return logonGet;

            var logonPost = AssertAndValidationHelper.GetLogonPostRequest(this);
            yield return logonPost;

            var uploadRequest = AssertAndValidationHelper.GetHttpRequestForUrl(UrlHelper.UploadPageUrl);
            yield return uploadRequest;

            if (LastResponse.ResponseUri.ToString().Contains("verify-upload"))
            {
                // if there is a upload in progress, try to submit that upload instead of creating a new package (since we are just going to verify that upload doesn't go through).
                //Extract the package Id of the pending upload.
                var response = LastResponse.BodyString;
                var startIndex = response.IndexOf("<p>", StringComparison.Ordinal);
                var endIndex = response.IndexOf("</p>", startIndex, StringComparison.Ordinal);
                var packageId = response.Substring(startIndex + 3, endIndex - (startIndex + 3));
                AddCommentToResult(packageId);   //Adding the package ID to result for debugging.
                var verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0", UrlHelper.VerifyUploadPageUrl, Constants.ReadOnlyModeError, 503);
                yield return verifyUploadPostRequest;
            }
            else
            {
                // The API key is part of the nuget.config file that is present under the solution dir.
                var packageId = DateTime.Now.Ticks.ToString();
                var packageCreationHelper = new PackageCreationHelper();
                var packageFullPath = packageCreationHelper.CreatePackage(packageId).Result;

                var uploadPostRequest = AssertAndValidationHelper.GetUploadPostRequestForPackage(this, packageFullPath);
                yield return uploadPostRequest;

                var verifyUploadRequest = new WebTestRequest(UrlHelper.VerifyUploadPageUrl);
                verifyUploadRequest.ExtractValues += defaultExtractionRule.Extract;
                yield return verifyUploadRequest;

                var verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0", UrlHelper.VerifyUploadPageUrl, Constants.ReadOnlyModeError, 503);
                yield return verifyUploadPostRequest;
            }
        }
Example #19
0
        public override IEnumerator <WebTestRequest> GetRequestEnumerator()
        {
            ExtractHiddenFields defaultExtractionRule = AssertAndValidationHelper.GetDefaultExtractHiddenFields();

            //Do initial login
            WebTestRequest logonGet = AssertAndValidationHelper.GetLogonGetRequest();

            yield return(logonGet);

            logonGet = null;

            WebTestRequest logonPost = AssertAndValidationHelper.GetLogonPostRequest(this);

            yield return(logonPost);

            logonPost = null;

            WebTestRequest uploadRequest = AssertAndValidationHelper.GetHttpRequestForUrl(UrlHelper.UploadPageUrl);

            yield return(uploadRequest);

            uploadRequest = null;

            //Upload a new package.
            string packageId        = this.Name + DateTime.Now.Ticks.ToString();
            string version          = "1.0.0";
            string minClientVersion = "2.3";
            string packageFullPath  = PackageCreationHelper.CreatePackage(packageId, version, minClientVersion);

            //Do initial login to be able to perform package management.
            logonGet = AssertAndValidationHelper.GetLogonGetRequest();
            yield return(logonGet);

            logonGet  = null;
            logonPost = AssertAndValidationHelper.GetLogonPostRequest(this);
            yield return(logonPost);

            logonPost = null;

            System.Threading.Thread.Sleep(60000);
            WebTestRequest packageRequest = new WebTestRequest(UrlHelper.GetPackagePageUrl(packageId));
            //Rule to check manage my packages contains a html link to the newly uploaded package.
            ValidationRuleFindText requiredMinVersionValidationRule = AssertAndValidationHelper.GetValidationRuleForFindText(minClientVersion);

            packageRequest.ValidateResponse += new EventHandler <ValidationEventArgs>(requiredMinVersionValidationRule.Validate);
            yield return(packageRequest);

            packageRequest = null;
        }
Example #20
0
        public override IEnumerator<WebTestRequest> GetRequestEnumerator()
        {
            ExtractHiddenFields defaultExtractionRule = AssertAndValidationHelper.GetDefaultExtractHiddenFields();

            //Do initial login
            WebTestRequest logonGet = AssertAndValidationHelper.GetLogonGetRequest();
            yield return logonGet;
            logonGet = null;

            WebTestRequest logonPost = AssertAndValidationHelper.GetLogonPostRequest(this);
            yield return logonPost;
            logonPost = null;

            WebTestRequest uploadRequest = AssertAndValidationHelper.GetHttpRequestForUrl(UrlHelper.UploadPageUrl);
            yield return uploadRequest;
            uploadRequest = null;

            string packageId = DateTime.Now.Ticks.ToString();
            string packageFullPath = PackageCreationHelper.CreatePackage(packageId);

            WebTestRequest uploadPostRequest = AssertAndValidationHelper.GetUploadPostRequestForPackage(this, packageFullPath);
            yield return uploadPostRequest;
            uploadPostRequest = null;

            WebTestRequest verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0");
            yield return verifyUploadPostRequest;
            verifyUploadPostRequest = null; 

            System.Threading.Thread.Sleep(60000);
            WebTestRequest packageRequest = new WebTestRequest(UrlHelper.GetPackagePageUrl(packageId));    
            ValidationRuleFindText findTextRule = AssertAndValidationHelper.GetValidationRuleForFindText("Contact Us");
            packageRequest.ValidateResponse += new EventHandler<ValidationEventArgs>(findTextRule.Validate);
            yield return packageRequest;
            packageRequest = null;

            // Log off
            WebTestRequest logOffGet = AssertAndValidationHelper.GetLogOffGetRequest();
            yield return logOffGet;
            logOffGet = null;

            packageRequest = new WebTestRequest(UrlHelper.GetPackagePageUrl(packageId));
            //Rule to check manage my packages contains a html link to the newly uploaded package.     
            ValidationRuleFindText reportAbuseValidationRule = AssertAndValidationHelper.GetValidationRuleForFindText("Report Abuse");
            packageRequest.ValidateResponse += new EventHandler<ValidationEventArgs>(reportAbuseValidationRule.Validate);
            yield return packageRequest;
            packageRequest = null;   

        }
        public override IEnumerator<WebTestRequest> GetRequestEnumerator()
        {
            // Temporary workaround for the SSL issue, which keeps the upload test from working with cloudapp.net sites
            if (!UrlHelper.BaseUrl.Contains("nugettest.org") && !UrlHelper.BaseUrl.Contains("nuget.org"))
                yield break;

            var defaultExtractionRule = AssertAndValidationHelper.GetDefaultExtractHiddenFields();

            // Do initial login
            var logonGet = AssertAndValidationHelper.GetLogonGetRequest();
            yield return logonGet;

            var logonPost = AssertAndValidationHelper.GetLogonPostRequest(this);
            yield return logonPost;

            var uploadRequest = AssertAndValidationHelper.GetHttpRequestForUrl(UrlHelper.UploadPageUrl);
            yield return uploadRequest;

            if (LastResponse.ResponseUri.ToString().Contains("verify-upload"))
            {
                // If there is a upload in progress, try to submit that upload instead of creating a new package (since we are just going to verify that upload goes through UI).
                // Extract the package Id of the pending upload.
                var response = LastResponse.BodyString;
                var startIndex = response.IndexOf("<p>", StringComparison.Ordinal);
                var endIndex = response.IndexOf("</p>", startIndex, StringComparison.Ordinal);
                var packageId = response.Substring(startIndex + 3, endIndex - (startIndex + 3));
                AddCommentToResult(packageId);   //Adding the package ID to result for debugging.
                var verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0", UrlHelper.VerifyUploadPageUrl, Constants.ReadOnlyModeError, 503);
                yield return verifyUploadPostRequest;
            }
            else
            {
                // The API key is part of the nuget.config file that is present under the solution dir.
                var packageId = DateTime.Now.Ticks.ToString();
                var packageCreationHelper = new PackageCreationHelper();
                var packageFullPath = packageCreationHelper.CreatePackage(packageId).Result;

                var uploadPostRequest = AssertAndValidationHelper.GetUploadPostRequestForPackage(this, packageFullPath);
                yield return uploadPostRequest;

                var verifyUploadRequest = new WebTestRequest(UrlHelper.VerifyUploadPageUrl);
                verifyUploadRequest.ExtractValues += defaultExtractionRule.Extract;
                yield return verifyUploadRequest;

                var verifyUploadPostRequest = AssertAndValidationHelper.GetVerifyPackagePostRequestForPackage(this, packageId, "1.0.0", UrlHelper.GetPackagePageUrl(packageId, "1.0.0"), packageId);
                yield return verifyUploadPostRequest;
            }
        }
Example #22
0
        public async Task ScopedApiKeysCanOnlyPushAndUnlistWithCorrectScopes()
        {
            // Arrange
            var packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
            var commandlineHelper     = new CommandlineHelper(TestOutputHelper);

            var packageId = UploadHelper.GetUniquePackageId(nameof(ScopedApiKeysCanOnlyPushAndUnlistWithCorrectScopes));
            var version1  = "1.0.0";
            var version2  = "2.0.0";

            // 1. Try to upload package using 'unlist' api key => expect failure
            TestOutputHelper.WriteLine($"1. Trying to upload package '{packageId}', version '{version1}' using 'unlist' API key. Expected result: failure.");
            await _clientSdkHelper.UploadNewPackage(packageId, version1, apiKey : EnvironmentSettings.TestAccountApiKey_Unlist, success : false);

            // 2. Try to upload package using 'push version' api key => expect failure
            TestOutputHelper.WriteLine($"2. Trying to upload package '{packageId}', version '{version1}' using 'push version' API key. Expected result: failure.");
            await _clientSdkHelper.UploadNewPackage(packageId, version1, apiKey : EnvironmentSettings.TestAccountApiKey_PushVersion, success : false);

            // 3. Upload package using 'push' api key => expect success
            TestOutputHelper.WriteLine($"3. Trying to upload package '{packageId}', version '{version1}' using 'push' API key. Expected result: success.");
            await _clientSdkHelper.UploadNewPackage(packageId, version1, apiKey : EnvironmentSettings.TestAccountApiKey_Push);

            // 4. Upload new version of package using 'push version' api key => expect success
            TestOutputHelper.WriteLine($"4. Trying to upload package '{packageId}', version '{version2}' using 'push version' API key. Expected result: success.");
            await _clientSdkHelper.UploadNewPackage(packageId, version2, apiKey : EnvironmentSettings.TestAccountApiKey_PushVersion);

            // Verify the existence of the two pushed packages.
            await _clientSdkHelper.VerifyPackageExistsInV2Async(packageId, version1);

            await _clientSdkHelper.VerifyPackageExistsInV2Async(packageId, version2);

            // 5. Try unlisting package version1 using 'push' api key => expect failure
            TestOutputHelper.WriteLine($"5. Trying to unlist package '{packageId}', version '{version1}' using 'push' API key. Expected result: failure.");
            await _clientSdkHelper.UnlistPackage(packageId, version1, EnvironmentSettings.TestAccountApiKey_Push, success : false);

            // 6. Try unlisting package version2 using 'push version' api key => expect failure
            TestOutputHelper.WriteLine($"6. Trying to unlist package '{packageId}', version '{version2}' using 'push' API key. Expected result: failure.");
            await _clientSdkHelper.UnlistPackage(packageId, version2, EnvironmentSettings.TestAccountApiKey_PushVersion, success : false);

            // 7. Unlist both packages using 'unlist' api key => expect succees
            TestOutputHelper.WriteLine($"7. Trying to unlist package '{packageId}', version '{version1}' using 'unlist' API key. Expected result: success.");
            await _clientSdkHelper.UnlistPackage(packageId, version1, EnvironmentSettings.TestAccountApiKey_Unlist);

            TestOutputHelper.WriteLine($"8. Trying to unlist package '{packageId}', version '{version2}' using 'unlist' API key. Expected result: success.");
            await _clientSdkHelper.UnlistPackage(packageId, version2, EnvironmentSettings.TestAccountApiKey_Unlist);
        }
Example #23
0
        public int UploadPackageToCuratedFeed(string packageName, string version, FeedType feedType)
        {
            string packageFullPath = string.Empty;

            switch (feedType)
            {
            case FeedType.Windows8CuratedFeed:
                packageFullPath = PackageCreationHelper.CreateWindows8CuratedPackage(packageName, version);
                break;

            case FeedType.WebMatrixCuratedFeed:
                packageFullPath = PackageCreationHelper.CreateWindows8CuratedPackage(packageName, version);
                break;
            }
            int exitCode = CmdLineHelper.UploadPackage(packageFullPath, UrlHelper.V2FeedPushSourceUrl);

            return(exitCode);
        }
        public void UploadAndDownLoadPackageWithMinClientVersion()
        {
            string packageId       = DateTime.Now.Ticks.ToString() + "PackageWithDotCsNames.Cs";
            string version         = "1.0.0";
            string packageFullPath = PackageCreationHelper.CreatePackageWithMinClientVersion(packageId, version, "2.3");
            int    exitCode        = CmdLineHelper.UploadPackage(packageFullPath, UrlHelper.V2FeedPushSourceUrl);

            Assert.IsTrue((exitCode == 0), Constants.UploadFailureMessage);
            Assert.IsTrue(ClientSDKHelper.CheckIfPackageVersionExistsInSource(packageId, version, UrlHelper.V2FeedRootUrl), Constants.PackageNotFoundAfterUpload, packageId, UrlHelper.V2FeedRootUrl);

            //Delete package from local disk so once it gets uploaded
            if (File.Exists(packageFullPath))
            {
                File.Delete(packageFullPath);
                Directory.Delete(Path.GetFullPath(Path.GetDirectoryName(packageFullPath)), true);
            }
            AssertAndValidationHelper.DownloadPackageAndVerify(packageId);
        }
Example #25
0
        private async Task <HttpResponseMessage> PushPackageAsync(string apiKey, string packageId, string clientVersion = null)
        {
            var packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
            var packagePath           = await packageCreationHelper.CreatePackage(packageId);

            using (var httpClient = new HttpClient())
                using (var request = new HttpRequestMessage(HttpMethod.Put, UrlHelper.V2FeedPushSourceUrl))
                {
                    request.Headers.Add(Constants.NuGetHeaderApiKey, EnvironmentSettings.TestSecurityPoliciesAccountApiKey);
                    if (clientVersion != null)
                    {
                        request.Headers.Add(Constants.NuGetHeaderClientVersion, clientVersion);
                    }
                    request.Content = new StreamContent(new FileStream(packagePath, FileMode.Open));

                    return(await httpClient.SendAsync(request));
                }
        }
Example #26
0
        public void EditAndSearch()
        {
            // Use the same package name, but force the version to be unique.
            string packageName        = "NuGetGallery.FunctionalTests.Fluent.EditAndSearch";
            string ticks              = DateTime.Now.Ticks.ToString();
            string version            = new System.Version(ticks.Substring(0, 6) + "." + ticks.Substring(6, 6) + "." + ticks.Substring(12, 6)).ToString();
            string newPackageLocation = PackageCreationHelper.CreatePackage(packageName, version);

            // Log on using the test account.
            I.LogOn(EnvironmentSettings.TestAccountName, EnvironmentSettings.TestAccountPassword);

            // Navigate to the upload page.
            I.UploadPackageUsingUI(newPackageLocation);

            // Edit the package.
            I.Click("#Edit_VersionTitleButton");
            string newTitle = String.Format("This title is accurate as of {0}.", DateTime.Now.ToString("F"));

            I.Enter(newTitle).In("#Edit_VersionTitle");
            I.Click("input[value='Submit']");

            // Re-load and validate that the edit has been applied.
            // The edit can be applied anytime within ten mins. to be considered successful.  This tries 20 times with a 30 sec. timeout.
            bool applied = false;

            for (int i = 0; i < 20; i++)
            {
                I.Enter(newTitle).In("#searchBoxInput");
                I.Click("#searchBoxSubmit");
                // Starting API V3, we have removed the search sort order
                //I.Select("Recent").From("#sortOrder");
                try
                {
                    I.Expect.Count(2).Of("h1:contains('" + newTitle + "')");
                    applied = true;
                }
                catch
                {
                    // We expect an exception after 30 seconds if the edit hasn't been applied yet.
                }
            }
            Assert.IsTrue(applied, "The edit doesn't appear to have been applied after ten minutes.");
        }
        [Ignore] //This method is marked ignore as we don't it to be run in regular runs. It will be run only when required.
        public void UploadAndDownLoadTestBombPackage()
        {
            string packageId       = DateTime.Now.Ticks.ToString() + testContextInstance.TestName;
            string version         = "1.0.0";
            string packageFullPath = PackageCreationHelper.CreateGalleryTestBombPackage(packageId);
            int    exitCode        = CmdLineHelper.UploadPackage(packageFullPath, UrlHelper.V2FeedPushSourceUrl);

            Assert.IsTrue((exitCode == 0), "The package upload via Nuget.exe didnt suceed properly. Check the logs to see the process error and output stream");
            Assert.IsTrue(ClientSDKHelper.CheckIfPackageVersionExistsInSource(packageId, version, UrlHelper.V2FeedRootUrl), "Package {0} is not found in the site {1} after uploading.", packageId, UrlHelper.V2FeedRootUrl);

            //Delete package from local disk so once it gets uploaded
            if (File.Exists(packageFullPath))
            {
                File.Delete(packageFullPath);
                Directory.Delete(Path.GetFullPath(Path.GetDirectoryName(packageFullPath)), true);
            }

            AssertAndValidationHelper.DownloadPackageAndVerify(packageId);
        }
Example #28
0
        private async Task<HttpResponseMessage> PushPackageAsync(string apiKey, string packageId, string clientVersion = null, string protocolVersion = null)
        {
            var packageCreationHelper = new PackageCreationHelper(TestOutputHelper);
            var packagePath = await packageCreationHelper.CreatePackage(packageId);

            using (var httpClient = new HttpClient())
            using (var request = new HttpRequestMessage(HttpMethod.Put, UrlHelper.V2FeedPushSourceUrl))
            {
                request.Headers.Add(Constants.NuGetHeaderApiKey, GalleryConfiguration.Instance.Account.ApiKey);
                if (clientVersion != null)
                {
                    request.Headers.Add(Constants.NuGetHeaderClientVersion, clientVersion);
                }
                if (protocolVersion != null)
                {
                    request.Headers.Add(Constants.NuGetHeaderProtocolVersion, protocolVersion); 
                }
                request.Content = new StreamContent(new FileStream(packagePath, FileMode.Open));

                return await httpClient.SendAsync(request);
            }
        }
Example #29
0
        public void MinClientVersionFromUI()
        {
            // Use the same package name, but force the version to be unique.
            string packageName        = "NuGetGallery.FunctionalTests.Fluent.MinClientVersionFromUITest";
            string ticks              = DateTime.Now.Ticks.ToString();
            string version            = new System.Version(ticks.Substring(0, 6) + "." + ticks.Substring(6, 6) + "." + ticks.Substring(12, 6)).ToString();
            string newPackageLocation = PackageCreationHelper.CreatePackage(packageName, version, "2.7");

            // Log on using the test account.
            I.LogOn(EnvironmentSettings.TestAccountName, EnvironmentSettings.TestAccountPassword);

            // Navigate to the upload page.
            I.UploadPackageUsingUI(newPackageLocation);

            // Submit on the validate upload page.
            I.Click("input[value='Submit']");

            // Validate that the minclientversion is shown to the user on the package page.
            I.Expect.Url(UrlHelper.BaseUrl + @"packages/" + packageName + "/" + version);
            string expectedMinClientVersion = @"p:contains('Requires NuGet 2.7 or higher')";

            I.Expect.Count(1).Of(expectedMinClientVersion);
        }
Example #30
0
        /// <summary>
        /// Creates a package with the specified Id and Version and uploads it and checks if the upload has suceeded.
        /// This will be used by test classes which tests scenarios on top of upload.
        /// </summary>
        /// <param name="packageId"></param>
        /// <param name="version"></param>
        public static void UploadNewPackageAndVerify(string packageId, string version = "1.0.0", string minClientVersion = null, string title = null, string tags = null, string description = null, string licenseUrl = null, string dependencies = null)
        {
            if (string.IsNullOrEmpty(packageId))
            {
                packageId = DateTime.Now.Ticks.ToString();
            }
            string packageFullPath = PackageCreationHelper.CreatePackage(packageId, version, minClientVersion, title, tags, description, licenseUrl, dependencies);
            string standardOutput  = string.Empty;
            string standardError   = string.Empty;
            int    exitCode        = CmdLineHelper.UploadPackage(packageFullPath, UrlHelper.V2FeedPushSourceUrl, out standardOutput, out standardError);

            Assert.IsTrue((exitCode == 0), "The package upload via Nuget.exe did not succeed properly. Check the logs to see the process error and output stream.  Exit Code: " + exitCode + ". Error message: \"" + standardError + "\"");
            Console.WriteLine(standardOutput);
            Console.WriteLine(standardError);
            Assert.IsTrue(ClientSDKHelper.CheckIfPackageVersionExistsInSource(packageId, version, UrlHelper.V2FeedRootUrl), "Package {0} with version {1} is not found in the site {2} after uploading.", packageId, version, UrlHelper.V2FeedRootUrl);

            //Delete package from local disk so once it gets uploaded
            if (File.Exists(packageFullPath))
            {
                File.Delete(packageFullPath);
                Directory.Delete(Path.GetFullPath(Path.GetDirectoryName(packageFullPath)), true);
            }
        }
Example #31
0
        public void SearchWebMatrixCuratedFeed()
        {
            string packageName     = "NuGetGallery.FunctionalTests.SearchWebMatrixCuratedFeed";
            string ticks           = DateTime.Now.Ticks.ToString();
            string version         = new System.Version(ticks.Substring(0, 6) + "." + ticks.Substring(6, 6) + "." + ticks.Substring(12, 6)).ToString();
            string packageFullPath = PackageCreationHelper.CreateWebMatrixCuratedPackage(packageName, version);

            int exitCode = CmdLineHelper.UploadPackage(packageFullPath, UrlHelper.V2FeedPushSourceUrl);

            Assert.IsTrue((exitCode == 0), "The package upload via Nuget.exe didnt suceed properly. Check the logs to see the process error and output stream");

            // The feed could update anytime in the next 5 minutes and this test would be considered a success.
            bool applied = false;

            for (int i = 0; i < 10 && applied == false; i++)
            {
                System.Threading.Thread.Sleep(30000);
                if (ClientSDKHelper.CheckIfPackageExistsInSource(packageName, UrlHelper.WebMatrixCuratedFeedUrl))
                {
                    applied = true;
                }
            }
            Assert.IsTrue(applied, "Package {0} is not found in the site {1} after uploading.", packageName, UrlHelper.WebMatrixCuratedFeedUrl);
        }
        public void EditPackageAsPartOfUpload()
        {
            // Use the same package name, but force the version to be unique.
            string packageName        = "NuGetGallery.FunctionalTests.Fluent.EditPackageAsPartOfUploadTest";
            string ticks              = DateTime.Now.Ticks.ToString();
            string version            = new System.Version(ticks.Substring(0, 6) + "." + ticks.Substring(6, 6) + "." + ticks.Substring(12, 6)).ToString();
            string newPackageLocation = PackageCreationHelper.CreatePackage(packageName, version);

            // Log on using the test account.
            I.LogOn(EnvironmentSettings.TestAccountName, EnvironmentSettings.TestAccountPassword);

            // Navigate to the upload page.
            I.UploadPackageUsingUI(newPackageLocation);

            // Edit the package.
            I.Click("#Edit_VersionTitleButton");
            string newTitle = String.Format("This title is accurate as of {0}.", DateTime.Now.ToString("F"));

            I.Enter(newTitle).In("#Edit_VersionTitle");

            I.Click("#Edit_DescriptionButton");
            string newDescription = String.Format("This description is accurate as of {0}.", DateTime.Now.ToString("F"));

            I.Enter(newDescription).In("#Edit_Description");

            I.Click("#Edit_SummaryButton");
            string newSummary = String.Format("This summary is accurate as of {0}.", DateTime.Now.ToString("F"));

            I.Enter(newSummary).In("#Edit_Summary");

            I.Click("#Edit_IconUrlButton");
            string newIconUrl = String.Format("http://microsoft.com/IconUrl/{0}", DateTime.Now.ToString("FFFFFFF"));

            I.Enter(newIconUrl).In("#Edit_IconUrl");

            I.Click("#Edit_ProjectUrlButton");
            string newHomePageUrl = String.Format("http://microsoft.com/HomePageUrl/{0}", DateTime.Now.ToString("FFFFFFF"));

            I.Enter(newHomePageUrl).In("#Edit_ProjectUrl");

            I.Click("#Edit_AuthorsButton");
            string newAuthors = String.Format("These authors are accurate as of {0}.", DateTime.Now.ToString("F"));

            I.Enter(newAuthors).In("#Edit_Authors");

            I.Click("#Edit_CopyrightButton");
            string newCopyright = String.Format("Copyright {0}.", DateTime.Now.ToString("F"));

            I.Enter(newCopyright).In("#Edit_Copyright");

            I.Click("#Edit_TagsButton");
            string newTags = String.Format("These tags are accurate as of {0}.", DateTime.Now.ToString("F"));

            I.Enter(newTags).In("#Edit_Tags");

            I.Click("#Edit_ReleaseNotesButton");
            string newReleaseNotes = String.Format("These release notes are accurate as of {0}.", DateTime.Now.ToString("F"));

            I.Enter(newReleaseNotes).In("#Edit_ReleaseNotes");

            I.Click("#verifyUploadSubmit");

            // Validate that the edit is queued.
            I.Expect.Url(UrlHelper.BaseUrl + @"packages/" + packageName + "/" + version);
            string expectedDescription  = @"p:contains('" + newDescription + "')";
            string unexpectedSummary    = @"contains('" + newSummary + "')";
            string unexpectedIconUrl    = "img[src='" + newIconUrl + "']";
            string defaultIconUrl       = UrlHelper.BaseUrl + "Content/Images/packageDefaultIcon.png";
            string expectedIconUrl      = "img[src='" + defaultIconUrl + "']";
            string expectedHomePageUrl  = "a[href='" + newHomePageUrl + "']";
            string unexpectedCopyright  = @"contains('" + newCopyright + "')";
            string expectedReleaseNotes = @"p:contains('" + newReleaseNotes + "')";
            string editPending          = @"p:contains('An edit is pending for this package version.')";

            I.Expect.Count(1).Of(expectedDescription);
            I.Expect.Count(0).Of(unexpectedSummary); // Summary is not present on the package page.
            I.Expect.Count(0).Of(unexpectedIconUrl);
            I.Expect.Count(1).Of(expectedIconUrl);
            I.Expect.Count(1).Of(expectedHomePageUrl);
            I.Expect.Text(newAuthors).In("p[class=authors]");
            I.Expect.Count(0).Of(unexpectedCopyright); // Copyright is not present on the package page.
            I.Expect.Count(1).Of(expectedReleaseNotes);
            string[] tags = newTags.Split(" ,;".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            foreach (string tag in tags)
            {
                I.Expect.Text(tag).In("a[title='Search for " + tag + "']");
            }

            // Validate the pending edit message.
            I.Expect.Count(1).Of(editPending);

            // Re-load and validate that the edit has been applied.
            // The edit can be applied anytime within 5 mins. to be considered successful.  This tries 10 times with a 30 sec. timeout.
            bool applied = false;

            for (int i = 0; i < 10; i++)
            {
                I.Open(UrlHelper.BaseUrl + @"Packages/" + packageName + "/" + version);
                I.Expect.Count(1).Of(expectedDescription);
                try
                {
                    I.Expect.Count(0).Of(editPending);
                    applied = true;
                }
                catch
                {
                    // We expect an exception if the edit hasn't been applied yet.
                }
            }
            Assert.IsTrue(applied, "The edit doesn't appear to have been applied after five minutes.");
        }
 public _1826RegressionTest(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _packageCreationHelper = new PackageCreationHelper(testOutputHelper);
 }
 public EditAndSearchTest(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _packageCreationHelper = new PackageCreationHelper(testOutputHelper);
 }
Example #35
0
 public LicenseTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper)
 {
     _commandlineHelper     = new CommandlineHelper(TestOutputHelper);
     _packageCreationHelper = new PackageCreationHelper(testOutputHelper);
 }
 public EditPackageAsPartOfUploadTest(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _packageCreationHelper = new PackageCreationHelper(testOutputHelper);
 }
Example #37
0
 public EditAndSearchTest(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _packageCreationHelper = new PackageCreationHelper(testOutputHelper);
 }
Example #38
0
 public EditPackageAsPartOfUploadTest(ITestOutputHelper testOutputHelper)
     : base(testOutputHelper)
 {
     _packageCreationHelper = new PackageCreationHelper(testOutputHelper);
 }