@@ -97,10 +97,49 @@ func TestParsePackage(t *testing.T) {
9797 assert .Equal (t , packageDescription , p .Metadata .Description )
9898 assert .ElementsMatch (t , []string {"swift" , "package" }, p .Metadata .Keywords )
9999 assert .Equal (t , packageLicense , p .Metadata .License )
100+ assert .Equal (t , packageAuthor , p .Metadata .Author .Name )
100101 assert .Equal (t , packageAuthor , p .Metadata .Author .GivenName )
101102 assert .Equal (t , packageRepositoryURL , p .Metadata .RepositoryURL )
102103 assert .ElementsMatch (t , []string {packageRepositoryURL }, p .RepositoryURLs )
103104 })
105+
106+ t .Run ("WithExplicitNameField" , func (t * testing.T ) {
107+ data := createArchive (map [string ][]byte {
108+ "Package.swift" : []byte ("// swift-tools-version:5.7\n //\n // Package.swift" ),
109+ })
110+
111+ authorName := "John Doe"
112+ p , err := ParsePackage (
113+ data ,
114+ data .Size (),
115+ strings .NewReader (`{"name":"` + packageName + `","version":"` + packageVersion + `","description":"` + packageDescription + `","author":{"name":"` + authorName + `","givenName":"John","familyName":"Doe"}}` ),
116+ )
117+ assert .NotNil (t , p )
118+ assert .NoError (t , err )
119+
120+ assert .Equal (t , authorName , p .Metadata .Author .Name )
121+ assert .Equal (t , "John" , p .Metadata .Author .GivenName )
122+ assert .Equal (t , "Doe" , p .Metadata .Author .FamilyName )
123+ })
124+
125+ t .Run ("NameFieldGeneration" , func (t * testing.T ) {
126+ data := createArchive (map [string ][]byte {
127+ "Package.swift" : []byte ("// swift-tools-version:5.7\n //\n // Package.swift" ),
128+ })
129+
130+ // Test with only individual name components - Name should be auto-generated
131+ p , err := ParsePackage (
132+ data ,
133+ data .Size (),
134+ strings .NewReader (`{"author":{"givenName":"John","middleName":"Q","familyName":"Doe"}}` ),
135+ )
136+ assert .NotNil (t , p )
137+ assert .NoError (t , err )
138+ assert .Equal (t , "John Q Doe" , p .Metadata .Author .Name )
139+ assert .Equal (t , "John" , p .Metadata .Author .GivenName )
140+ assert .Equal (t , "Q" , p .Metadata .Author .MiddleName )
141+ assert .Equal (t , "Doe" , p .Metadata .Author .FamilyName )
142+ })
104143}
105144
106145func TestTrimmedVersionString (t * testing.T ) {
@@ -142,3 +181,43 @@ func TestTrimmedVersionString(t *testing.T) {
142181 assert .Equal (t , c .Expected , TrimmedVersionString (c .Version ))
143182 }
144183}
184+
185+ func TestPersonNameString (t * testing.T ) {
186+ cases := []struct {
187+ Name string
188+ Person Person
189+ Expected string
190+ }{
191+ {
192+ Name : "GivenNameOnly" ,
193+ Person : Person {GivenName : "John" },
194+ Expected : "John" ,
195+ },
196+ {
197+ Name : "GivenAndFamily" ,
198+ Person : Person {GivenName : "John" , FamilyName : "Doe" },
199+ Expected : "John Doe" ,
200+ },
201+ {
202+ Name : "FullName" ,
203+ Person : Person {GivenName : "John" , MiddleName : "Q" , FamilyName : "Doe" },
204+ Expected : "John Q Doe" ,
205+ },
206+ {
207+ Name : "MiddleAndFamily" ,
208+ Person : Person {MiddleName : "Q" , FamilyName : "Doe" },
209+ Expected : "Q Doe" ,
210+ },
211+ {
212+ Name : "Empty" ,
213+ Person : Person {},
214+ Expected : "" ,
215+ },
216+ }
217+
218+ for _ , c := range cases {
219+ t .Run (c .Name , func (t * testing.T ) {
220+ assert .Equal (t , c .Expected , c .Person .String ())
221+ })
222+ }
223+ }
0 commit comments