public void FromProperties_AllowsNullSemVerLevel()
        {
            // Arrange & Act
            var actual = ClientCompatibilityFactory.FromProperties(unparsedSemVerLevel: null);

            // Assert
            Assert.Equal(new SemanticVersion("1.0.0"), actual.SemVerLevel);
        }
        public void FromUri_AllowsNullUri()
        {
            // Arrange & Act
            var actual = ClientCompatibilityFactory.FromUri(uri: null);

            // Assert
            Assert.Equal(new SemanticVersion("1.0.0"), actual.SemVerLevel);
        }
Beispiel #3
0
        public void FromProperties_SetsSemVerLevel(string semVerLevel, string unparsedExpected)
        {
            // Arrange
            var expected = new SemanticVersion(unparsedExpected);

            // Arrange & Act
            var actual = ClientCompatibilityFactory.FromProperties(semVerLevel);

            // Assert
            Assert.Equal(expected, actual.SemVerLevel);
        }
Beispiel #4
0
        public virtual async Task <IHttpActionResult> Get(
            ODataQueryOptions <ODataPackage> options,
            [FromUri] string semVerLevel = "",
            CancellationToken token      = default(CancellationToken))
        {
            var clientCompatibility = ClientCompatibilityFactory.FromProperties(semVerLevel);

            var sourceQuery = await _serverRepository.GetPackagesAsync(clientCompatibility, token);

            return(TransformToQueryResult(options, sourceQuery, clientCompatibility));
        }
        public void FromUri_DetectsSemVerLevel(string relative, string unparsedExpected)
        {
            // Arrange
            var uri      = new Uri(new Uri("http://localhost:8080/nuget/"), relative);
            var expected = new SemanticVersion(unparsedExpected);

            // Act
            var actual = ClientCompatibilityFactory.FromUri(uri);

            // Assert
            Assert.Equal(expected, actual.SemVerLevel);
        }
Beispiel #6
0
        public IHttpActionResult Search(ODataQueryOptions <ODataPackage> options, [FromODataUri] string searchTerm = "", [FromODataUri] string targetFramework = "", [FromODataUri] bool includePrerelease = false, [FromODataUri] bool includeDelisted = false, [FromUri] string semVerLevel = "", CancellationToken token = default(CancellationToken))
        {
            var serverRepository = _packageRepositoryFactory.GetPackageRepository(User);

            if (!serverRepository.IsAuthenticated)
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            var sourceQuery = serverRepository.FindOctopusProjectPackages(searchTerm, token);

            return(TransformToQueryResult(options, sourceQuery, ClientCompatibilityFactory.FromProperties(semVerLevel)));
        }
Beispiel #7
0
        public virtual async Task <IHttpActionResult> FindPackagesById(
            ODataQueryOptions <ODataPackage> options,
            [FromODataUri] string id,
            [FromUri] string semVerLevel = "",
            CancellationToken token      = default(CancellationToken))
        {
            if (string.IsNullOrEmpty(id))
            {
                var emptyResult = Enumerable.Empty <ODataPackage>().AsQueryable();
                return(QueryResult(options, emptyResult, _maxPageSize));
            }

            var clientCompatibility = ClientCompatibilityFactory.FromProperties(semVerLevel);

            var sourceQuery = await _serverRepository.FindPackagesByIdAsync(id, clientCompatibility, token);

            return(TransformToQueryResult(options, sourceQuery, clientCompatibility));
        }
Beispiel #8
0
        public IHttpActionResult FindPackagesById(ODataQueryOptions <ODataPackage> options, [FromODataUri] string id, [FromUri] string semVerLevel = "", CancellationToken token = default(CancellationToken))
        {
            var serverRepository = _packageRepositoryFactory.GetPackageRepository(User);

            if (!serverRepository.IsAuthenticated)
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            if (string.IsNullOrEmpty(id))
            {
                return(QueryResult(options, Enumerable.Empty <ODataPackage>().AsQueryable(), MaxPageSize));
            }

            var sourceQuery = serverRepository.FindOctopusReleasePackages(id, token);

            return(TransformToQueryResult(options, sourceQuery, ClientCompatibilityFactory.FromProperties(semVerLevel)));
        }
