Skip to content

Commit 493275d

Browse files
authored
Merge pull request #2574 from FoothillSolutions/fix-build-and-unit-tests
fix build and unit tests
2 parents 5cda218 + 878e0fa commit 493275d

File tree

6 files changed

+108
-111
lines changed

6 files changed

+108
-111
lines changed

build.fsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ nuget Fake.Windows.Chocolatey prerelease
3131
nuget Fake.Tools.Git prerelease
3232
nuget Mono.Cecil prerelease
3333
nuget System.Reactive.Compatibility
34-
nuget Suave
34+
nuget Suave 2.5.6
3535
nuget Newtonsoft.Json
3636
nuget Octokit //"
3737
#endif

src/app/Fake.DotNet.NuGet/NuGet.fs

Lines changed: 56 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,19 @@ let getNuspecProperties (nuspec : string) =
643643
PackageHashAlgorithm = String.Empty
644644
}
645645

646+
type NugetPackageInfo =
647+
{ Id : string
648+
Version : string
649+
Description : string
650+
Summary : string
651+
IsLatestVersion : bool
652+
Authors : string
653+
Owners : string
654+
Tags : string
655+
ProjectUrl : string
656+
LicenseUrl : string
657+
Title : string }
658+
646659
/// Returns the NuGet meta data from the given package file name.
647660
/// ## Parameters
648661
///
@@ -654,15 +667,12 @@ let getNuspecProperties (nuspec : string) =
654667
// |> getNuspecProperties
655668

656669
/// Default NuGet feed
657-
[<Obsolete "This V1 NuGet feed url most likely doesn't work. Please consider using v3 nuget feed via `NuGet.galleryV3`.">]
658-
let galleryV1 = "http://go.microsoft.com/fwlink/?LinkID=206669"
659-
let galleryV2 = "https://www.nuget.org/api/v2/"
660670
let galleryV3 = "https://api.nuget.org/v3/index.json"
661671

662672
// TODO: Note that this is stolen from paket code. We might want to move that into a shared FAKE library..., see https://github.com/fsprojects/Paket/blob/06ef22ba79896cd9f2a2e2eefccde08b09ab7656/src/Paket.Core/Utils.fs
663673
#if NETSTANDARD
664674
open System.Net.Http
665-
open System.Collections.Generic
675+
open Newtonsoft.Json.Linq
666676
type WebClient = HttpClient
667677
type HttpClient with
668678
member x.DownloadFileTaskAsync (uri : Uri, filePath : string) =
@@ -729,6 +739,7 @@ let internal addHeader (client:HttpClient) (headerKey:string) (headerVal:string)
729739
client.DefaultRequestHeaders.Add(headerKey, headerVal)
730740
#else
731741

742+
open Newtonsoft.Json.Linq
732743
open System.Net
733744
type WebClient with
734745
member x.UploadFileAsMultipart (url : Uri) filename =
@@ -766,58 +777,57 @@ let private webClient = new WebClient()
766777

767778
/// [omit]
768779
let discoverRepoUrl =
769-
lazy (let resp = webClient.DownloadString(galleryV1)
770-
let doc = Xml.createDoc resp
771-
doc.["service"].GetAttribute("xml:base"))
780+
lazy (let resp = webClient.DownloadString(galleryV3)
781+
let json = JObject.Parse resp
782+
let nugetSearchResource =
783+
(json.Item("resources") :?> JArray)
784+
|> Seq.find(fun resource -> resource.Item("@type").ToString() = "SearchQueryService")
785+
:?> JObject
786+
nugetSearchResource.Item("@id").ToString())
772787

773788
/// [omit]
774789
let getRepoUrl() = discoverRepoUrl.Force()
775790

776791
/// [omit]
777-
let extractFeedPackageFromXml (entry : Xml.XmlNode) =
778-
let properties = entry.["m:properties"]
779-
let property name =
780-
let p = properties.["d:" + name]
781-
if p = null || p.IsEmpty then "" else p.InnerText
782-
let boolProperty name = (property name).ToLower() = "true"
783-
let author = entry.["author"].InnerText
784-
let dateTimeProperty name = DateTime.Parse(property name)
785-
{ Id = entry.["title"].InnerText
786-
Version = property "Version"
787-
Description = property "Description"
788-
IsLatestVersion = boolProperty "IsLatestVersion"
789-
Authors = author
790-
Owners = author
791-
Language = property "Language"
792-
Tags = property "Tags"
793-
ReleaseNotes = property "ReleaseNotes"
794-
ProjectUrl = property "ProjectUrl"
795-
LicenseUrl = property "LicenseUrl"
796-
RequireLicenseAcceptance = boolProperty "RequireLicenseAcceptance"
797-
PackageHash = property "PackageHash"
798-
PackageHashAlgorithm = property "PackageHashAlgorithm"
799-
Created = dateTimeProperty "Created"
800-
Published = dateTimeProperty "Published"
801-
Url = entry.["content"].GetAttribute("src") }
792+
let extractFeedPackageFromJson (data : JObject) isLatestVersion =
793+
{ Id = data.["id"].ToString()
794+
Version = data.["version"].ToString()
795+
Description = data.["description"].ToString()
796+
Summary = data.["summary"].ToString()
797+
IsLatestVersion = isLatestVersion
798+
Authors = String.Join(",", data.["authors"] :?> JArray)
799+
Owners = String.Join(",", data.["authors"] :?> JArray)
800+
Tags = String.Join(",", data.["tags"] :?> JArray)
801+
ProjectUrl = data.["projectUrl"].ToString()
802+
LicenseUrl = data.["licenseUrl"].ToString()
803+
Title = data.["title"].ToString()
804+
}
802805

