Skip to content

Commit 748d74e

Browse files
committed
UpdatE
1 parent 635eb8e commit 748d74e

File tree

3 files changed

+48
-19
lines changed

3 files changed

+48
-19
lines changed

tools/cli/internal/cli/filter/filter.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ package filter
1616

1717
import (
1818
"fmt"
19+
"log"
1920

21+
"github.com/getkin/kin-openapi/openapi3"
22+
"github.com/mongodb/openapi/tools/cli/internal/apiversion"
2023
"github.com/mongodb/openapi/tools/cli/internal/cli/flag"
2124
"github.com/mongodb/openapi/tools/cli/internal/cli/usage"
2225
"github.com/mongodb/openapi/tools/cli/internal/openapi"
@@ -41,20 +44,33 @@ func (o *Opts) Run() error {
4144
return err
4245
}
4346

47+
var filteredOAS *openapi3.T
4448
// If a version is provided, versioning filters will also be applied.
45-
filters := filter.FiltersWithoutVersioning
4649
if o.version != "" {
47-
filters = filter.DefaultFilters
50+
filteredOAS, err = FilterForVersion(specInfo.Spec, o.version, o.env)
51+
} else {
52+
filters := filter.FiltersWithoutVersioning
53+
metadata := filter.NewMetadata(nil, o.env)
54+
filteredOAS, err = filter.ApplyFilters(specInfo.Spec, metadata, filters)
4855
}
4956

50-
filteredOAS, err := filter.ApplyFilters(specInfo.Spec, filter.NewMetadata(nil, o.env), filters)
5157
if err != nil {
5258
return err
5359
}
5460

5561
return openapi.Save(o.outputPath, filteredOAS, o.format, o.fs)
5662
}
5763

64+
func FilterForVersion(oas *openapi3.T, version string, env string) (result *openapi3.T, err error) {
65+
log.Printf("Filtering OpenAPI document by version %q", version)
66+
apiVersion, err := apiversion.New(apiversion.WithVersion(version))
67+
if err != nil {
68+
return nil, err
69+
}
70+
71+
return filter.ApplyFilters(oas, filter.NewMetadata(apiVersion, env), filter.DefaultFilters)
72+
}
73+
5874
func (o *Opts) PreRunE(_ []string) error {
5975
if o.basePath == "" {
6076
return fmt.Errorf("no OAS detected. Please, use the flag %s to include the base OAS", flag.Base)

tools/cli/internal/cli/filter/filter_test.go

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727

2828
func TestSuccessfulFilter_Run(t *testing.T) {
2929
fs := afero.NewMemMapFs()
30+
t.Parallel()
3031

3132
opts := &Opts{
3233
basePath: "../../../test/data/base_spec.json",
@@ -42,16 +43,39 @@ func TestSuccessfulFilter_Run(t *testing.T) {
4243
newSpec, err := loadRunResultOas(fs, opts.outputPath)
4344
require.NoError(t, err)
4445

45-
// // check all paths are kept
46+
// check all paths are kept
4647
for _, pathItem := range newSpec.Spec.Paths.Map() {
47-
// method
4848
for _, operation := range pathItem.Operations() {
49-
// check extension is removed
49+
// check extensions are removed at the operation level
5050
require.Nil(t, operation.Extensions)
5151
}
5252
}
5353
}
5454

55+
func TestSuccessfulFilterWithVersion_Run(t *testing.T) {
56+
fs := afero.NewMemMapFs()
57+
t.Parallel()
58+
59+
opts := &Opts{
60+
basePath: "../../../test/data/base_spec.json",
61+
outputPath: "filtered-oas.yaml",
62+
fs: fs,
63+
env: "dev",
64+
version: "2023-01-01",
65+
}
66+
67+
if err := opts.Run(); err != nil {
68+
t.Fatalf("Run() unexpected error: %v", err)
69+
}
70+
71+
s, err := loadRunResultOas(fs, opts.outputPath)
72+
require.NoError(t, err)
73+
// assert /api/atlas/v2/groups/{groupId}:migrate does not exist in filtered spec as it is from a newer version
74+
paths := s.Spec.Paths.Map()
75+
require.Contains(t, paths, "/api/atlas/v2/groups")
76+
require.NotContains(t, paths, "/api/atlas/v2/groups/{groupId}:migrate")
77+
}
78+
5579
func TestOpts_PreRunE(t *testing.T) {
5680
testCases := []struct {
5781
wantErr require.ErrorAssertionFunc

tools/cli/internal/cli/split/split.go

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,10 @@ import (
2020
"strings"
2121

2222
"github.com/getkin/kin-openapi/openapi3"
23-
"github.com/mongodb/openapi/tools/cli/internal/apiversion"
23+
"github.com/mongodb/openapi/tools/cli/internal/cli/filter"
2424
"github.com/mongodb/openapi/tools/cli/internal/cli/flag"
2525
"github.com/mongodb/openapi/tools/cli/internal/cli/usage"
2626
"github.com/mongodb/openapi/tools/cli/internal/openapi"
27-
"github.com/mongodb/openapi/tools/cli/internal/openapi/filter"
2827
"github.com/spf13/afero"
2928
"github.com/spf13/cobra"
3029
)
@@ -51,7 +50,7 @@ func (o *Opts) Run() error {
5150
}
5251

5352
for _, version := range versions {
54-
filteredOAS, err := o.filter(specInfo.Spec, version)
53+
filteredOAS, err := filter.FilterForVersion(specInfo.Spec, version, o.env)
5554
if err != nil {
5655
return err
5756
}
@@ -74,16 +73,6 @@ func (o *Opts) Run() error {
7473
return nil
7574
}
7675

77-
func (o *Opts) filter(oas *openapi3.T, version string) (result *openapi3.T, err error) {
78-
log.Printf("Filtering OpenAPI document by version %q", version)
79-
apiVersion, err := apiversion.New(apiversion.WithVersion(version))
80-
if err != nil {
81-
return nil, err
82-
}
83-
84-
return filter.ApplyFilters(oas, filter.NewMetadata(apiVersion, o.env), filter.DefaultFilters)
85-
}
86-
8776
func (o *Opts) saveVersionedOas(oas *openapi3.T, version string) error {
8877
path := o.basePath
8978
if o.outputPath != "" {

0 commit comments

Comments
 (0)