128 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package internal
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| 	"github.com/stretchr/testify/require"
 | |
| )
 | |
| 
 | |
| func TestConfiguration_Validate(t *testing.T) {
 | |
| 	testCases := []struct {
 | |
| 		desc string
 | |
| 		cfg  *Configuration
 | |
| 	}{
 | |
| 		{
 | |
| 			desc: "version",
 | |
| 			cfg: &Configuration{
 | |
| 				Version: "v1.57.0",
 | |
| 				Plugins: []*Plugin{
 | |
| 					{
 | |
| 						Module:  "example.org/foo/bar",
 | |
| 						Import:  "example.org/foo/bar/test",
 | |
| 						Version: "v1.2.3",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "path",
 | |
| 			cfg: &Configuration{
 | |
| 				Version: "v1.57.0",
 | |
| 				Plugins: []*Plugin{
 | |
| 					{
 | |
| 						Module: "example.org/foo/bar",
 | |
| 						Import: "example.org/foo/bar/test",
 | |
| 						Path:   "/my/path",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, test := range testCases {
 | |
| 		test := test
 | |
| 		t.Run(test.desc, func(t *testing.T) {
 | |
| 			t.Parallel()
 | |
| 
 | |
| 			err := test.cfg.Validate()
 | |
| 			require.NoError(t, err)
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func TestConfiguration_Validate_error(t *testing.T) {
 | |
| 	testCases := []struct {
 | |
| 		desc     string
 | |
| 		cfg      *Configuration
 | |
| 		expected string
 | |
| 	}{
 | |
| 		{
 | |
| 			desc:     "missing version",
 | |
| 			cfg:      &Configuration{},
 | |
| 			expected: "root field 'version' is required",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "no plugins",
 | |
| 			cfg: &Configuration{
 | |
| 				Version: "v1.57.0",
 | |
| 			},
 | |
| 			expected: "no plugins defined",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "missing module",
 | |
| 			cfg: &Configuration{
 | |
| 				Version: "v1.57.0",
 | |
| 				Plugins: []*Plugin{
 | |
| 					{
 | |
| 						Module:  "",
 | |
| 						Import:  "example.org/foo/bar/test",
 | |
| 						Version: "v1.2.3",
 | |
| 						Path:    "/my/path",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "field 'module' is required",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "module version and path",
 | |
| 			cfg: &Configuration{
 | |
| 				Version: "v1.57.0",
 | |
| 				Plugins: []*Plugin{
 | |
| 					{
 | |
| 						Module:  "example.org/foo/bar",
 | |
| 						Import:  "example.org/foo/bar/test",
 | |
| 						Version: "v1.2.3",
 | |
| 						Path:    "/my/path",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "invalid configuration: 'version' and 'path' should not be provided at the same time",
 | |
| 		},
 | |
| 		{
 | |
| 			desc: "no module version and path",
 | |
| 			cfg: &Configuration{
 | |
| 				Version: "v1.57.0",
 | |
| 				Plugins: []*Plugin{
 | |
| 					{
 | |
| 						Module: "example.org/foo/bar",
 | |
| 						Import: "example.org/foo/bar/test",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			expected: "missing information: 'version' or 'path' should be provided",
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for _, test := range testCases {
 | |
| 		test := test
 | |
| 		t.Run(test.desc, func(t *testing.T) {
 | |
| 			t.Parallel()
 | |
| 
 | |
| 			err := test.cfg.Validate()
 | |
| 
 | |
| 			assert.EqualError(t, err, test.expected)
 | |
| 		})
 | |
| 	}
 | |
| }
 | 
