github.com/kubri/kubri@v0.5.1-0.20240317001612-bda2aaef967e/source/gitlab/gitlab_test.go (about)

     1  package gitlab_test
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"testing"
     7  	"time"
     8  
     9  	gl "github.com/xanzy/go-gitlab"
    10  
    11  	"github.com/kubri/kubri/internal/test"
    12  	"github.com/kubri/kubri/source/gitlab"
    13  )
    14  
    15  func TestGitlab(t *testing.T) {
    16  	token, ok := os.LookupEnv("GITLAB_TOKEN")
    17  	if !ok {
    18  		t.Skip("Missing environment variable: GITLAB_TOKEN")
    19  	}
    20  
    21  	client, err := gl.NewClient(token)
    22  	if err != nil {
    23  		t.Fatal(err)
    24  	}
    25  
    26  	user, _, err := client.Users.CurrentUser()
    27  	if err != nil {
    28  		t.Fatal(err)
    29  	}
    30  
    31  	owner := user.Username
    32  	repo := fmt.Sprintf("test_%d", time.Now().UnixNano())
    33  	pid := owner + "/" + repo
    34  
    35  	_, _, err = client.Projects.CreateProject(&gl.CreateProjectOptions{
    36  		Name:       &repo,
    37  		Visibility: gl.Ptr(gl.PublicVisibility),
    38  	})
    39  	if err != nil {
    40  		t.Fatal(err)
    41  	}
    42  	t.Cleanup(func() {
    43  		_, err = client.Projects.DeleteProject(pid)
    44  		if err != nil {
    45  			t.Fatal(err)
    46  		}
    47  	})
    48  
    49  	_, _, err = client.RepositoryFiles.CreateFile(pid, "test", &gl.CreateFileOptions{
    50  		Branch:        gl.Ptr("main"),
    51  		CommitMessage: gl.Ptr("test"),
    52  		Content:       gl.Ptr("test"),
    53  	})
    54  	if err != nil {
    55  		t.Fatal(err)
    56  	}
    57  
    58  	for _, r := range test.SourceWant() {
    59  		_, _, err = client.Releases.CreateRelease(pid, &gl.CreateReleaseOptions{
    60  			Description: gl.Ptr(r.Description),
    61  			Ref:         gl.Ptr("main"),
    62  			TagName:     gl.Ptr(r.Version),
    63  		})
    64  		if err != nil {
    65  			t.Fatal(err)
    66  		}
    67  	}
    68  
    69  	s, err := gitlab.New(gitlab.Config{Owner: owner, Repo: repo})
    70  	if err != nil {
    71  		t.Fatal(err)
    72  	}
    73  
    74  	test.Source(t, s, func(version, asset string) string {
    75  		links, _, _ := client.ReleaseLinks.ListReleaseLinks(pid, version, nil)
    76  		for _, link := range links {
    77  			if link.Name == asset {
    78  				return link.URL
    79  			}
    80  		}
    81  		return ""
    82  	})
    83  }