github.com/google/go-github/v74@v74.0.0/github/users_packages_test.go (about)

     1  // Copyright 2021 The go-github AUTHORS. All rights reserved.
     2  //
     3  // Use of this source code is governed by a BSD-style
     4  // license that can be found in the LICENSE file.
     5  
     6  package github
     7  
     8  import (
     9  	"context"
    10  	"encoding/json"
    11  	"fmt"
    12  	"io"
    13  	"net/http"
    14  	"testing"
    15  
    16  	"github.com/google/go-cmp/cmp"
    17  )
    18  
    19  func TestUsersService_Authenticated_ListPackages(t *testing.T) {
    20  	t.Parallel()
    21  	client, mux, _ := setup(t)
    22  
    23  	mux.HandleFunc("/user/packages", func(w http.ResponseWriter, r *http.Request) {
    24  		testMethod(t, r, "GET")
    25  		testFormValues(t, r, values{"package_type": "container", "visibility": "private"})
    26  		fmt.Fprint(w, `[{
    27  			"id": 197,
    28  			"name": "hello_docker",
    29  			"package_type": "container",
    30  			"version_count": 1,
    31  			"visibility": "private",
    32  			"url": "https://api.github.com/orgs/github/packages/container/hello_docker",
    33  			"created_at": `+referenceTimeStr+`,
    34  			"updated_at": `+referenceTimeStr+`,
    35  			"html_url": "https://github.com/orgs/github/packages/container/package/hello_docker"
    36  		  }]`)
    37  	})
    38  
    39  	ctx := context.Background()
    40  	packages, _, err := client.Users.ListPackages(ctx, "", &PackageListOptions{PackageType: Ptr("container"), Visibility: Ptr("private")})
    41  	if err != nil {
    42  		t.Errorf("Users.Authenticated_ListPackages returned error: %v", err)
    43  	}
    44  
    45  	want := []*Package{{
    46  		ID:           Ptr(int64(197)),
    47  		Name:         Ptr("hello_docker"),
    48  		PackageType:  Ptr("container"),
    49  		VersionCount: Ptr(int64(1)),
    50  		Visibility:   Ptr("private"),
    51  		URL:          Ptr("https://api.github.com/orgs/github/packages/container/hello_docker"),
    52  		HTMLURL:      Ptr("https://github.com/orgs/github/packages/container/package/hello_docker"),
    53  		CreatedAt:    &Timestamp{referenceTime},
    54  		UpdatedAt:    &Timestamp{referenceTime},
    55  	}}
    56  	if !cmp.Equal(packages, want) {
    57  		t.Errorf("Users.Authenticated_ListPackages returned %+v, want %+v", packages, want)
    58  	}
    59  
    60  	const methodName = "ListPackages"
    61  	testBadOptions(t, methodName, func() (err error) {
    62  		_, _, err = client.Users.ListPackages(ctx, "\n", &PackageListOptions{})
    63  		return err
    64  	})
    65  
    66  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
    67  		got, resp, err := client.Users.ListPackages(ctx, "", &PackageListOptions{})
    68  		if got != nil {
    69  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
    70  		}
    71  		return resp, err
    72  	})
    73  }
    74  
    75  func TestUsersService_specifiedUser_ListPackages(t *testing.T) {
    76  	t.Parallel()
    77  	client, mux, _ := setup(t)
    78  
    79  	mux.HandleFunc("/users/u/packages", func(w http.ResponseWriter, r *http.Request) {
    80  		testMethod(t, r, "GET")
    81  		testFormValues(t, r, values{"package_type": "container", "visibility": "public"})
    82  		fmt.Fprint(w, `[{
    83  			"id": 197,
    84  			"name": "hello_docker",
    85  			"package_type": "container",
    86  			"version_count": 1,
    87  			"visibility": "public",
    88  			"url": "https://api.github.com/orgs/github/packages/container/hello_docker",
    89  			"created_at": `+referenceTimeStr+`,
    90  			"updated_at": `+referenceTimeStr+`,
    91  			"html_url": "https://github.com/orgs/github/packages/container/package/hello_docker"
    92  		  }]`)
    93  	})
    94  
    95  	ctx := context.Background()
    96  	packages, _, err := client.Users.ListPackages(ctx, "u", &PackageListOptions{PackageType: Ptr("container"), Visibility: Ptr("public")})
    97  	if err != nil {
    98  		t.Errorf("Users.specifiedUser_ListPackages returned error: %v", err)
    99  	}
   100  
   101  	want := []*Package{{
   102  		ID:           Ptr(int64(197)),
   103  		Name:         Ptr("hello_docker"),
   104  		PackageType:  Ptr("container"),
   105  		VersionCount: Ptr(int64(1)),
   106  		Visibility:   Ptr("public"),
   107  		URL:          Ptr("https://api.github.com/orgs/github/packages/container/hello_docker"),
   108  		HTMLURL:      Ptr("https://github.com/orgs/github/packages/container/package/hello_docker"),
   109  		CreatedAt:    &Timestamp{referenceTime},
   110  		UpdatedAt:    &Timestamp{referenceTime},
   111  	}}
   112  	if !cmp.Equal(packages, want) {
   113  		t.Errorf("Users.specifiedUser_ListPackages returned %+v, want %+v", packages, want)
   114  	}
   115  
   116  	const methodName = "ListPackages"
   117  	testBadOptions(t, methodName, func() (err error) {
   118  		_, _, err = client.Users.ListPackages(ctx, "\n", &PackageListOptions{})
   119  		return err
   120  	})
   121  
   122  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   123  		got, resp, err := client.Users.ListPackages(ctx, "", &PackageListOptions{})
   124  		if got != nil {
   125  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   126  		}
   127  		return resp, err
   128  	})
   129  }
   130  
   131  func TestUsersService_specifiedUser_GetPackage(t *testing.T) {
   132  	t.Parallel()
   133  	client, mux, _ := setup(t)
   134  
   135  	mux.HandleFunc("/users/u/packages/container/hello%2fhello_docker", func(w http.ResponseWriter, r *http.Request) {
   136  		testMethod(t, r, "GET")
   137  		_, err := io.WriteString(w, `{
   138  			"id": 197,
   139  			"name": "hello/hello_docker",
   140  			"package_type": "container",
   141  			"version_count": 1,
   142  			"visibility": "private",
   143  			"url": "https://api.github.com/orgs/github/packages/container/hello%2Fhello_docker",
   144  			"created_at": `+referenceTimeStr+`,
   145  			"updated_at": `+referenceTimeStr+`,
   146  			"html_url": "https://github.com/orgs/github/packages/container/package/hello%2Fhello_docker"
   147  		  }`)
   148  		if err != nil {
   149  			t.Fatal("Failed to write test response: ", err)
   150  		}
   151  	})
   152  
   153  	ctx := context.Background()
   154  	packages, _, err := client.Users.GetPackage(ctx, "u", "container", "hello/hello_docker")
   155  	if err != nil {
   156  		t.Errorf("Users.GetPackage returned error: %v", err)
   157  	}
   158  
   159  	want := &Package{
   160  		ID:           Ptr(int64(197)),
   161  		Name:         Ptr("hello/hello_docker"),
   162  		PackageType:  Ptr("container"),
   163  		VersionCount: Ptr(int64(1)),
   164  		Visibility:   Ptr("private"),
   165  		URL:          Ptr("https://api.github.com/orgs/github/packages/container/hello%2Fhello_docker"),
   166  		HTMLURL:      Ptr("https://github.com/orgs/github/packages/container/package/hello%2Fhello_docker"),
   167  		CreatedAt:    &Timestamp{referenceTime},
   168  		UpdatedAt:    &Timestamp{referenceTime},
   169  	}
   170  	if !cmp.Equal(packages, want) {
   171  		t.Errorf("Users.specifiedUser_GetPackage returned %+v, want %+v", packages, want)
   172  	}
   173  	const methodName = "GetPackage"
   174  	testBadOptions(t, methodName, func() (err error) {
   175  		_, _, err = client.Users.GetPackage(ctx, "\n", "\n", "\n")
   176  		return err
   177  	})
   178  
   179  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   180  		got, resp, err := client.Users.GetPackage(ctx, "", "", "")
   181  		if got != nil {
   182  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   183  		}
   184  		return resp, err
   185  	})
   186  }
   187  
   188  func TestUsersService_Authenticated_GetPackage(t *testing.T) {
   189  	t.Parallel()
   190  	client, mux, _ := setup(t)
   191  
   192  	mux.HandleFunc("/user/packages/container/hello_docker", func(w http.ResponseWriter, r *http.Request) {
   193  		testMethod(t, r, "GET")
   194  		fmt.Fprint(w, `{
   195  			"id": 197,
   196  			"name": "hello_docker",
   197  			"package_type": "container",
   198  			"version_count": 1,
   199  			"visibility": "private",
   200  			"url": "https://api.github.com/orgs/github/packages/container/hello_docker",
   201  			"created_at": `+referenceTimeStr+`,
   202  			"updated_at": `+referenceTimeStr+`,
   203  			"html_url": "https://github.com/orgs/github/packages/container/package/hello_docker"
   204  		  }`)
   205  	})
   206  
   207  	ctx := context.Background()
   208  	packages, _, err := client.Users.GetPackage(ctx, "", "container", "hello_docker")
   209  	if err != nil {
   210  		t.Errorf("Users.Authenticated_GetPackage returned error: %v", err)
   211  	}
   212  
   213  	want := &Package{
   214  		ID:           Ptr(int64(197)),
   215  		Name:         Ptr("hello_docker"),
   216  		PackageType:  Ptr("container"),
   217  		VersionCount: Ptr(int64(1)),
   218  		Visibility:   Ptr("private"),
   219  		URL:          Ptr("https://api.github.com/orgs/github/packages/container/hello_docker"),
   220  		HTMLURL:      Ptr("https://github.com/orgs/github/packages/container/package/hello_docker"),
   221  		CreatedAt:    &Timestamp{referenceTime},
   222  		UpdatedAt:    &Timestamp{referenceTime},
   223  	}
   224  	if !cmp.Equal(packages, want) {
   225  		t.Errorf("Users.Authenticated_GetPackage returned %+v, want %+v", packages, want)
   226  	}
   227  
   228  	const methodName = "GetPackage"
   229  	testBadOptions(t, methodName, func() (err error) {
   230  		_, _, err = client.Users.GetPackage(ctx, "\n", "\n", "\n")
   231  		return err
   232  	})
   233  
   234  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   235  		got, resp, err := client.Users.GetPackage(ctx, "", "", "")
   236  		if got != nil {
   237  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   238  		}
   239  		return resp, err
   240  	})
   241  }
   242  
   243  func TestUsersService_Authenticated_DeletePackage(t *testing.T) {
   244  	t.Parallel()
   245  	client, mux, _ := setup(t)
   246  
   247  	mux.HandleFunc("/user/packages/container/hello_docker", func(_ http.ResponseWriter, r *http.Request) {
   248  		testMethod(t, r, "DELETE")
   249  	})
   250  
   251  	ctx := context.Background()
   252  	_, err := client.Users.DeletePackage(ctx, "", "container", "hello_docker")
   253  	if err != nil {
   254  		t.Errorf("Users.Authenticated_DeletePackage returned error: %v", err)
   255  	}
   256  
   257  	const methodName = "DeletePackage"
   258  	testBadOptions(t, methodName, func() (err error) {
   259  		_, err = client.Users.DeletePackage(ctx, "\n", "\n", "\n")
   260  		return err
   261  	})
   262  
   263  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   264  		return client.Users.DeletePackage(ctx, "", "", "")
   265  	})
   266  }
   267  
   268  func TestUsersService_specifiedUser_DeletePackage(t *testing.T) {
   269  	t.Parallel()
   270  	client, mux, _ := setup(t)
   271  
   272  	mux.HandleFunc("/users/u/packages/container/hello_docker", func(_ http.ResponseWriter, r *http.Request) {
   273  		testMethod(t, r, "DELETE")
   274  	})
   275  
   276  	ctx := context.Background()
   277  	_, err := client.Users.DeletePackage(ctx, "u", "container", "hello_docker")
   278  	if err != nil {
   279  		t.Errorf("Users.specifiedUser_DeletePackage returned error: %v", err)
   280  	}
   281  
   282  	const methodName = "DeletePackage"
   283  	testBadOptions(t, methodName, func() (err error) {
   284  		_, err = client.Users.DeletePackage(ctx, "\n", "\n", "\n")
   285  		return err
   286  	})
   287  
   288  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   289  		return client.Users.DeletePackage(ctx, "", "", "")
   290  	})
   291  }
   292  
   293  func TestUsersService_Authenticated_RestorePackage(t *testing.T) {
   294  	t.Parallel()
   295  	client, mux, _ := setup(t)
   296  
   297  	mux.HandleFunc("/user/packages/container/hello_docker/restore", func(_ http.ResponseWriter, r *http.Request) {
   298  		testMethod(t, r, "POST")
   299  	})
   300  
   301  	ctx := context.Background()
   302  	_, err := client.Users.RestorePackage(ctx, "", "container", "hello_docker")
   303  	if err != nil {
   304  		t.Errorf("Users.Authenticated_RestorePackage returned error: %v", err)
   305  	}
   306  
   307  	const methodName = "RestorePackage"
   308  	testBadOptions(t, methodName, func() (err error) {
   309  		_, err = client.Users.RestorePackage(ctx, "\n", "", "")
   310  		return err
   311  	})
   312  
   313  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   314  		return client.Users.RestorePackage(ctx, "", "container", "hello_docker")
   315  	})
   316  }
   317  
   318  func TestUsersService_specifiedUser_RestorePackage(t *testing.T) {
   319  	t.Parallel()
   320  	client, mux, _ := setup(t)
   321  
   322  	mux.HandleFunc("/users/u/packages/container/hello_docker/restore", func(_ http.ResponseWriter, r *http.Request) {
   323  		testMethod(t, r, "POST")
   324  	})
   325  
   326  	ctx := context.Background()
   327  	_, err := client.Users.RestorePackage(ctx, "u", "container", "hello_docker")
   328  	if err != nil {
   329  		t.Errorf("Users.specifiedUser_RestorePackage returned error: %v", err)
   330  	}
   331  
   332  	const methodName = "RestorePackage"
   333  	testBadOptions(t, methodName, func() (err error) {
   334  		_, err = client.Users.RestorePackage(ctx, "\n", "", "")
   335  		return err
   336  	})
   337  
   338  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   339  		return client.Users.RestorePackage(ctx, "", "container", "hello_docker")
   340  	})
   341  }
   342  
   343  func TestUsersService_Authenticated_ListPackagesVersions(t *testing.T) {
   344  	t.Parallel()
   345  	client, mux, _ := setup(t)
   346  
   347  	m := `{
   348  		"package_type": "container",
   349  		"container": {
   350  			"tags": [
   351  			"latest"
   352  			]
   353  		}
   354  	}`
   355  
   356  	mux.HandleFunc("/user/packages/container/hello_docker/versions", func(w http.ResponseWriter, r *http.Request) {
   357  		testMethod(t, r, "GET")
   358  		fmt.Fprint(w, `[
   359  			{
   360  			  "id": 45763,
   361  			  "name": "sha256:08a44bab0bddaddd8837a8b381aebc2e4b933768b981685a9e088360af0d3dd9",
   362  			  "url": "https://api.github.com/users/octocat/packages/container/hello_docker/versions/45763",
   363  			  "package_html_url": "https://github.com/users/octocat/packages/container/package/hello_docker",
   364  			  "created_at": `+referenceTimeStr+`,
   365  			  "updated_at": `+referenceTimeStr+`,
   366  			  "html_url": "https://github.com/users/octocat/packages/container/hello_docker/45763",
   367  			  "metadata": `+m+`
   368  			}]`)
   369  	})
   370  
   371  	ctx := context.Background()
   372  	opts := &PackageListOptions{
   373  		Ptr("internal"), Ptr("container"), Ptr("deleted"), ListOptions{Page: 1, PerPage: 2},
   374  	}
   375  	packages, _, err := client.Users.PackageGetAllVersions(ctx, "", "container", "hello_docker", opts)
   376  	if err != nil {
   377  		t.Errorf("Users.Authenticated_PackageGetAllVersions returned error: %v", err)
   378  	}
   379  
   380  	want := []*PackageVersion{{
   381  		ID:             Ptr(int64(45763)),
   382  		Name:           Ptr("sha256:08a44bab0bddaddd8837a8b381aebc2e4b933768b981685a9e088360af0d3dd9"),
   383  		URL:            Ptr("https://api.github.com/users/octocat/packages/container/hello_docker/versions/45763"),
   384  		PackageHTMLURL: Ptr("https://github.com/users/octocat/packages/container/package/hello_docker"),
   385  		CreatedAt:      &Timestamp{referenceTime},
   386  		UpdatedAt:      &Timestamp{referenceTime},
   387  		HTMLURL:        Ptr("https://github.com/users/octocat/packages/container/hello_docker/45763"),
   388  		Metadata:       json.RawMessage(m),
   389  	}}
   390  	if !cmp.Equal(packages, want) {
   391  		t.Errorf("Users.PackageGetAllVersions returned %+v, want %+v", packages, want)
   392  	}
   393  
   394  	const methodName = "PackageGetAllVersions"
   395  	testBadOptions(t, methodName, func() (err error) {
   396  		_, _, err = client.Users.PackageGetAllVersions(ctx, "\n", "", "", &PackageListOptions{})
   397  		return err
   398  	})
   399  
   400  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   401  		got, resp, err := client.Users.PackageGetAllVersions(ctx, "", "", "", &PackageListOptions{})
   402  		if got != nil {
   403  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   404  		}
   405  		return resp, err
   406  	})
   407  }
   408  
   409  func TestUsersService_specifiedUser_ListPackagesVersions(t *testing.T) {
   410  	t.Parallel()
   411  	client, mux, _ := setup(t)
   412  
   413  	m := `{
   414  		"package_type": "container",
   415  		"container": {
   416  			"tags": [
   417  			"latest"
   418  			]
   419  		}
   420  	}`
   421  
   422  	mux.HandleFunc("/users/u/packages/container/hello_docker/versions", func(w http.ResponseWriter, r *http.Request) {
   423  		testMethod(t, r, "GET")
   424  		fmt.Fprint(w, `[
   425  			{
   426  			  "id": 45763,
   427  			  "name": "sha256:08a44bab0bddaddd8837a8b381aebc2e4b933768b981685a9e088360af0d3dd9",
   428  			  "url": "https://api.github.com/users/octocat/packages/container/hello_docker/versions/45763",
   429  			  "package_html_url": "https://github.com/users/octocat/packages/container/package/hello_docker",
   430  			  "created_at": `+referenceTimeStr+`,
   431  			  "updated_at": `+referenceTimeStr+`,
   432  			  "html_url": "https://github.com/users/octocat/packages/container/hello_docker/45763",
   433  			  "metadata": `+m+`
   434  			}]`)
   435  	})
   436  
   437  	ctx := context.Background()
   438  	opts := &PackageListOptions{
   439  		Ptr("internal"), Ptr("container"), Ptr("deleted"), ListOptions{Page: 1, PerPage: 2},
   440  	}
   441  	packages, _, err := client.Users.PackageGetAllVersions(ctx, "u", "container", "hello_docker", opts)
   442  	if err != nil {
   443  		t.Errorf("Users.specifiedUser_PackageGetAllVersions returned error: %v", err)
   444  	}
   445  
   446  	want := []*PackageVersion{{
   447  		ID:             Ptr(int64(45763)),
   448  		Name:           Ptr("sha256:08a44bab0bddaddd8837a8b381aebc2e4b933768b981685a9e088360af0d3dd9"),
   449  		URL:            Ptr("https://api.github.com/users/octocat/packages/container/hello_docker/versions/45763"),
   450  		PackageHTMLURL: Ptr("https://github.com/users/octocat/packages/container/package/hello_docker"),
   451  		CreatedAt:      &Timestamp{referenceTime},
   452  		UpdatedAt:      &Timestamp{referenceTime},
   453  		HTMLURL:        Ptr("https://github.com/users/octocat/packages/container/hello_docker/45763"),
   454  		Metadata:       json.RawMessage(m),
   455  	}}
   456  	if !cmp.Equal(packages, want) {
   457  		t.Errorf("Users.specifiedUser_PackageGetAllVersions returned %+v, want %+v", packages, want)
   458  	}
   459  
   460  	const methodName = "PackageGetAllVersions"
   461  	testBadOptions(t, methodName, func() (err error) {
   462  		_, _, err = client.Users.PackageGetAllVersions(ctx, "\n", "", "", &PackageListOptions{})
   463  		return err
   464  	})
   465  
   466  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   467  		got, resp, err := client.Users.PackageGetAllVersions(ctx, "", "", "", &PackageListOptions{})
   468  		if got != nil {
   469  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   470  		}
   471  		return resp, err
   472  	})
   473  }
   474  
   475  func TestUsersService_Authenticated_PackageGetVersion(t *testing.T) {
   476  	t.Parallel()
   477  	client, mux, _ := setup(t)
   478  
   479  	m := `{
   480  		"package_type": "container",
   481  		"container": {
   482  		"tags": [
   483  			"latest"
   484  		]
   485  		}
   486  	}`
   487  
   488  	mux.HandleFunc("/user/packages/container/hello_docker/versions/45763", func(w http.ResponseWriter, r *http.Request) {
   489  		testMethod(t, r, "GET")
   490  		fmt.Fprint(w, `
   491  			{
   492  			  "id": 45763,
   493  			  "name": "sha256:08a44bab0bddaddd8837a8b381aebc2e4b933768b981685a9e088360af0d3dd9",
   494  			  "url": "https://api.github.com/users/octocat/packages/container/hello_docker/versions/45763",
   495  			  "package_html_url": "https://github.com/users/octocat/packages/container/package/hello_docker",
   496  			  "created_at": `+referenceTimeStr+`,
   497  			  "updated_at": `+referenceTimeStr+`,
   498  			  "html_url": "https://github.com/users/octocat/packages/container/hello_docker/45763",
   499  			  "metadata": `+m+`
   500  			}`)
   501  	})
   502  
   503  	ctx := context.Background()
   504  	packages, _, err := client.Users.PackageGetVersion(ctx, "", "container", "hello_docker", 45763)
   505  	if err != nil {
   506  		t.Errorf("Users.PackageGetVersion returned error: %v", err)
   507  	}
   508  
   509  	want := &PackageVersion{
   510  		ID:             Ptr(int64(45763)),
   511  		Name:           Ptr("sha256:08a44bab0bddaddd8837a8b381aebc2e4b933768b981685a9e088360af0d3dd9"),
   512  		URL:            Ptr("https://api.github.com/users/octocat/packages/container/hello_docker/versions/45763"),
   513  		PackageHTMLURL: Ptr("https://github.com/users/octocat/packages/container/package/hello_docker"),
   514  		CreatedAt:      &Timestamp{referenceTime},
   515  		UpdatedAt:      &Timestamp{referenceTime},
   516  		HTMLURL:        Ptr("https://github.com/users/octocat/packages/container/hello_docker/45763"),
   517  		Metadata:       json.RawMessage(m),
   518  	}
   519  	if !cmp.Equal(packages, want) {
   520  		t.Errorf("Users.Authenticated_PackageGetVersion returned %+v, want %+v", packages, want)
   521  	}
   522  
   523  	const methodName = "PackageGetVersion"
   524  	testBadOptions(t, methodName, func() (err error) {
   525  		_, _, err = client.Users.PackageGetVersion(ctx, "\n", "", "", 0)
   526  		return err
   527  	})
   528  
   529  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   530  		got, resp, err := client.Users.PackageGetVersion(ctx, "", "", "", 45763)
   531  		if got != nil {
   532  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   533  		}
   534  		return resp, err
   535  	})
   536  }
   537  
   538  func TestUsersService_specifiedUser_PackageGetVersion(t *testing.T) {
   539  	t.Parallel()
   540  	client, mux, _ := setup(t)
   541  
   542  	m := `{
   543  		"package_type": "container",
   544  		"container": {
   545  			"tags": [
   546  			"latest"
   547  			]
   548  		}
   549  	}`
   550  
   551  	mux.HandleFunc("/users/u/packages/container/hello_docker/versions/45763", func(w http.ResponseWriter, r *http.Request) {
   552  		testMethod(t, r, "GET")
   553  		fmt.Fprint(w, `
   554  			{
   555  			  "id": 45763,
   556  			  "name": "sha256:08a44bab0bddaddd8837a8b381aebc2e4b933768b981685a9e088360af0d3dd9",
   557  			  "url": "https://api.github.com/users/octocat/packages/container/hello_docker/versions/45763",
   558  			  "package_html_url": "https://github.com/users/octocat/packages/container/package/hello_docker",
   559  			  "created_at": `+referenceTimeStr+`,
   560  			  "updated_at": `+referenceTimeStr+`,
   561  			  "html_url": "https://github.com/users/octocat/packages/container/hello_docker/45763",
   562  			  "metadata": `+m+`
   563  			}`)
   564  	})
   565  
   566  	ctx := context.Background()
   567  	packages, _, err := client.Users.PackageGetVersion(ctx, "u", "container", "hello_docker", 45763)
   568  	if err != nil {
   569  		t.Errorf("Users.specifiedUser_PackageGetVersion returned error: %v", err)
   570  	}
   571  
   572  	want := &PackageVersion{
   573  		ID:             Ptr(int64(45763)),
   574  		Name:           Ptr("sha256:08a44bab0bddaddd8837a8b381aebc2e4b933768b981685a9e088360af0d3dd9"),
   575  		URL:            Ptr("https://api.github.com/users/octocat/packages/container/hello_docker/versions/45763"),
   576  		PackageHTMLURL: Ptr("https://github.com/users/octocat/packages/container/package/hello_docker"),
   577  		CreatedAt:      &Timestamp{referenceTime},
   578  		UpdatedAt:      &Timestamp{referenceTime},
   579  		HTMLURL:        Ptr("https://github.com/users/octocat/packages/container/hello_docker/45763"),
   580  		Metadata:       json.RawMessage(m),
   581  	}
   582  	if !cmp.Equal(packages, want) {
   583  		t.Errorf("Users.specifiedUser_PackageGetVersion returned %+v, want %+v", packages, want)
   584  	}
   585  
   586  	const methodName = "PackageGetVersion"
   587  	testBadOptions(t, methodName, func() (err error) {
   588  		_, _, err = client.Users.PackageGetVersion(ctx, "\n", "", "", 0)
   589  		return err
   590  	})
   591  
   592  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   593  		got, resp, err := client.Users.PackageGetVersion(ctx, "", "", "", 45763)
   594  		if got != nil {
   595  			t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
   596  		}
   597  		return resp, err
   598  	})
   599  }
   600  
   601  func TestUsersService_Authenticated_PackageDeleteVersion(t *testing.T) {
   602  	t.Parallel()
   603  	client, mux, _ := setup(t)
   604  
   605  	mux.HandleFunc("/user/packages/container/hello_docker/versions/45763", func(_ http.ResponseWriter, r *http.Request) {
   606  		testMethod(t, r, "DELETE")
   607  	})
   608  
   609  	ctx := context.Background()
   610  	_, err := client.Users.PackageDeleteVersion(ctx, "", "container", "hello_docker", 45763)
   611  	if err != nil {
   612  		t.Errorf("Users.Authenticated_PackageDeleteVersion returned error: %v", err)
   613  	}
   614  
   615  	const methodName = "PackageDeleteVersion"
   616  	testBadOptions(t, methodName, func() (err error) {
   617  		_, err = client.Users.PackageDeleteVersion(ctx, "\n", "", "", 0)
   618  		return err
   619  	})
   620  
   621  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   622  		return client.Users.PackageDeleteVersion(ctx, "", "", "", 45763)
   623  	})
   624  }
   625  
   626  func TestUsersService_specifiedUser_PackageDeleteVersion(t *testing.T) {
   627  	t.Parallel()
   628  	client, mux, _ := setup(t)
   629  
   630  	mux.HandleFunc("/users/u/packages/container/hello_docker/versions/45763", func(_ http.ResponseWriter, r *http.Request) {
   631  		testMethod(t, r, "DELETE")
   632  	})
   633  
   634  	ctx := context.Background()
   635  	_, err := client.Users.PackageDeleteVersion(ctx, "u", "container", "hello_docker", 45763)
   636  	if err != nil {
   637  		t.Errorf("Users.specifiedUser_PackageDeleteVersion returned error: %v", err)
   638  	}
   639  
   640  	const methodName = "PackageDeleteVersion"
   641  	testBadOptions(t, methodName, func() (err error) {
   642  		_, err = client.Users.PackageDeleteVersion(ctx, "\n", "", "", 0)
   643  		return err
   644  	})
   645  
   646  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   647  		return client.Users.PackageDeleteVersion(ctx, "", "", "", 45763)
   648  	})
   649  }
   650  
   651  func TestUsersService_Authenticated_PackageRestoreVersion(t *testing.T) {
   652  	t.Parallel()
   653  	client, mux, _ := setup(t)
   654  
   655  	mux.HandleFunc("/user/packages/container/hello_docker/versions/45763/restore", func(_ http.ResponseWriter, r *http.Request) {
   656  		testMethod(t, r, "POST")
   657  	})
   658  
   659  	ctx := context.Background()
   660  	_, err := client.Users.PackageRestoreVersion(ctx, "", "container", "hello_docker", 45763)
   661  	if err != nil {
   662  		t.Errorf("Users.Authenticated_PackageRestoreVersion returned error: %v", err)
   663  	}
   664  
   665  	const methodName = "PackageRestoreVersion"
   666  	testBadOptions(t, methodName, func() (err error) {
   667  		_, err = client.Users.PackageRestoreVersion(ctx, "\n", "", "", 0)
   668  		return err
   669  	})
   670  
   671  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   672  		return client.Users.PackageRestoreVersion(ctx, "", "", "", 45763)
   673  	})
   674  }
   675  
   676  func TestUsersService_specifiedUser_PackageRestoreVersion(t *testing.T) {
   677  	t.Parallel()
   678  	client, mux, _ := setup(t)
   679  
   680  	mux.HandleFunc("/users/u/packages/container/hello_docker/versions/45763/restore", func(_ http.ResponseWriter, r *http.Request) {
   681  		testMethod(t, r, "POST")
   682  	})
   683  
   684  	ctx := context.Background()
   685  	_, err := client.Users.PackageRestoreVersion(ctx, "u", "container", "hello_docker", 45763)
   686  	if err != nil {
   687  		t.Errorf("Users.specifiedUser_PackageRestoreVersion returned error: %v", err)
   688  	}
   689  
   690  	const methodName = "PackageRestoreVersion"
   691  	testBadOptions(t, methodName, func() (err error) {
   692  		_, err = client.Users.PackageRestoreVersion(ctx, "\n", "", "", 0)
   693  		return err
   694  	})
   695  
   696  	testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
   697  		return client.Users.PackageRestoreVersion(ctx, "", "", "", 45763)
   698  	})
   699  }