803-
/// [omit]
804-
let getPackage (repoUrl:string) packageName version =
805-
let url : string = repoUrl.TrimEnd('/') + "/Packages(Id='" + packageName + "',Version='" + version + "')"
806+
let getPackage (repoUrl:string) (packageName:string) (version:string) =
807+
let url : string = repoUrl.TrimEnd('/') + "?q=title:" + packageName + "&take=1"
806808
let resp = webClient.DownloadString(url)
807-
let doc = Xml.createDoc resp
808-
extractFeedPackageFromXml doc.["entry"]
809+
let json = JObject.Parse resp
810+
let data = (json.["data"] :?> JArray).[0] :?> JObject
811+
let packageVersions = (data.["versions"] :?> JArray).ToObject<List<JObject>>()
812+
let versionExists =
813+
packageVersions
814+
|> List.exists(fun listedVersion -> listedVersion.["version"].ToString() = version)
815+
816+
if not versionExists then
817+
failwithf "Requested %s for package %s is not registered on NuGet" version packageName
818+
819+
let isLatest = (data.["version"].ToString() = version)
820+
// set the requested version instead of latest.
821+
data.["version"] <- JValue version
822+
extractFeedPackageFromJson data isLatest
809823

810-
/// [omit]
811-
let getFeedPackagesFromUrl (url : string) =
812-
let resp = webClient.DownloadString(url)
813-
let doc = Xml.createDoc resp
814-
[ for entry in doc.["feed"].GetElementsByTagName("entry") -> extractFeedPackageFromXml entry ]
815824

816-
/// [omit]
817825
let getLatestPackage (repoUrl:string) packageName =
818-
repoUrl.TrimEnd('/') + "/Packages()?$filter=(Id%20eq%20'" + packageName + "')%20and%20IsLatestVersion"
819-
|> getFeedPackagesFromUrl
820-
|> Seq.head
826+
let url : string = repoUrl.TrimEnd('/') + "?q=title:" + packageName + "&take=1"
827+
let resp = webClient.DownloadString(url)
828+
let json = JObject.Parse resp
829+
let data = (json.["data"] :?> JArray).[0] :?> JObject
830+
extractFeedPackageFromJson data true
821831

822832
/// [omit]
823833
let downloadPackage targetDir (package : NuSpecPackage) =

src/legacy/Test.FAKECore/PackageMgt/FeedSpecs.cs

Lines changed: 0 additions & 57 deletions
This file was deleted.

src/legacy/Test.FAKECore/Test.FAKECore.csproj

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@
110110
<Compile Include="MSBuild\LoggerSpecs.cs" />
111111
<Compile Include="NAVFiles\NAVModifySpecs.cs" />
112112
<Compile Include="NAVFiles\NAVVersionTagsSpecs.cs" />
113-
<Compile Include="PackageMgt\FeedSpecs.cs" />
114113
<Compile Include="PackageMgt\NugetData.cs" />
115114
<Compile Include="PackageMgt\NuSpecFileSpecs.cs" />
116115
<Compile Include="PackageMgt\NugetSpecs.cs" />
@@ -3702,4 +3701,4 @@
37023701
</When>
37033702
</Choose>
37043703
<Import Project="..\..\..\packages\NETStandard.Library\build\$(__paket__NETStandard_Library_targets).targets" Condition="Exists('..\..\..\packages\NETStandard.Library\build\$(__paket__NETStandard_Library_targets).targets')" Label="Paket" />
3705-
</Project>
3704+
</Project>

