feat: port delete
from influxdb
(#98)
This commit is contained in:
224
internal/cmd/delete/delete_test.go
Normal file
224
internal/cmd/delete/delete_test.go
Normal file
@ -0,0 +1,224 @@
|
||||
package delete_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/golang/mock/gomock"
|
||||
"github.com/influxdata/influx-cli/v2/internal/api"
|
||||
"github.com/influxdata/influx-cli/v2/internal/cmd"
|
||||
"github.com/influxdata/influx-cli/v2/internal/cmd/delete"
|
||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||
"github.com/influxdata/influx-cli/v2/pkg/influxid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
tmock "github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestClient_Delete(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
id1, _ := influxid.IDFromString("1111111111111111")
|
||||
id2, _ := influxid.IDFromString("2222222222222222")
|
||||
|
||||
start, _ := time.Parse(time.RFC3339Nano, "2020-01-01T00:00:00Z")
|
||||
stop, _ := time.Parse(time.RFC3339Nano, "2021-01-01T00:00:00Z")
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
params delete.Params
|
||||
defaultOrgName string
|
||||
registerExpectations func(*testing.T, *mock.MockDeleteApi)
|
||||
expectedErr string
|
||||
}{
|
||||
{
|
||||
name: "by IDs",
|
||||
params: delete.Params{
|
||||
OrgBucketParams: cmd.OrgBucketParams{
|
||||
OrgParams: cmd.OrgParams{
|
||||
OrgID: id1,
|
||||
},
|
||||
BucketParams: cmd.BucketParams{
|
||||
BucketID: id2,
|
||||
},
|
||||
},
|
||||
Start: start.Format(time.RFC3339Nano),
|
||||
Stop: stop.Format(time.RFC3339Nano),
|
||||
},
|
||||
defaultOrgName: "my-default-org",
|
||||
registerExpectations: func(t *testing.T, delApi *mock.MockDeleteApi) {
|
||||
delApi.EXPECT().PostDelete(gomock.Any()).Return(api.ApiPostDeleteRequest{ApiService: delApi})
|
||||
delApi.EXPECT().PostDeleteExecute(tmock.MatchedBy(func(in api.ApiPostDeleteRequest) bool {
|
||||
body := in.GetDeletePredicateRequest()
|
||||
return assert.NotNil(t, body) &&
|
||||
assert.Equal(t, id1.String(), *in.GetOrgID()) &&
|
||||
assert.Nil(t, in.GetOrg()) &&
|
||||
assert.Equal(t, id2.String(), *in.GetBucketID()) &&
|
||||
assert.Nil(t, in.GetBucket()) &&
|
||||
assert.Equal(t, start, body.GetStart()) &&
|
||||
assert.Equal(t, stop, body.GetStop()) &&
|
||||
assert.Nil(t, body.Predicate)
|
||||
})).Return(nil)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "by org ID, bucket name",
|
||||
params: delete.Params{
|
||||
OrgBucketParams: cmd.OrgBucketParams{
|
||||
OrgParams: cmd.OrgParams{
|
||||
OrgID: id1,
|
||||
},
|
||||
BucketParams: cmd.BucketParams{
|
||||
BucketName: "my-bucket",
|
||||
},
|
||||
},
|
||||
Start: start.Format(time.RFC3339Nano),
|
||||
Stop: stop.Format(time.RFC3339Nano),
|
||||
},
|
||||
defaultOrgName: "my-default-org",
|
||||
registerExpectations: func(t *testing.T, delApi *mock.MockDeleteApi) {
|
||||
delApi.EXPECT().PostDelete(gomock.Any()).Return(api.ApiPostDeleteRequest{ApiService: delApi})
|
||||
delApi.EXPECT().PostDeleteExecute(tmock.MatchedBy(func(in api.ApiPostDeleteRequest) bool {
|
||||
body := in.GetDeletePredicateRequest()
|
||||
return assert.NotNil(t, body) &&
|
||||
assert.Equal(t, id1.String(), *in.GetOrgID()) &&
|
||||
assert.Nil(t, in.GetOrg()) &&
|
||||
assert.Equal(t, "my-bucket", *in.GetBucket()) &&
|
||||
assert.Nil(t, in.GetBucketID()) &&
|
||||
assert.Equal(t, start, body.GetStart()) &&
|
||||
assert.Equal(t, stop, body.GetStop()) &&
|
||||
assert.Nil(t, body.Predicate)
|
||||
})).Return(nil)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "by org name, bucket ID",
|
||||
params: delete.Params{
|
||||
OrgBucketParams: cmd.OrgBucketParams{
|
||||
OrgParams: cmd.OrgParams{
|
||||
OrgName: "my-org",
|
||||
},
|
||||
BucketParams: cmd.BucketParams{
|
||||
BucketID: id2,
|
||||
},
|
||||
},
|
||||
Start: start.Format(time.RFC3339Nano),
|
||||
Stop: stop.Format(time.RFC3339Nano),
|
||||
Predicate: `foo = "bar"`,
|
||||
},
|
||||
defaultOrgName: "my-default-org",
|
||||
registerExpectations: func(t *testing.T, delApi *mock.MockDeleteApi) {
|
||||
delApi.EXPECT().PostDelete(gomock.Any()).Return(api.ApiPostDeleteRequest{ApiService: delApi})
|
||||
delApi.EXPECT().PostDeleteExecute(tmock.MatchedBy(func(in api.ApiPostDeleteRequest) bool {
|
||||
body := in.GetDeletePredicateRequest()
|
||||
return assert.NotNil(t, body) &&
|
||||
assert.Equal(t, "my-org", *in.GetOrg()) &&
|
||||
assert.Nil(t, in.GetOrgID()) &&
|
||||
assert.Equal(t, id2.String(), *in.GetBucketID()) &&
|
||||
assert.Nil(t, in.GetBucket()) &&
|
||||
assert.Equal(t, start, body.GetStart()) &&
|
||||
assert.Equal(t, stop, body.GetStop()) &&
|
||||
assert.Equal(t, `foo = "bar"`, body.GetPredicate())
|
||||
})).Return(nil)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "by names",
|
||||
params: delete.Params{
|
||||
OrgBucketParams: cmd.OrgBucketParams{
|
||||
OrgParams: cmd.OrgParams{},
|
||||
BucketParams: cmd.BucketParams{
|
||||
BucketName: "my-bucket",
|
||||
},
|
||||
},
|
||||
Start: start.Format(time.RFC3339Nano),
|
||||
Stop: stop.Format(time.RFC3339Nano),
|
||||
Predicate: `foo = "bar"`,
|
||||
},
|
||||
defaultOrgName: "my-default-org",
|
||||
registerExpectations: func(t *testing.T, delApi *mock.MockDeleteApi) {
|
||||
delApi.EXPECT().PostDelete(gomock.Any()).Return(api.ApiPostDeleteRequest{ApiService: delApi})
|
||||
delApi.EXPECT().PostDeleteExecute(tmock.MatchedBy(func(in api.ApiPostDeleteRequest) bool {
|
||||
body := in.GetDeletePredicateRequest()
|
||||
return assert.NotNil(t, body) &&
|
||||
assert.Equal(t, "my-default-org", *in.GetOrg()) &&
|
||||
assert.Nil(t, in.GetOrgID()) &&
|
||||
assert.Equal(t, "my-bucket", *in.GetBucket()) &&
|
||||
assert.Nil(t, in.GetBucketID()) &&
|
||||
assert.Equal(t, start, body.GetStart()) &&
|
||||
assert.Equal(t, stop, body.GetStop()) &&
|
||||
assert.Equal(t, `foo = "bar"`, body.GetPredicate())
|
||||
})).Return(nil)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "no org",
|
||||
expectedErr: delete.ErrMustSpecifyOrg.Error(),
|
||||
},
|
||||
{
|
||||
name: "no bucket",
|
||||
defaultOrgName: "my-default-org",
|
||||
expectedErr: delete.ErrMustSpecifyBucket.Error(),
|
||||
},
|
||||
{
|
||||
name: "bad start",
|
||||
params: delete.Params{
|
||||
OrgBucketParams: cmd.OrgBucketParams{
|
||||
BucketParams: cmd.BucketParams{
|
||||
BucketName: "my-bucket",
|
||||
},
|
||||
},
|
||||
Start: "the beginning",
|
||||
Stop: stop.Format(time.RFC3339Nano),
|
||||
Predicate: `foo = "bar"`,
|
||||
},
|
||||
defaultOrgName: "my-default-org",
|
||||
expectedErr: `"the beginning" cannot be parsed`,
|
||||
},
|
||||
{
|
||||
name: "bad stop",
|
||||
params: delete.Params{
|
||||
OrgBucketParams: cmd.OrgBucketParams{
|
||||
OrgParams: cmd.OrgParams{},
|
||||
BucketParams: cmd.BucketParams{
|
||||
BucketName: "my-bucket",
|
||||
},
|
||||
},
|
||||
Start: start.Format(time.RFC3339Nano),
|
||||
Stop: "the end",
|
||||
Predicate: `foo = "bar"`,
|
||||
},
|
||||
defaultOrgName: "my-default-org",
|
||||
expectedErr: `"the end" cannot be parsed`,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
tc := tc
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ctrl := gomock.NewController(t)
|
||||
api := mock.NewMockDeleteApi(ctrl)
|
||||
if tc.registerExpectations != nil {
|
||||
tc.registerExpectations(t, api)
|
||||
}
|
||||
|
||||
client := delete.Client{
|
||||
CLI: cmd.CLI{ActiveConfig: config.Config{Org: tc.defaultOrgName}},
|
||||
DeleteApi: api,
|
||||
}
|
||||
err := client.Delete(context.Background(), &tc.params)
|
||||
|
||||
if tc.expectedErr != "" {
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), tc.expectedErr)
|
||||
return
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
})
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user