@@ -287,6 +287,131 @@ func TestAddLibrary(t *testing.T) {
287287 }
288288}
289289
290+ func TestAddLibrary_ExistingLibrary (t * testing.T ) {
291+ for _ , test := range []struct {
292+ name string
293+ apis []string
294+ cfg * config.Config
295+ wantName string
296+ wantCfg * config.Config
297+ }{
298+ {
299+ name : "update existing library" ,
300+ apis : []string {"google/cloud/secretmanager/v1beta2" },
301+ cfg : & config.Config {
302+ Language : config .LanguageGo ,
303+ Libraries : []* config.Library {
304+ {
305+ Name : "secretmanager" ,
306+ Version : "1.2.3" ,
307+ APIs : []* config.API {
308+ {Path : "google/cloud/secretmanager/v1" },
309+ },
310+ },
311+ },
312+ },
313+ wantName : "secretmanager" ,
314+ wantCfg : & config.Config {
315+ Language : config .LanguageGo ,
316+ Libraries : []* config.Library {
317+ {
318+ Name : "secretmanager" ,
319+ Version : "1.2.3" ,
320+ APIs : []* config.API {
321+ {Path : "google/cloud/secretmanager/v1" },
322+ {Path : "google/cloud/secretmanager/v1beta2" },
323+ },
324+ },
325+ },
326+ },
327+ },
328+ } {
329+ t .Run (test .name , func (t * testing.T ) {
330+ tmpDir := t .TempDir ()
331+ t .Chdir (tmpDir )
332+ if err := yaml .Write (config .LibrarianYAML , test .cfg ); err != nil {
333+ t .Fatal (err )
334+ }
335+ gotName , gotCfg , err := addLibrary (test .cfg , test .apis ... )
336+ if err != nil {
337+ t .Fatal (err )
338+ }
339+ if diff := cmp .Diff (test .wantName , gotName ); diff != "" {
340+ t .Errorf ("mismatch (-want +got):\n %s" , diff )
341+ }
342+ if diff := cmp .Diff (test .wantCfg , gotCfg ); diff != "" {
343+ t .Errorf ("mismatch (-want +got):\n %s" , diff )
344+ }
345+ })
346+ }
347+ }
348+
349+ func TestAddLibrary_ExistingLibrary_Error (t * testing.T ) {
350+ for _ , test := range []struct {
351+ name string
352+ apis []string
353+ cfg * config.Config
354+ wantErr error
355+ }{
356+ {
357+ name : "fail if api already exists" ,
358+ apis : []string {"google/cloud/secretmanager/v1beta2" },
359+ cfg : & config.Config {
360+ Language : config .LanguageGo ,
361+ Libraries : []* config.Library {
362+ {
363+ Name : "secretmanager" ,
364+ Version : "1.2.3" ,
365+ APIs : []* config.API {
366+ {Path : "google/cloud/secretmanager/v1" },
367+ {Path : "google/cloud/secretmanager/v1beta2" },
368+ },
369+ },
370+ },
371+ },
372+ wantErr : errAPIAlreadyExists ,
373+ },
374+ {
375+ name : "fail if api duplicated" ,
376+ apis : []string {
377+ "google/cloud/secretmanager/v1beta2" ,
378+ "google/cloud/secretmanager/v1beta2" ,
379+ },
380+ wantErr : errAPIDuplicate ,
381+ },
382+ {
383+ name : "python doesn't support updating existing library" ,
384+ apis : []string {"google/cloud/secretmanager/v1beta2" },
385+ cfg : & config.Config {
386+ Language : config .LanguagePython ,
387+ Libraries : []* config.Library {
388+ {
389+ Name : "google-cloud-secretmanager" ,
390+ Version : "1.2.3" ,
391+ APIs : []* config.API {
392+ {Path : "google/cloud/secretmanager/v1" },
393+ {Path : "google/cloud/secretmanager/v1beta2" },
394+ },
395+ },
396+ },
397+ },
398+ wantErr : errLibraryAlreadyExists ,
399+ },
400+ } {
401+ t .Run (test .name , func (t * testing.T ) {
402+ tmpDir := t .TempDir ()
403+ t .Chdir (tmpDir )
404+ if err := yaml .Write (config .LibrarianYAML , test .cfg ); err != nil {
405+ t .Fatal (err )
406+ }
407+ _ , _ , err := addLibrary (test .cfg , test .apis ... )
408+ if ! errors .Is (err , test .wantErr ) {
409+ t .Fatalf ("expected error %v, got %v" , test .wantErr , err )
410+ }
411+ })
412+ }
413+ }
414+
290415func TestAddLibrary_Preview (t * testing.T ) {
291416 for _ , test := range []struct {
292417 name string
0 commit comments