github.com/abemedia/appcast@v0.4.0/source/gitlab/gitlab_test.go (about)

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