| 
12 | 12 | // See the License for the specific language governing permissions and  | 
13 | 13 | // limitations under the License.  | 
14 | 14 | package filter  | 
 | 15 | + | 
 | 16 | +import (  | 
 | 17 | +	"testing"  | 
 | 18 | + | 
 | 19 | +	"github.com/getkin/kin-openapi/openapi3"  | 
 | 20 | +	"github.com/mongodb/openapi/tools/cli/internal/apiversion"  | 
 | 21 | +	"github.com/stretchr/testify/assert"  | 
 | 22 | +	"github.com/stretchr/testify/require"  | 
 | 23 | +)  | 
 | 24 | + | 
 | 25 | +func TestNewMetadata(t *testing.T) {  | 
 | 26 | +	version := &apiversion.APIVersion{}  | 
 | 27 | +	env := "test-env"  | 
 | 28 | +	metadata := NewMetadata(version, env)  | 
 | 29 | + | 
 | 30 | +	assert.Equal(t, version, metadata.targetVersion)  | 
 | 31 | +	assert.Equal(t, env, metadata.targetEnv)  | 
 | 32 | +}  | 
 | 33 | + | 
 | 34 | +func TestValidateMetadata(t *testing.T) {  | 
 | 35 | +	t.Run("Valid metadata", func(t *testing.T) {  | 
 | 36 | +		metadata := &Metadata{}  | 
 | 37 | +		err := validateMetadata(metadata)  | 
 | 38 | +		assert.NoError(t, err)  | 
 | 39 | +	})  | 
 | 40 | + | 
 | 41 | +	t.Run("Nil metadata", func(t *testing.T) {  | 
 | 42 | +		err := validateMetadata(nil)  | 
 | 43 | +		assert.Error(t, err)  | 
 | 44 | +		assert.Equal(t, "metadata is nil", err.Error())  | 
 | 45 | +	})  | 
 | 46 | +}  | 
 | 47 | + | 
 | 48 | +func TestDuplicateOas(t *testing.T) {  | 
 | 49 | +	doc := &openapi3.T{  | 
 | 50 | +		Info: &openapi3.Info{  | 
 | 51 | +			Title:   "Test API",  | 
 | 52 | +			Version: "1.0.0",  | 
 | 53 | +		},  | 
 | 54 | +	}  | 
 | 55 | + | 
 | 56 | +	duplicateDoc, err := duplicateOas(doc)  | 
 | 57 | +	require.NoError(t, err)  | 
 | 58 | +	require.NotNil(t, duplicateDoc)  | 
 | 59 | +	assert.Equal(t, doc.Info.Title, duplicateDoc.Info.Title)  | 
 | 60 | +	assert.Equal(t, doc.Info.Version, duplicateDoc.Info.Version)  | 
 | 61 | +}  | 
 | 62 | + | 
 | 63 | +func TestApplyFilters(t *testing.T) {  | 
 | 64 | +	doc := &openapi3.T{  | 
 | 65 | +		Info: &openapi3.Info{  | 
 | 66 | +			Title:   "Test API",  | 
 | 67 | +			Version: "1.0.0",  | 
 | 68 | +		},  | 
 | 69 | +	}  | 
 | 70 | +	metadata := &Metadata{}  | 
 | 71 | + | 
 | 72 | +	t.Run("Nil document", func(t *testing.T) {  | 
 | 73 | +		_, err := ApplyFilters(nil, metadata, DefaultFilters)  | 
 | 74 | +		assert.Error(t, err)  | 
 | 75 | +		assert.Equal(t, "openapi document is nil", err.Error())  | 
 | 76 | +	})  | 
 | 77 | + | 
 | 78 | +	t.Run("Nil metadata", func(t *testing.T) {  | 
 | 79 | +		_, err := ApplyFilters(doc, nil, DefaultFilters)  | 
 | 80 | +		assert.Error(t, err)  | 
 | 81 | +		assert.Equal(t, "metadata is nil", err.Error())  | 
 | 82 | +	})  | 
 | 83 | + | 
 | 84 | +	t.Run("Invalid metadata", func(t *testing.T) {  | 
 | 85 | +		_, err := ApplyFilters(doc, metadata, DefaultFilters)  | 
 | 86 | +		assert.Equal(t, "target environment is empty", err.Error())  | 
 | 87 | +	})  | 
 | 88 | + | 
 | 89 | +	t.Run("Missing versioning metadata", func(t *testing.T) {  | 
 | 90 | +		metadata := &Metadata{  | 
 | 91 | +			targetEnv: "dev",  | 
 | 92 | +		}  | 
 | 93 | +		_, err := ApplyFilters(doc, metadata, DefaultFilters)  | 
 | 94 | +		assert.Equal(t, "failed to validate metadata for filter *filter.VersioningExtensionFilter with: target version is nil", err.Error())  | 
 | 95 | +	})  | 
 | 96 | + | 
 | 97 | +	t.Run("Valid metadata for default filters", func(t *testing.T) {  | 
 | 98 | +		version, err := apiversion.New(apiversion.WithVersion("2023-11-15"))  | 
 | 99 | +		require.NoError(t, err)  | 
 | 100 | +		metadata := &Metadata{  | 
 | 101 | +			targetEnv:     "dev",  | 
 | 102 | +			targetVersion: version,  | 
 | 103 | +		}  | 
 | 104 | + | 
 | 105 | +		filteredDoc, err := ApplyFilters(doc, metadata, DefaultFilters)  | 
 | 106 | +		require.NoError(t, err)  | 
 | 107 | +		assert.NotNil(t, filteredDoc)  | 
 | 108 | +	})  | 
 | 109 | +}  | 
 | 110 | + | 
 | 111 | +func TestDefaultFilters(t *testing.T) {  | 
 | 112 | +	doc := &openapi3.T{}  | 
 | 113 | +	metadata := &Metadata{}  | 
 | 114 | +	filters := DefaultFilters(doc, metadata)  | 
 | 115 | + | 
 | 116 | +	assert.Len(t, filters, 7)  | 
 | 117 | +}  | 
 | 118 | + | 
 | 119 | +func TestFiltersWithoutVersioning(t *testing.T) {  | 
 | 120 | +	doc := &openapi3.T{}  | 
 | 121 | +	metadata := &Metadata{}  | 
 | 122 | +	filters := FiltersWithoutVersioning(doc, metadata)  | 
 | 123 | + | 
 | 124 | +	assert.Len(t, filters, 5)  | 
 | 125 | +}  | 
 | 126 | + | 
 | 127 | +func TestFiltersToGetVersions(t *testing.T) {  | 
 | 128 | +	doc := &openapi3.T{}  | 
 | 129 | +	metadata := &Metadata{}  | 
 | 130 | +	filters := FiltersToGetVersions(doc, metadata)  | 
 | 131 | + | 
 | 132 | +	assert.Len(t, filters, 1)  | 
 | 133 | +}  | 
0 commit comments