fix: Accept bucket ID or bucket name arguments (#151)

* fix: Accept bucket ID or bucket name arguments

* chore: Change order, prioritising bucket ID over bucket name argument

* fix: Ensure name or ID is used to print error
This commit is contained in:
Stuart Carnie
2021-06-29 08:52:34 +10:00
committed by GitHub
parent a058fe7e0b
commit 8adffc2bca
4 changed files with 231 additions and 72 deletions

View File

@ -3,6 +3,7 @@ package bucket_schema_test
import (
"bytes"
"context"
"fmt"
"os"
"path/filepath"
"strings"
@ -16,6 +17,7 @@ import (
"github.com/influxdata/influx-cli/v2/clients/bucket_schema"
"github.com/influxdata/influx-cli/v2/internal/mock"
"github.com/influxdata/influx-cli/v2/internal/testutils"
"github.com/influxdata/influx-cli/v2/pkg/influxid"
"github.com/stretchr/testify/assert"
tmock "github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
@ -25,9 +27,9 @@ func TestClient_Update(t *testing.T) {
t.Parallel()
var (
orgID = "dead"
bucketID = "f00d"
measurementID = "1010"
orgID = influxid.MustIDFromString("deadf00dbaadf00d")
bucketID = influxid.MustIDFromString("f00ddeadf00dbaad")
measurementID = influxid.MustIDFromString("1010f00ddeedfeed")
createdAt = time.Date(2004, 4, 9, 2, 15, 0, 0, time.UTC)
updatedAt = time.Date(2009, 9, 1, 2, 15, 0, 0, time.UTC)
)
@ -45,7 +47,9 @@ func TestClient_Update(t *testing.T) {
type args struct {
OrgName string
OrgID influxid.ID
BucketName string
BucketID influxid.ID
Name string
ColumnsFile string
ExtendedOutput bool
@ -61,8 +65,8 @@ func TestClient_Update(t *testing.T) {
a.params = bucket_schema.UpdateParams{
OrgBucketParams: clients.OrgBucketParams{
OrgParams: clients.OrgParams{OrgName: args.OrgName},
BucketParams: clients.BucketParams{BucketName: args.BucketName},
OrgParams: clients.OrgParams{OrgName: args.OrgName, OrgID: args.OrgID},
BucketParams: clients.BucketParams{BucketName: args.BucketName, BucketID: args.BucketID},
},
Name: args.Name,
ColumnsFile: colFile,
@ -78,8 +82,8 @@ func TestClient_Update(t *testing.T) {
var buckets []api.Bucket
if len(n) == 1 {
bucket := api.NewBucket(n[0], nil)
bucket.SetOrgID(orgID)
bucket.SetId(bucketID)
bucket.SetOrgID(orgID.String())
bucket.SetId(bucketID.String())
bucket.SetName(n[0])
buckets = []api.Bucket{*bucket}
}
@ -92,8 +96,11 @@ func TestClient_Update(t *testing.T) {
a.buckets.EXPECT().
GetBucketsExecute(tmock.MatchedBy(func(in api.ApiGetBucketsRequest) bool {
return (in.GetOrg() != nil && *in.GetOrg() == a.params.OrgName) &&
(in.GetName() != nil && *in.GetName() == a.params.BucketName)
matchOrg := (in.GetOrg() != nil && *in.GetOrg() == a.params.OrgName) ||
(in.GetOrgID() != nil && a.params.OrgID.Valid() && *in.GetOrgID() == a.params.OrgID.String())
matchBucket := (in.GetName() != nil && *in.GetName() == a.params.BucketName) ||
(in.GetId() != nil && a.params.BucketID.Valid() && *in.GetId() == a.params.BucketID.String())
return matchOrg && matchBucket
})).
Return(api.Buckets{Buckets: &buckets}, nil)
}
@ -117,22 +124,22 @@ func TestClient_Update(t *testing.T) {
return func(t *testing.T, a *setupArgs) {
t.Helper()
req := api.ApiGetMeasurementSchemasRequest{ApiService: a.schemas}.BucketID(bucketID)
req := api.ApiGetMeasurementSchemasRequest{ApiService: a.schemas}.BucketID(bucketID.String())
a.schemas.EXPECT().
GetMeasurementSchemas(gomock.Any(), bucketID).
GetMeasurementSchemas(gomock.Any(), bucketID.String()).
Return(req)
a.schemas.EXPECT().
GetMeasurementSchemasExecute(tmock.MatchedBy(func(in api.ApiGetMeasurementSchemasRequest) bool {
return (in.GetOrgID() != nil && *in.GetOrgID() == orgID) &&
in.GetBucketID() == bucketID &&
return (in.GetOrgID() != nil && *in.GetOrgID() == orgID.String()) &&
in.GetBucketID() == bucketID.String() &&
(in.GetName() != nil && *in.GetName() == a.params.Name)
})).
Return(api.MeasurementSchemaList{
MeasurementSchemas: []api.MeasurementSchema{
{
Id: measurementID,
Id: measurementID.String(),
Name: a.params.Name,
Columns: a.cols,
CreatedAt: createdAt,
@ -147,21 +154,22 @@ func TestClient_Update(t *testing.T) {
return func(t *testing.T, a *setupArgs) {
t.Helper()
req := api.ApiUpdateMeasurementSchemaRequest{ApiService: a.schemas}.BucketID(bucketID).MeasurementID(measurementID)
req := api.ApiUpdateMeasurementSchemaRequest{ApiService: a.schemas}.BucketID(bucketID.String()).MeasurementID(measurementID.String())
a.schemas.EXPECT().
UpdateMeasurementSchema(gomock.Any(), bucketID, measurementID).
UpdateMeasurementSchema(gomock.Any(), bucketID.String(), measurementID.String()).
Return(req)
a.schemas.EXPECT().
UpdateMeasurementSchemaExecute(tmock.MatchedBy(func(in api.ApiUpdateMeasurementSchemaRequest) bool {
return cmp.Equal(in.GetOrgID(), &orgID) &&
cmp.Equal(in.GetBucketID(), bucketID) &&
cmp.Equal(in.GetMeasurementID(), measurementID) &&
orgIDPtr := orgID.String()
return cmp.Equal(in.GetOrgID(), &orgIDPtr) &&
cmp.Equal(in.GetBucketID(), bucketID.String()) &&
cmp.Equal(in.GetMeasurementID(), measurementID.String()) &&
cmp.Equal(in.GetMeasurementSchemaUpdateRequest().Columns, a.cols)
})).
Return(api.MeasurementSchema{
Id: measurementID,
Id: measurementID.String(),
Name: a.params.Name,
Columns: a.cols,
CreatedAt: createdAt,
@ -207,7 +215,7 @@ func TestClient_Update(t *testing.T) {
expErr: `bucket "my-bucket" not found`,
},
{
name: "update succeeds",
name: "update succeeds with org name and bucket name",
opts: opts(
withArgs(args{OrgName: "my-org", BucketName: "my-bucket", Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"),
@ -218,7 +226,52 @@ func TestClient_Update(t *testing.T) {
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
`^1010\s+cpu\s+f00d$`,
fmt.Sprintf(`^%s\s+cpu\s+%s$`, measurementID, bucketID),
),
},
{
name: "update succeeds with org id and bucket name",
opts: opts(
withArgs(args{OrgID: orgID, BucketName: "my-bucket", Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expGetMeasurementSchema(),
expUpdate(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s$`, measurementID, bucketID),
),
},
{
name: "update succeeds with org id and bucket id",
opts: opts(
withArgs(args{OrgID: orgID, BucketID: bucketID, Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expGetMeasurementSchema(),
expUpdate(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s$`, measurementID, bucketID),
),
},
{
name: "update succeeds with org name and bucket id",
opts: opts(
withArgs(args{OrgName: "my-org", BucketID: bucketID, Name: "cpu", ColumnsFile: "columns.csv"}),
withCols("columns.csv"),
expGetBuckets("my-bucket"),
expGetMeasurementSchema(),
expUpdate(),
),
expLines: lines(
`^ID\s+Measurement Name\s+Bucket ID$`,
fmt.Sprintf(`^%s\s+cpu\s+%s$`, measurementID, bucketID),
),
},
{
@ -232,9 +285,9 @@ func TestClient_Update(t *testing.T) {
),
expLines: lines(
`^ID\s+Measurement Name\s+Column Name\s+Column Type\s+Column Data Type\s+Bucket ID$`,
`^1010\s+cpu\s+time\s+timestamp\s+f00d$`,
`^1010\s+cpu\s+host\s+tag\s+f00d$`,
`^1010\s+cpu\s+usage_user\s+field\s+float\s+f00d$`,
fmt.Sprintf(`^%s\s+cpu\s+time\s+timestamp\s+%s$`, measurementID, bucketID),
fmt.Sprintf(`^%s\s+cpu\s+host\s+tag\s+%s$`, measurementID, bucketID),
fmt.Sprintf(`^%s\s+cpu\s+usage_user\s+field\s+float\s+%s$`, measurementID, bucketID),
),
},
}