diff --git a/project.go b/project.go index 8d2b1f0..b849dbb 100644 --- a/project.go +++ b/project.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net/http" + "net/url" "strconv" "github.com/google/uuid" @@ -65,6 +66,15 @@ func (ps ProjectService) GetAll(ctx context.Context, po PageOptions) (p Page[Pro return } +func (ps ProjectService) Latest(ctx context.Context, name string) (p Project, err error) { + req, err := ps.client.newRequest(ctx, http.MethodGet, fmt.Sprintf("/api/v1/project/latest/%s", url.PathEscape(name))) + if err != nil { + return + } + _, err = ps.client.doRequest(req, &p) + return +} + func (ps ProjectService) GetProjectsForName(ctx context.Context, name string, excludeInactive, onlyRoot bool) (p []Project, err error) { params := map[string]string{ "name": name, diff --git a/project_test.go b/project_test.go index b22b671..742d769 100644 --- a/project_test.go +++ b/project_test.go @@ -48,3 +48,45 @@ func TestProjectService_Clone_v4_10(t *testing.T) { require.NoError(t, err) require.Empty(t, token) } +func TestProjectService_Latest(t *testing.T) { + client := setUpContainer(t, testContainerOptions{ + Version: "4.12.7", + APIPermissions: []string{ + PermissionPortfolioManagement, + PermissionViewPortfolio, + }, + }) + var name = "acme-app" + project, err := client.Project.Create(context.Background(), Project{ + Name: name, + Version: "1.0.0", + IsLatest: OptionalBoolOf(true), + }) + require.NoError(t, err) + latest, err := client.Project.Latest(context.Background(), name) + + require.NoError(t, err) + require.Equal(t, project.Version, latest.Version) + + token, err := client.Project.Clone(context.Background(), ProjectCloneRequest{ + ProjectUUID: project.UUID, + Version: "2.0.0", + MakeCloneLatest: OptionalBoolOf(true), + }) + require.NoError(t, err) + require.NotEmpty(t, token) + + for { + processing, err := client.Event.IsBeingProcessed(context.Background(), token) + require.NoError(t, err) + if !processing { + break + } + } + + latest, err = client.Project.Latest(context.Background(), name) + + require.NoError(t, err) + require.Equal(t, "2.0.0", latest.Version) + +}