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