Beispiel #9
0
        public virtual async Task <IHttpActionResult> Search(
            ODataQueryOptions <ODataPackage> options,
            [FromODataUri] string searchTerm      = "",
            [FromODataUri] string targetFramework = "",
            [FromODataUri] bool includePrerelease = false,
            [FromODataUri] bool includeDelisted   = false,
            [FromUri] string semVerLevel          = "",
            CancellationToken token = default(CancellationToken))
        {
            var targetFrameworks = String.IsNullOrEmpty(targetFramework) ? Enumerable.Empty <string>() : targetFramework.Split('|');

            var clientCompatibility = ClientCompatibilityFactory.FromProperties(semVerLevel);

            var sourceQuery = await _serverRepository.SearchAsync(
                searchTerm,
                targetFrameworks,
                includePrerelease,
                clientCompatibility,
                token);

            return(TransformToQueryResult(options, sourceQuery, clientCompatibility));
        }
Beispiel #10
0
        public virtual async Task <IHttpActionResult> GetUpdates(
            ODataQueryOptions <ODataPackage> options,
            [FromODataUri] string packageIds,
            [FromODataUri] string versions,
            [FromODataUri] bool includePrerelease,
            [FromODataUri] bool includeAllVersions,
            [FromODataUri] string targetFrameworks   = "",
            [FromODataUri] string versionConstraints = "",
            [FromUri] string semVerLevel             = "",
            CancellationToken token = default(CancellationToken))
        {
            if (string.IsNullOrEmpty(packageIds) || string.IsNullOrEmpty(versions))
            {
                return(Ok(Enumerable.Empty <ODataPackage>().AsQueryable()));
            }

            // Workaround https://github.com/NuGet/NuGetGallery/issues/674 for NuGet 2.1 client.
            // Can probably eventually be retired (when nobody uses 2.1 anymore...)
            // Note - it was URI un-escaping converting + to ' ', undoing that is actually a pretty conservative substitution because
            // space characters are never acepted as valid by VersionUtility.ParseFrameworkName.
            if (!string.IsNullOrEmpty(targetFrameworks))
            {
                targetFrameworks = targetFrameworks.Replace(' ', '+');
            }

            var idValues              = packageIds.Trim().Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
            var versionValues         = versions.Trim().Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
            var targetFrameworkValues = String.IsNullOrEmpty(targetFrameworks)
                                        ? null
                                        : targetFrameworks.Split('|').Select(VersionUtility.ParseFrameworkName).ToList();
            var versionConstraintValues = (String.IsNullOrEmpty(versionConstraints)
                                            ? new string[idValues.Length]
                                            : versionConstraints.Split('|')).ToList();

            if (idValues.Length == 0 || idValues.Length != versionValues.Length || idValues.Length != versionConstraintValues.Count)
            {
                // Exit early if the request looks invalid
                return(Ok(Enumerable.Empty <ODataPackage>().AsQueryable()));
            }

            var packagesToUpdate = new List <IPackageMetadata>();

            for (var i = 0; i < idValues.Length; i++)
            {
                if (SemanticVersion.TryParse(versionValues[i], out var semVersion))
                {
                    packagesToUpdate.Add(new PackageBuilder {
                        Id = idValues[i], Version = semVersion
                    });
                }
                else
                {
                    versionConstraintValues.RemoveAt(i);
                }
            }

            var versionConstraintsList = new IVersionSpec[versionConstraintValues.Count];

            for (var i = 0; i < versionConstraintsList.Length; i++)
            {
                if (!String.IsNullOrEmpty(versionConstraintValues[i]))
                {
                    VersionUtility.TryParseVersionSpec(versionConstraintValues[i], out versionConstraintsList[i]);
                }
            }

            var clientCompatibility = ClientCompatibilityFactory.FromProperties(semVerLevel);

            var sourceQuery = await _serverRepository.GetUpdatesAsync(
                packagesToUpdate,
                includePrerelease,
                includeAllVersions,
                targetFrameworkValues,
                versionConstraintsList,
                clientCompatibility,
                token);

            return(TransformToQueryResult(options, sourceQuery, clientCompatibility));
        }