github.com/go-swagger/go-swagger@v0.31.0/generator/media_test.go (about) 1 package generator 2 3 import ( 4 "sort" 5 "testing" 6 7 "github.com/go-openapi/runtime" 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestMediaWellKnownMime(t *testing.T) { 13 w, ok := wellKnownMime(runtime.JSONMime) 14 assert.True(t, ok) 15 assert.Equal(t, jsonSerializer, w) 16 17 w, ok = wellKnownMime(runtime.YAMLMime) 18 assert.True(t, ok) 19 assert.Equal(t, "yaml", w) 20 21 w, ok = wellKnownMime(runtime.JSONMime + "+version=1;param=1") 22 assert.True(t, ok) 23 assert.Equal(t, jsonSerializer, w) 24 25 w, ok = wellKnownMime("unknown") 26 assert.False(t, ok) 27 assert.Equal(t, "", w) 28 } 29 30 func TestMediaMime(t *testing.T) { 31 params := "param=1;param=2" 32 withParams := runtime.JSONMime + ";" + params 33 assert.Equal(t, runtime.JSONMime, mediaMime(runtime.JSONMime)) 34 assert.Equal(t, runtime.JSONMime, mediaMime(withParams)) 35 36 assert.Equal(t, params, mediaParameters(withParams)) 37 assert.Equal(t, "", mediaParameters(runtime.JSONMime)) 38 } 39 40 func TestMediaGoName(t *testing.T) { 41 assert.Equal(t, "StarStar", mediaGoName("*/*")) 42 } 43 44 func TestMediaMakeSerializers(t *testing.T) { 45 app := appGenerator{ 46 Name: "myapp", 47 Receiver: "myReceiver", 48 } 49 50 res, supportsJSON := app.makeSerializers([]string{ 51 runtime.JSONMime, 52 "application/json;param=1", 53 "application/json;param=2", 54 "application/json", 55 "application/json+subtype;param=6", 56 "application/yaml;param=1", 57 runtime.YAMLMime, 58 runtime.YAMLMime + "; param=xy", 59 runtime.YAMLMime + "; param=xy", // duplicate 60 "application/funny;param=x", 61 }, func(media string) (string, bool) { 62 w, ok := knownConsumers[media] 63 if !ok { 64 w = "custom.FunnyConsume()" 65 } 66 return w, true 67 }) 68 assert.True(t, supportsJSON) 69 assert.True(t, sort.IsSorted(res)) 70 assert.Len(t, res, 3) 71 72 for _, ser := range res { 73 assert.NotEmpty(t, ser.AppName) 74 assert.NotEmpty(t, ser.ReceiverName) 75 assert.NotEmpty(t, ser.Implementation) 76 77 switch ser.Name { 78 case jsonSerializer: 79 assert.Len(t, ser.AllSerializers, 2) 80 for _, media := range ser.AllSerializers { 81 assert.Equal(t, ser.AppName, media.AppName) 82 assert.Equal(t, ser.ReceiverName, media.ReceiverName) 83 assert.Equal(t, ser.Implementation, media.Implementation) 84 switch media.MediaType { 85 case "application/json": 86 assert.Len(t, media.Parameters, 2) 87 case "application/json+subtype": 88 assert.Len(t, media.Parameters, 1) 89 default: 90 t.Logf("unexpected media type: %s in %v", media.MediaType, ser.AllSerializers) 91 t.Fail() 92 } 93 } 94 95 case "yaml": 96 assert.Len(t, ser.AllSerializers, 2) 97 for _, media := range ser.AllSerializers { 98 assert.Equal(t, ser.AppName, media.AppName) 99 assert.Equal(t, ser.ReceiverName, media.ReceiverName) 100 assert.Equal(t, ser.Implementation, media.Implementation) 101 switch media.MediaType { 102 case runtime.YAMLMime: 103 assert.Len(t, media.Parameters, 1) 104 case "application/yaml": 105 assert.Len(t, media.Parameters, 1) 106 default: 107 t.Logf("unexpected media type: %s in %v", media.MediaType, ser.AllSerializers) 108 t.Fail() 109 } 110 } 111 112 case "applicationFunny": 113 assert.Len(t, ser.AllSerializers, 1) 114 for _, media := range ser.AllSerializers { 115 assert.Equal(t, ser.AppName, media.AppName) 116 assert.Equal(t, ser.ReceiverName, media.ReceiverName) 117 assert.Equal(t, ser.Implementation, media.Implementation) 118 switch media.MediaType { 119 case "application/funny": 120 assert.Len(t, media.Parameters, 1) 121 default: 122 t.Logf("unexpected media type: %s in %v", media.MediaType, ser.AllSerializers) 123 t.Fail() 124 } 125 } 126 default: 127 t.Logf("unexpected serializer name: %s", ser.Name) 128 t.Fail() 129 } 130 } 131 132 // no json, one non default serializer 133 res, supportsJSON = app.makeSerializers([]string{ 134 "application/yaml", 135 runtime.TextMime, 136 "application/funny", 137 }, func(media string) (string, bool) { 138 w, ok := knownConsumers[media] 139 return w, ok 140 }) 141 assert.False(t, supportsJSON) 142 assert.True(t, sort.IsSorted(res)) 143 assert.Len(t, res, 3) 144 for _, ser := range res { 145 assert.NotEmpty(t, ser.AppName) 146 assert.NotEmpty(t, ser.ReceiverName) 147 switch ser.Name { 148 case "yaml": 149 assert.NotEmpty(t, ser.Implementation) 150 assert.Len(t, ser.AllSerializers, 1) 151 case "txt": 152 assert.NotEmpty(t, ser.Implementation) 153 assert.Len(t, ser.AllSerializers, 1) 154 case "applicationFunny": 155 assert.Empty(t, ser.Implementation) 156 assert.Len(t, ser.AllSerializers, 1) 157 default: 158 t.Logf("unexpected mime type: %s", ser.MediaType) 159 t.Fail() 160 } 161 } 162 163 // empty: defaults as json 164 res, supportsJSON = app.makeSerializers([]string{}, func(_ string) (string, bool) { return "fake", true }) 165 assert.True(t, supportsJSON) 166 assert.True(t, sort.IsSorted(res)) 167 require.Len(t, res, 1) 168 assert.Equal(t, jsonSerializer, res[0].Name) 169 }