/internal/openapi/generator/data/textGenerator_test.go

https://github.com/swagger-mock/swagger-mock · Go · 114 lines · 94 code · 20 blank · 0 comment · 4 complexity · 094a7fa4a47f69e099e350ea5191328c MD5 · raw file

  1. package data
  2. import (
  3. "context"
  4. "math/rand"
  5. "testing"
  6. "time"
  7. "github.com/getkin/kin-openapi/openapi3"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestTextGenerator_GenerateDataBySchema_MaxLengthLessThanMinLength_Error(t *testing.T) {
  11. textGeneratorInstance := &textGenerator{}
  12. schema := openapi3.NewSchema()
  13. var maxLength uint64 = 4
  14. schema.MinLength = 5
  15. schema.MaxLength = &maxLength
  16. data, err := textGeneratorInstance.GenerateDataBySchema(context.Background(), schema)
  17. assert.EqualError(t, err, "[textGenerator] max length cannot be less than min length")
  18. assert.Equal(t, "", data)
  19. }
  20. func TestTextGenerator_GenerateDataBySchema_MaxLengthLessThan5_RandomStringOfGivenLength(t *testing.T) {
  21. textGeneratorInstance := &textGenerator{}
  22. schema := openapi3.NewSchema()
  23. var maxLength uint64 = 4
  24. schema.MaxLength = &maxLength
  25. data, err := textGeneratorInstance.GenerateDataBySchema(context.Background(), schema)
  26. assert.NoError(t, err)
  27. assert.Len(t, data, 4)
  28. }
  29. func TestTextGenerator_GenerateDataBySchema_MinAndMaxLength_LengthOfStringInRange(t *testing.T) {
  30. randomSource := rand.NewSource(time.Now().UnixNano())
  31. textGeneratorInstance := &textGenerator{
  32. generator: &rangedTextGenerator{
  33. random: rand.New(randomSource),
  34. },
  35. }
  36. schema := openapi3.NewSchema()
  37. var maxLength uint64 = 1000
  38. schema.MinLength = 10
  39. schema.MaxLength = &maxLength
  40. for i := 0; i < 1000; i++ {
  41. data, err := textGeneratorInstance.GenerateDataBySchema(context.Background(), schema)
  42. assert.NoError(t, err)
  43. assert.GreaterOrEqual(t, len(data.(string)), 10)
  44. assert.LessOrEqual(t, len(data.(string)), 1000)
  45. }
  46. }
  47. func TestTextGenerator_GenerateDataBySchema_NoOptions_LengthOfStringInDefaultRange(t *testing.T) {
  48. randomSource := rand.NewSource(time.Now().UnixNano())
  49. textGeneratorInstance := &textGenerator{
  50. generator: &rangedTextGenerator{
  51. random: rand.New(randomSource),
  52. },
  53. }
  54. schema := openapi3.NewSchema()
  55. for i := 0; i < 1000; i++ {
  56. data, err := textGeneratorInstance.GenerateDataBySchema(context.Background(), schema)
  57. assert.NoError(t, err)
  58. assert.GreaterOrEqual(t, len(data.(string)), 0)
  59. assert.LessOrEqual(t, len(data.(string)), defaultMaxLength)
  60. }
  61. }
  62. func TestTextGenerator_GenerateDataBySchema_MinLengthGreaterThanDefaultMaxLength_LengthOfStringInExpectedRange(t *testing.T) {
  63. randomSource := rand.NewSource(time.Now().UnixNano())
  64. textGeneratorInstance := &textGenerator{
  65. generator: &rangedTextGenerator{
  66. random: rand.New(randomSource),
  67. },
  68. }
  69. schema := openapi3.NewSchema()
  70. schema.MinLength = defaultMaxLength
  71. for i := 0; i < 1000; i++ {
  72. data, err := textGeneratorInstance.GenerateDataBySchema(context.Background(), schema)
  73. assert.NoError(t, err)
  74. assert.GreaterOrEqual(t, len(data.(string)), defaultMaxLength)
  75. assert.LessOrEqual(t, len(data.(string)), 2*defaultMaxLength)
  76. }
  77. }
  78. func TestTextGenerator_GenerateDataBySchema_StrictLength_LengthOfStringHasExpectedLength(t *testing.T) {
  79. randomSource := rand.NewSource(time.Now().UnixNano())
  80. textGeneratorInstance := &textGenerator{
  81. generator: &rangedTextGenerator{
  82. random: rand.New(randomSource),
  83. },
  84. }
  85. schema := openapi3.NewSchema()
  86. var maxLength uint64 = defaultMaxLength
  87. schema.MinLength = defaultMaxLength
  88. schema.MaxLength = &maxLength
  89. for i := 0; i < 1000; i++ {
  90. data, err := textGeneratorInstance.GenerateDataBySchema(context.Background(), schema)
  91. assert.NoError(t, err)
  92. assert.Len(t, data, defaultMaxLength)
  93. }
  94. }