github.com/taubyte/tau-cli@v0.1.13-0.20240326000942-487f0d57edfc/lib/project/new_test.go (about)

     1  package projectLib_test
     2  
     3  import (
     4  	"os"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/pterm/pterm"
     9  	projectLib "github.com/taubyte/tau-cli/lib/project"
    10  	authClient "github.com/taubyte/tau-cli/singletons/auth_client"
    11  	"github.com/taubyte/tau-cli/singletons/config"
    12  	"github.com/taubyte/tau-cli/states"
    13  	httpClient "github.com/taubyte/tau/clients/http/auth"
    14  	"gotest.tools/v3/assert"
    15  )
    16  
    17  func unregisterAndDeleteRepository(client *httpClient.Client, fullname string) error {
    18  	nameSplit := strings.Split(fullname, "/")
    19  	user := nameSplit[0]
    20  	name := nameSplit[1]
    21  
    22  	config, err := client.GetRepositoryByName(fullname)
    23  	if err != nil {
    24  		return err
    25  	}
    26  
    27  	err = client.UnregisterRepository(config.Get().ID())
    28  	if err != nil {
    29  		return err
    30  	}
    31  
    32  	githubClient, err := client.Git().GithubTODO()
    33  	if err != nil {
    34  		return err
    35  	}
    36  
    37  	response, err := githubClient.Repositories.Delete(states.Context, user, name)
    38  	if err != nil {
    39  		if response != nil {
    40  			pterm.Info.Printfln("Github response: %#v", *response)
    41  		}
    42  		return err
    43  	}
    44  
    45  	return nil
    46  }
    47  
    48  func TestNew(t *testing.T) {
    49  	t.Skip("Heavy test, uses current login which needs to have a delete key")
    50  	var (
    51  		projectName = "tau_test_new_project"
    52  		description = "a test project for tau"
    53  		cloneDir    = "_assets"
    54  		user        *httpClient.UserData
    55  		project     *httpClient.Project
    56  		repoData    *httpClient.RawRepoDataOuter
    57  	)
    58  
    59  	// Try to remove
    60  	os.RemoveAll(cloneDir)
    61  
    62  	// Cleanup
    63  	defer func() {
    64  		_client, err := authClient.Load()
    65  		assert.NilError(t, err)
    66  
    67  		err = unregisterAndDeleteRepository(_client, repoData.Configuration.Fullname)
    68  		assert.NilError(t, err)
    69  
    70  		err = unregisterAndDeleteRepository(_client, repoData.Code.Fullname)
    71  		assert.NilError(t, err)
    72  
    73  		_, err = project.Delete()
    74  		assert.NilError(t, err)
    75  
    76  		err = os.RemoveAll(cloneDir)
    77  		assert.NilError(t, err)
    78  
    79  		err = config.Projects().Delete(projectName)
    80  		assert.NilError(t, err)
    81  	}()
    82  
    83  	err := projectLib.New(&projectLib.Project{
    84  		Name:        projectName,
    85  		Description: description,
    86  		Public:      false,
    87  	}, cloneDir, false)
    88  	assert.NilError(t, err)
    89  
    90  	client, err := authClient.Load()
    91  	assert.NilError(t, err)
    92  
    93  	user, err = client.User().Get()
    94  	assert.NilError(t, err)
    95  
    96  	projects, err := client.Projects()
    97  	assert.NilError(t, err)
    98  
    99  	for _, _project := range projects {
   100  		if _project.Name == projectName {
   101  			project = _project
   102  			break
   103  		}
   104  	}
   105  
   106  	repoData, err = project.Repositories()
   107  	assert.NilError(t, err)
   108  
   109  	// Confirm config read from github is accurate
   110  	config, err := client.Git().ReadConfig(user.Login, repoData.Configuration.Name)
   111  	assert.NilError(t, err)
   112  
   113  	assert.Equal(t, config.Name, projectName)
   114  	assert.Equal(t, config.Description, description)
   115  	assert.Equal(t, config.Notification.Email, user.Email)
   116  }