diff --git a/internal/core/project.go b/internal/core/project.go index 487b221e9..1e9e632a5 100644 --- a/internal/core/project.go +++ b/internal/core/project.go @@ -218,12 +218,12 @@ func (p *Project) LoadTarget(topts ...TargetOption) (t *Target, err error) { } if err != nil { - return + return nil, err } if t.dir == nil { if t.dir, err = p.dir.Target(t.target.Name); err != nil { - return + return nil, err } } diff --git a/internal/core/project_test.go b/internal/core/project_test.go index a68f502eb..29f9902c1 100644 --- a/internal/core/project_test.go +++ b/internal/core/project_test.go @@ -1,9 +1,27 @@ package core import ( + "fmt" "testing" + + "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" + "github.com/stretchr/testify/require" ) +func projectTargets(t *testing.T, project *Project, numTargets int) (targets []*Target) { + targets = make([]*Target, numTargets) + for i := 0; i < numTargets; i++ { + tt, err := TestTarget(t, project, &vagrant_server.Target{ + ResourceId: fmt.Sprintf("id-%d", i), Name: fmt.Sprintf("target-%d", i), + }) + if err != nil { + t.Error(err) + } + targets = append(targets, tt) + } + return +} + func TestNewProject(t *testing.T) { tp := TestMinimalProject(t) vn := tp.Ref() @@ -11,3 +29,85 @@ func TestNewProject(t *testing.T) { t.Errorf("Creating project failed") } } + +func TestProjectGetTarget(t *testing.T) { + tp := TestMinimalProject(t) + // Add targets to project + targetOne, err := TestTarget(t, tp, &vagrant_server.Target{ResourceId: "id-one", Name: "target-one"}) + if err != nil { + t.Error(err) + } + targetTwo, err := TestTarget(t, tp, &vagrant_server.Target{ResourceId: "id-two", Name: "target-two"}) + if err != nil { + t.Error(err) + } + + // Get by id + one, err := tp.Target("id-one") + require.NoError(t, err) + require.Equal(t, targetOne, one) + + // Get by name + two, err := tp.Target("target-two") + require.NoError(t, err) + require.Equal(t, targetTwo, two) + + // Get target that doesn't exist + noexist, err := tp.Target("ohnooooo") + require.Error(t, err) + require.Nil(t, noexist) +} + +func TestProjectGetTargetNames(t *testing.T) { + tp := TestMinimalProject(t) + + // No targets added + names, err := tp.TargetNames() + require.NoError(t, err) + require.Len(t, names, 0) + + // Add targets to project + projectTargets(t, tp, 3) + + names, err = tp.TargetNames() + require.NoError(t, err) + require.Len(t, names, 3) + require.Contains(t, names, "target-0") + require.Contains(t, names, "target-1") + require.Contains(t, names, "target-2") +} + +func TestProjectGetTargetIds(t *testing.T) { + tp := TestMinimalProject(t) + + // No targets added + ids, err := tp.TargetIds() + require.NoError(t, err) + require.Len(t, ids, 0) + + // Add targets to project + projectTargets(t, tp, 3) + + ids, err = tp.TargetIds() + require.NoError(t, err) + require.Len(t, ids, 3) + require.Contains(t, ids, "id-0") + require.Contains(t, ids, "id-1") + require.Contains(t, ids, "id-2") +} + +func TestProjectGetTargets(t *testing.T) { + tp := TestMinimalProject(t) + + // No targets added + targets, err := tp.Targets() + require.NoError(t, err) + require.Len(t, targets, 0) + + // Add targets to project + projectTargets(t, tp, 3) + + targets, err = tp.Targets() + require.NoError(t, err) + require.Len(t, targets, 3) +} diff --git a/internal/core/testing_target.go b/internal/core/testing_target.go index 4a1d6db35..e37319027 100644 --- a/internal/core/testing_target.go +++ b/internal/core/testing_target.go @@ -27,6 +27,7 @@ func TestTarget(t testing.T, tp *Project, tt *vagrant_server.Target) (target *Ta target, err = tp.LoadTarget([]TargetOption{ WithTargetRef(&vagrant_plugin_sdk.Ref_Target{Project: tp.Ref().(*vagrant_plugin_sdk.Ref_Project), Name: testingTarget.Name}), }...) + tp.project.Targets = append(tp.project.Targets, target.Ref().(*vagrant_plugin_sdk.Ref_Target)) return }