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

     1  package github_test
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"os"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/abemedia/appcast/internal/test"
    11  	"github.com/abemedia/appcast/source/github"
    12  	gh "github.com/google/go-github/github"
    13  	"golang.org/x/oauth2"
    14  )
    15  
    16  func TestGithub(t *testing.T) {
    17  	token, ok := os.LookupEnv("GITHUB_TOKEN")
    18  	if !ok {
    19  		t.Skip("Missing environment variable: GITHUB_TOKEN")
    20  	}
    21  
    22  	ctx := context.Background()
    23  	ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token})
    24  	client := gh.NewClient(oauth2.NewClient(ctx, ts))
    25  	user, _, err := client.Users.Get(ctx, "")
    26  	if err != nil {
    27  		t.Fatal(err)
    28  	}
    29  
    30  	owner := user.GetLogin()
    31  	repo := fmt.Sprintf("test_%d", time.Now().UnixNano())
    32  
    33  	_, _, err = client.Repositories.Create(ctx, "", &gh.Repository{Name: &repo})
    34  	if err != nil {
    35  		t.Fatal(err)
    36  	}
    37  	t.Cleanup(func() {
    38  		_, err := client.Repositories.Delete(ctx, owner, repo)
    39  		if err != nil {
    40  			t.Fatal(err)
    41  		}
    42  	})
    43  
    44  	_, _, err = client.Repositories.CreateFile(ctx, owner, repo, "test", &gh.RepositoryContentFileOptions{
    45  		Message: gh.String("test"),
    46  		Content: []byte("test"),
    47  	})
    48  	if err != nil {
    49  		t.Fatal(err)
    50  	}
    51  
    52  	for _, r := range test.SourceWant() {
    53  		_, _, err = client.Repositories.CreateRelease(ctx, owner, repo, &gh.RepositoryRelease{
    54  			TagName: gh.String(r.Version),
    55  			Body:    gh.String(r.Description),
    56  		})
    57  		if err != nil {
    58  			t.Fatal(err)
    59  		}
    60  	}
    61  
    62  	s, err := github.New(github.Config{Owner: owner, Repo: repo})
    63  	if err != nil {
    64  		t.Fatal(err)
    65  	}
    66  
    67  	test.Source(t, s, func(version, asset string) string {
    68  		return "https://github.com/" + owner + "/" + repo + "/releases/download/" + version + "/" + asset
    69  	})
    70  }