From d22b2281ebd58983c57f58fc61e8e02b827f07ae Mon Sep 17 00:00:00 2001 From: Yazeed Obaid Date: Tue, 6 Apr 2021 12:58:45 +0300 Subject: [PATCH] Get by packageid and an api to search by title --- src/app/Fake.DotNet.NuGet/NuGet.fs | 29 +++++++++++++++++-- .../Fake.Core.UnitTests/Fake.DotNet.NuGet.fs | 15 ++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/app/Fake.DotNet.NuGet/NuGet.fs b/src/app/Fake.DotNet.NuGet/NuGet.fs index 3cfb5ec3644..cb85da857ef 100644 --- a/src/app/Fake.DotNet.NuGet/NuGet.fs +++ b/src/app/Fake.DotNet.NuGet/NuGet.fs @@ -803,8 +803,14 @@ let extractFeedPackageFromJson (data : JObject) isLatestVersion = Title = data.["title"].ToString() } +/// Gets a Package information from NuGet feed by package id. +/// ## Parameters +/// +/// - `repoUrl` - Query endpoint of NuGet search service +/// - `packageName` - The package to get +/// - `version` - The specific version to get let getPackage (repoUrl:string) (packageName:string) (version:string) = - let url : string = repoUrl.TrimEnd('/') + "?q=title:" + packageName + "&take=1" + let url : string = repoUrl.TrimEnd('/') + "?q=packageid:" + packageName + "&take=1" let resp = webClient.DownloadString(url) let json = JObject.Parse resp let data = (json.["data"] :?> JArray).[0] :?> JObject @@ -821,14 +827,31 @@ let getPackage (repoUrl:string) (packageName:string) (version:string) = data.["version"] <- JValue version extractFeedPackageFromJson data isLatest - +/// Gets the latest published package from NuGet feed by package id. +/// ## Parameters +/// +/// - `repoUrl` - Query endpoint of NuGet search service +/// - `packageName` - The package to get let getLatestPackage (repoUrl:string) packageName = - let url : string = repoUrl.TrimEnd('/') + "?q=title:" + packageName + "&take=1" + let url : string = repoUrl.TrimEnd('/') + "?q=packageid:" + packageName + "&take=1" let resp = webClient.DownloadString(url) let json = JObject.Parse resp let data = (json.["data"] :?> JArray).[0] :?> JObject extractFeedPackageFromJson data true +/// Search NuGet query endpoint for packages macthing given name by title +/// ## Parameters +/// +/// - `repoUrl` - Query endpoint of NuGet search service +/// - `packageName` - The package to search for +let searchByTitle (repoUrl:string) (packageName:string) = + let url : string = repoUrl.TrimEnd('/') + "?q=title:" + packageName + let resp = webClient.DownloadString(url) + let json = JObject.Parse resp + let data = (json.["data"] :?> JArray).ToObject>() + data + |> List.map(fun datum -> extractFeedPackageFromJson datum false) + /// [omit] let downloadPackage targetDir (package : NuSpecPackage) = Directory.ensure targetDir diff --git a/src/test/Fake.Core.UnitTests/Fake.DotNet.NuGet.fs b/src/test/Fake.Core.UnitTests/Fake.DotNet.NuGet.fs index cf9d8cc4808..8b4fc906315 100644 --- a/src/test/Fake.Core.UnitTests/Fake.DotNet.NuGet.fs +++ b/src/test/Fake.Core.UnitTests/Fake.DotNet.NuGet.fs @@ -96,5 +96,20 @@ let tests = Expect.isNotEmpty package.ProjectUrl "ProjectUrl filled" Expect.isNotEmpty package.LicenseUrl "LicenseUrl filled" Expect.equal package.Title "FAKE" "Title filled" + + testCase "Search by title returns results for matching packages by provided title" <| fun _ -> + let packages: NuGet.NugetPackageInfo list = NuGet.searchByTitle (NuGet.getRepoUrl()) "FAKE" + Expect.isGreaterThanOrEqual packages.Length 1 "Expected result has at least one element" + Expect.equal packages.[0].Id "FAKE" "Id filled" + Expect.isNotEmpty packages.[0].Version "Version filled" + Expect.isNotEmpty packages.[0].Description "Description filled" + Expect.isNotEmpty packages.[0].Summary "Id filled" + Expect.isFalse packages.[0].IsLatestVersion "IsLatestVersion filled" + Expect.isNotEmpty packages.[0].Authors "Authors filled" + Expect.isNotEmpty packages.[0].Owners "Owners filled" + Expect.isNotEmpty packages.[0].Tags "Tags filled" + Expect.isNotEmpty packages.[0].ProjectUrl "ProjectUrl filled" + Expect.isNotEmpty packages.[0].LicenseUrl "LicenseUrl filled" + Expect.equal packages.[0].Title "FAKE" "Title filled" ]