src/test/Fake.Core.UnitTests/Fake.DotNet.NuGet.fs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,52 @@ let tests =
4949
test "Incrementing Major for a SemVerInfo" {
5050
Expect.equal (SemVer.parse("1.1.1") |> IncMajor |> string) "2.0.0" "Incremented Patch from 1.1.1 should be 2.0.0"
5151
}
52+
53+
test "Getting the NuGet feed URL return V3" {
54+
Expect.equal NuGet.galleryV3 "https://api.nuget.org/v3/index.json" "NuGet feed V3 API is used"
55+
}
56+
57+
test "Getting NuGet resource service URL" {
58+
Expect.isNotEmpty (NuGet.getRepoUrl()) "Get Repo URL will return NuGet service URL"
59+
}
60+
61+
testCase "Getting latest version of FAKE from NuGet feed" <| fun _ ->
62+
let package: NuGet.NugetPackageInfo = NuGet.getLatestPackage (NuGet.getRepoUrl()) "FAKE"
63+
Expect.isTrue package.IsLatestVersion "getting latest version of a package"
64+
65+
testCase "Getting latest version of FAKE and package info are populated" <| fun _ ->
66+
let package: NuGet.NugetPackageInfo = NuGet.getLatestPackage (NuGet.getRepoUrl()) "FAKE"
67+
Expect.equal package.Id "FAKE" "Id filled"
68+
Expect.isNotEmpty package.Version "Version filled"
69+
Expect.isNotEmpty package.Description "Description filled"
70+
Expect.isNotEmpty package.Summary "Id filled"
71+
Expect.isTrue package.IsLatestVersion "IsLatestVersion filled"
72+
Expect.isNotEmpty package.Authors "Authors filled"
73+
Expect.isNotEmpty package.Owners "Owners filled"
74+
Expect.isNotEmpty package.Tags "Tags filled"
75+
Expect.isNotEmpty package.ProjectUrl "ProjectUrl filled"
76+
Expect.isNotEmpty package.LicenseUrl "LicenseUrl filled"
77+
Expect.equal package.Title "FAKE" "Title filled"
78+
79+
testCase "Requesting specific version of FAKE" <| fun _ ->
80+
let package: NuGet.NugetPackageInfo = NuGet.getPackage (NuGet.getRepoUrl()) "FAKE" "1.46.2"
81+
Expect.isFalse package.IsLatestVersion "getting version 1.46.2 of FAKE"
82+
83+
testCase "Requesting un-registered version of FAKE throws exception" <| fun _ ->
84+
Expect.throws (fun _ -> NuGet.getPackage (NuGet.getRepoUrl()) "FAKE" "-1.55.0" |> ignore) "Version -1.55.0 is not registered for FAKE!"
85+
86+
testCase "Requesting specific version of FAKE and package info are populated" <| fun _ ->
87+
let package: NuGet.NugetPackageInfo = NuGet.getPackage (NuGet.getRepoUrl()) "FAKE" "1.46.2"
88+
Expect.equal package.Id "FAKE" "Id filled"
89+
Expect.equal package.Version "1.46.2" "Version filled"
90+
Expect.isNotEmpty package.Description "Description filled"
91+
Expect.isNotEmpty package.Summary "Id filled"
92+
Expect.isFalse package.IsLatestVersion "IsLatestVersion filled"
93+
Expect.isNotEmpty package.Authors "Authors filled"
94+
Expect.isNotEmpty package.Owners "Owners filled"
95+
Expect.isNotEmpty package.Tags "Tags filled"
96+
Expect.isNotEmpty package.ProjectUrl "ProjectUrl filled"
97+
Expect.isNotEmpty package.LicenseUrl "LicenseUrl filled"
98+
Expect.equal package.Title "FAKE" "Title filled"
5299
]
53100

src/test/Fake.Core.UnitTests/Fake.DotNet.Paket.fs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ open Fake.DotNet.Testing
77
open Fake.Testing
88
open Expecto
99

10-
let expectedPath = "paket" // if Environment.isWindows then ".paket\\paket.EXE" else ".paket/paket.exe"
11-
1210
[<Tests>]
1311
let tests =
1412
testList "Fake.DotNet.Paket.Tests" [
@@ -21,7 +19,7 @@ let tests =
2119
| _ -> failwithf "expected RawCommand"
2220
|> ArgumentHelper.checkIfMono
2321
let cmd = args |> Arguments.toStartInfo
24-
Expect.equal file expectedPath "Expected paket.exe"
22+
Expect.stringContains (file.ToLower()) "paket" "Expected paket"
2523
Expect.equal cmd "restore" "expected restore argument"
2624
testCase "Test pack is not missing, #2411" <| fun _ ->
2725
let cp =
@@ -32,7 +30,7 @@ let tests =
3230
| _ -> failwithf "expected RawCommand"
3331
|> ArgumentHelper.checkIfMono
3432
let cmd = args |> Arguments.toStartInfo
35-
Expect.equal file expectedPath "Expected paket.exe"
33+
Expect.stringContains (file.ToLower()) "paket" "Expected paket"
3634
Expect.equal cmd "pack ./temp" "expected pack command line"
3735
testCase "Test push is not missing, #2411" <| fun _ ->
3836
let cp =
@@ -43,6 +41,6 @@ let tests =
4341
| _ -> failwithf "expected RawCommand"
4442
|> ArgumentHelper.checkIfMono
4543
let cmd = args |> Arguments.toStartInfo
46-
Expect.equal file expectedPath "Expected paket.exe"
44+
Expect.stringContains (file.ToLower()) "paket" "Expected paket"
4745
Expect.equal cmd "push testfile" "expected push command line"
4846
]

0 commit comments

Comments
 (0)