Skip to content

Commit

Permalink
chore: convert team service and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
susanpann committed Nov 1, 2023
1 parent e5978db commit f9aac34
Show file tree
Hide file tree
Showing 2 changed files with 200 additions and 0 deletions.
79 changes: 79 additions & 0 deletions pkg/teams/team_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"github.com/OctopusDeploy/go-octopusdeploy/v2/internal"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/constants"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/core"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/newclient"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/resources"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/services"
"github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/services/api"
Expand All @@ -25,6 +26,8 @@ func NewTeamService(sling *sling.Sling, uriTemplate string) *TeamService {
}

// Add creates a new team.
//
// Deprecated: use teams.Add()
func (s *TeamService) Add(team *Team) (*Team, error) {
if IsNil(team) {
return nil, internal.CreateInvalidParameterError(constants.OperationAdd, constants.ParameterTeam)
Expand All @@ -46,6 +49,8 @@ func (s *TeamService) Add(team *Team) (*Team, error) {
// Delete will delete a team if it is not a built-in team (i.e. the field,
// CanBeDeleted is true). If the team cannot be deleted or an error occurs, it
// returns an error.
//
// Deprecated: use teams.Delete()
func (s *TeamService) Delete(team *Team) error {
if team == nil {
return internal.CreateInvalidParameterError(constants.OperationDelete, constants.ParameterTeam)
Expand All @@ -62,6 +67,8 @@ func (s *TeamService) Delete(team *Team) error {
// Get returns a collection of teams based on the criteria defined by its input
// query parameter. If an error occurs, an empty collection is returned along
// with the associated error.
//
// Deprecated: use teams.Get()
func (s *TeamService) Get(teamsQuery TeamsQuery) (*resources.Resources[*Team], error) {
path, err := s.GetURITemplate().Expand(teamsQuery)
if err != nil {
Expand All @@ -78,6 +85,8 @@ func (s *TeamService) Get(teamsQuery TeamsQuery) (*resources.Resources[*Team], e

// GetAll returns all teams. If none can be found or an error occurs, it
// returns an empty collection.
//
// Deprecated: use teams.GetAll()
func (s *TeamService) GetAll() ([]*Team, error) {
items := []*Team{}
path, err := services.GetAllPath(s)
Expand All @@ -91,6 +100,8 @@ func (s *TeamService) GetAll() ([]*Team, error) {

// GetByID returns the team that matches the input ID. If one cannot be found,
// it returns nil and an error.
//
// Deprecated: use teams.GetById()
func (s *TeamService) GetByID(id string) (*Team, error) {
if internal.IsEmpty(id) {
return nil, internal.CreateInvalidParameterError(constants.OperationGetByID, constants.ParameterID)
Expand Down Expand Up @@ -125,6 +136,8 @@ func (s *TeamService) GetByPartialName(partialName string) ([]*Team, error) {
}

// Update modifies a team based on the one provided as input.
//
// Deprecated: use teams.Update()
func (s *TeamService) Update(team *Team) (*Team, error) {
path, err := services.GetUpdatePath(s, team)
if err != nil {
Expand All @@ -150,3 +163,69 @@ func (s *TeamService) GetScopedUserRoles(team Team, query core.SkipTakeQuery) (*

return resp.(*resources.Resources[*userroles.ScopedUserRole]), nil
}

// --- new ---

const template = "/api/{spaceId}/teams{/id}{?skip,take,ids,partialName}"
const scopedUserRolesTemplate = "/api/teams{/id}/scopeduserroles"

// Add creates a new team.
func Add(client newclient.Client, team *Team) (*Team, error) {
return newclient.Add[Team](client, template, team.SpaceID, team)
}

// Get returns a collection of teams based on the criteria defined by its
// input query parameter.
func Get(client newclient.Client, spaceID string, teamsQuery TeamsQuery) (*resources.Resources[*Team], error) {
return newclient.GetByQuery[Team](client, template, spaceID, teamsQuery)
}

// GetByID returns the team that matches the input ID.
func GetByID(client newclient.Client, spaceID string, ID string) (*Team, error) {
return newclient.GetByID[Team](client, template, spaceID, ID)
}

// Update modifies a team based on the one provided as input.
func Update(client newclient.Client, team *Team) (*Team, error) {
return newclient.Update[Team](client, template, team.SpaceID, team.ID, team)
}

// GetAll returns all teams. If an error occurs, it returns nil.
func GetAll(client newclient.Client, spaceID string) ([]*Team, error) {
return newclient.GetAll[Team](client, template, spaceID)
}

// Delete will delete a team if it is not a built-in team (i.e. the field,
// CanBeDeleted is true). If the team cannot be deleted or an error occurs, it
// returns an error.
func Delete(client newclient.Client, team *Team) error {
if team == nil {
return internal.CreateInvalidParameterError(constants.OperationDelete, constants.ParameterTeam)
}

if !team.CanBeDeleted {
return internal.CreateBuiltInTeamsCannotDeleteError()
}

return newclient.DeleteByID(client, template, team.SpaceID, team.ID)
}

// func GetScopedUserRoles(client newclient.Client, team *Team, query core.SkipTakeQuery) (*[]*userroles.ScopedUserRole, error) {
// values, _ := uritemplates.Struct2map(query)
// if values == nil {
// values = map[string]any{}
// }

// values["id"] = team.ID
// path, err := client.URITemplateCache().Expand(scopedUserRolesTemplate, values)
// if err != nil {
// return nil, err
// }

// res, err := newclient.Get[[]*userroles.ScopedUserRole](client.HttpSession(), path)
// if err != nil {
// return nil, err
// }

// return res, nil
// }
121 changes: 121 additions & 0 deletions test/e2e/team_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,3 +168,124 @@ func TestTeamServiceUpdate(t *testing.T) {
IsEqualTeams(t, createdTeam, updatedTeam)
defer DeleteTestTeam(t, client, updatedTeam)
}

// --- new ---
func TestTeamSetAddGetDelete_NewClient(t *testing.T) {
client := getOctopusClient()
require.NotNil(t, client)

team := CreateTestTeam_NewClient(t, client)
require.NotNil(t, team)
defer DeleteTestTeam_NewClient(t, client, team)

teamToCompare, err := teams.GetByID(client, team.SpaceID, team.GetID())
require.NoError(t, err)
require.NotNil(t, teamToCompare)
IsEqualTeams(t, team, teamToCompare)
}

func TestTeamServiceGetAll_NewClient(t *testing.T) {
client := getOctopusClient()
require.NotNil(t, client)

// create 10 test teams (to be deleted)
for i := 0; i < 10; i++ {
team := CreateTestTeam_NewClient(t, client)
require.NotNil(t, team)
defer DeleteTestTeam_NewClient(t, client, team)
}

allTeams, err := teams.GetAll(client, client.GetSpaceID())
require.NoError(t, err)
require.NotNil(t, allTeams)
require.True(t, len(allTeams) >= 10)
}

func TestTeamServiceGetByID_NewClient(t *testing.T) {
client := getOctopusClient()
require.NotNil(t, client)

id := internal.GetRandomName()
team, err := teams.GetByID(client, client.GetSpaceID(), id)
require.Error(t, err)
require.Nil(t, team)

// create 2 test teams (to be deleted)
for i := 0; i < 2; i++ {
team := CreateTestTeam_NewClient(t, client)
require.NotNil(t, team)
defer DeleteTestTeam_NewClient(t, client, team)
}

allTeams, err := teams.GetAll(client, client.GetSpaceID())
require.NoError(t, err)
require.NotNil(t, allTeams)

for _, team := range allTeams {
teamToCompare, err := teams.GetByID(client, team.SpaceID, team.GetID())
require.NoError(t, err)
IsEqualTeams(t, team, teamToCompare)
}
}

func TestTeamServiceUpdate_NewClient(t *testing.T) {
client := getOctopusClient()
require.NotNil(t, client)

createdTeam := CreateTestTeam_NewClient(t, client)
updatedTeam := UpdateTeam_NewClient(t, client, createdTeam)
IsEqualTeams(t, createdTeam, updatedTeam)
defer DeleteTestTeam_NewClient(t, client, updatedTeam)
}

func CreateTestTeam_NewClient(t *testing.T, client *client.Client) *teams.Team {
if client == nil {
client = getOctopusClient()
}
require.NotNil(t, client)

name := internal.GetRandomName()

team := teams.NewTeam(name)
require.NoError(t, team.Validate())

createdTeam, err := teams.Add(client, team)
require.NoError(t, err)
require.NotNil(t, createdTeam)
require.NotEmpty(t, createdTeam.GetID())
require.Equal(t, name, createdTeam.Name)

return createdTeam
}

func DeleteTestTeam_NewClient(t *testing.T, client *client.Client, team *teams.Team) {
require.NotNil(t, team)

if client == nil {
client = getOctopusClient()
}
require.NotNil(t, client)

err := teams.Delete(client, team)
assert.NoError(t, err)

// verify the delete operation was successful
teams, err := teams.GetByID(client, team.SpaceID, team.GetID())
assert.Error(t, err)
assert.Nil(t, teams)
}

func UpdateTeam_NewClient(t *testing.T, client *client.Client, team *teams.Team) *teams.Team {
require.NotNil(t, team)

if client == nil {
client = getOctopusClient()
}
require.NotNil(t, client)

updatedTeam, err := teams.Update(client, team)
require.NoError(t, err)
require.NotNil(t, updatedTeam)

return updatedTeam
}

0 comments on commit f9aac34

Please sign in to comment.