예제 #1
0
        public virtual ActionResult SubmitPackageTestResults(string apiKey, string id, string version, bool success, string resultDetailsUrl)
        {
            Guid parsedApiKey;

            if (!Guid.TryParse(apiKey, out parsedApiKey))
            {
                return(new HttpStatusCodeWithBodyResult(HttpStatusCode.BadRequest, Strings.InvalidApiKey));
            }

            var testReporterUser = userSvc.FindByApiKey(parsedApiKey);

            if (testReporterUser == null)
            {
                return(new HttpStatusCodeWithBodyResult(HttpStatusCode.Forbidden, String.Format(CultureInfo.CurrentCulture, Strings.ApiKeyNotAuthorized, "submittestresults")));
            }
            // Only the package operations user can submit test results
            if (testReporterUser.Key != settings.PackageOperationsUserKey)
            {
                return(new HttpStatusCodeWithBodyResult(HttpStatusCode.Forbidden, String.Format(CultureInfo.CurrentCulture, Strings.ApiKeyNotAuthorized, "submittestresults")));
            }

            if (String.IsNullOrEmpty(id) || String.IsNullOrEmpty(version))
            {
                return(new HttpStatusCodeWithBodyResult(HttpStatusCode.NotFound, string.Format(CultureInfo.CurrentCulture, Strings.PackageWithIdAndVersionNotFound, id, version)));
            }

            if (string.IsNullOrWhiteSpace(resultDetailsUrl))
            {
                return(new HttpStatusCodeWithBodyResult(HttpStatusCode.BadRequest, "Submitting test results requires 'resultDetailsUrl' and 'success'."));
            }

            try
            {
                var tempUri = new Uri(resultDetailsUrl);
            }
            catch (Exception)
            {
                return(new HttpStatusCodeWithBodyResult(HttpStatusCode.BadRequest, "Submitting test results requires 'resultDetailsUrl' to be a Url."));
            }

            var package = packageSvc.FindPackageByIdAndVersion(id, version, allowPrerelease: true, useCache: false);

            if (package == null)
            {
                return(new HttpStatusCodeWithBodyResult(HttpStatusCode.NotFound, string.Format(CultureInfo.CurrentCulture, Strings.PackageWithIdAndVersionNotFound, id, version)));
            }

            packageSvc.ChangePackageTestStatus(package, success, resultDetailsUrl, testReporterUser);

            return(new HttpStatusCodeWithBodyResult(HttpStatusCode.Accepted, "Package test results have been updated."));
        }