1// 2// Copyright 2021, Patrick Webster 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15// 16 17package gitlab 18 19import ( 20 "net/http" 21 "reflect" 22 "testing" 23 "time" 24) 25 26func TestListProjectAccessTokens(t *testing.T) { 27 mux, server, client := setup(t) 28 defer teardown(server) 29 30 mux.HandleFunc("/api/v4/projects/1/access_tokens", func(w http.ResponseWriter, r *http.Request) { 31 testMethod(t, r, http.MethodGet) 32 mustWriteHTTPResponse(t, w, "testdata/list_project_access_tokens.json") 33 }) 34 35 projectAccessTokens, _, err := client.ProjectAccessTokens.ListProjectAccessTokens(1, &ListProjectAccessTokensOptions{Page: 1, PerPage: 20}) 36 if err != nil { 37 t.Errorf("ProjectAccessTokens.ListProjectAccessTokens returned error: %v", err) 38 } 39 40 time1, err := time.Parse(time.RFC3339, "2021-03-09T21:11:47.271Z") 41 if err != nil { 42 t.Errorf("ProjectAccessTokens.ListProjectAccessTokens returned error: %v", err) 43 } 44 time2, err := time.Parse(time.RFC3339, "2021-03-09T21:11:47.340Z") 45 if err != nil { 46 t.Errorf("ProjectAccessTokens.ListProjectAccessTokens returned error: %v", err) 47 } 48 49 want := []*ProjectAccessToken{ 50 { 51 ID: 1876, 52 UserID: 2453, 53 Name: "token 10", 54 Scopes: []string{"api", "read_api", "read_repository", "write_repository"}, 55 CreatedAt: &time1, 56 Active: true, 57 Revoked: false, 58 AccessLevel: AccessLevelValue(40), 59 }, 60 { 61 ID: 1877, 62 UserID: 2456, 63 Name: "token 8", 64 Scopes: []string{"api", "read_api", "read_repository", "write_repository"}, 65 CreatedAt: &time2, 66 Active: true, 67 Revoked: false, 68 AccessLevel: AccessLevelValue(30), 69 }, 70 } 71 72 if !reflect.DeepEqual(want, projectAccessTokens) { 73 t.Errorf("ProjectAccessTokens.ListProjectAccessTokens returned %+v, want %+v", projectAccessTokens, want) 74 } 75} 76 77func TestCreateProjectAccessToken(t *testing.T) { 78 mux, server, client := setup(t) 79 defer teardown(server) 80 81 mux.HandleFunc("/api/v4/projects/1/access_tokens", func(w http.ResponseWriter, r *http.Request) { 82 testMethod(t, r, http.MethodPost) 83 mustWriteHTTPResponse(t, w, "testdata/create_project_access_token.json") 84 }) 85 86 projectAccessToken, _, err := client.ProjectAccessTokens.CreateProjectAccessToken(1, nil) 87 if err != nil { 88 t.Errorf("ProjectAccessTokens.CreateProjectAccessToken returned error: %v", err) 89 } 90 91 time1, err := time.Parse(time.RFC3339, "2021-03-09T21:11:47.271Z") 92 if err != nil { 93 t.Errorf("ProjectAccessTokens.CreateProjectAccessToken returned error: %v", err) 94 } 95 want := &ProjectAccessToken{ 96 ID: 1876, 97 UserID: 2453, 98 Name: "token 10", 99 Scopes: []string{"api", "read_api", "read_repository", "write_repository"}, 100 ExpiresAt: nil, 101 CreatedAt: &time1, 102 Active: true, 103 Revoked: false, 104 Token: "2UsevZE1x1ZdFZW4MNzH", 105 AccessLevel: AccessLevelValue(40), 106 } 107 108 if !reflect.DeepEqual(want, projectAccessToken) { 109 t.Errorf("ProjectAccessTokens.CreateProjectAccessToken returned %+v, want %+v", projectAccessToken, want) 110 } 111} 112 113func TestDeleteProjectAccessToken(t *testing.T) { 114 mux, server, client := setup(t) 115 defer teardown(server) 116 117 mux.HandleFunc("/api/v4/projects/1/access_tokens/1234", func(w http.ResponseWriter, r *http.Request) { 118 testMethod(t, r, http.MethodDelete) 119 }) 120 121 _, err := client.ProjectAccessTokens.DeleteProjectAccessToken("1", 1234) 122 if err != nil { 123 t.Errorf("Pipelines.DeleteProjectAccessToken returned error: %v", err) 124 } 125} 126