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