File: loader_issue212_test.go

package info (click to toggle)
golang-github-getkin-kin-openapi 0.124.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,288 kB
  • sloc: sh: 344; makefile: 4
file content (95 lines) | stat: -rw-r--r-- 2,256 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package openapi3

import (
	"encoding/json"
	"testing"

	"github.com/stretchr/testify/require"
)

func TestIssue212(t *testing.T) {
	spec := `
openapi: 3.0.1
info:
  title: 'test'
  version: 1.0.0
servers:
  - url: /api

paths:
  /available-products:
    get:
      operationId: getAvailableProductCollection
      responses:
        "200":
          description: test
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/AvailableProduct"

components:
  schemas:
    AvailableProduct:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
        name:
          type: string
        media:
          type: object
          properties:
            documents:
              type: array
              items:
                allOf:
                  - $ref: "#/components/schemas/AvailableProduct/properties/previewImage/allOf/0"
                  - type: object
                    properties:
                      uri:
                        type: string
                        pattern: ^\/documents\/[0-9a-f]{64}$
        previewImage:
          allOf:
            - type: object
              required:
                - id
                - uri
              properties:
                id:
                  type: string
                uri:
                  type: string
            - type: object
              properties:
                uri:
                  type: string
                  pattern: ^\/images\/[0-9a-f]{64}$
`

	loader := NewLoader()
	doc, err := loader.LoadFromData([]byte(spec))
	require.NoError(t, err)
	err = doc.Validate(loader.Context)
	require.NoError(t, err)

	expected, err := json.Marshal(&Schema{
		Type:     &Types{"object"},
		Required: []string{"id", "uri"},
		Properties: Schemas{
			"id":  {Value: &Schema{Type: &Types{"string"}}},
			"uri": {Value: &Schema{Type: &Types{"string"}}},
		},
	},
	)
	require.NoError(t, err)
	got, err := json.Marshal(doc.Components.Schemas["AvailableProduct"].Value.Properties["media"].Value.Properties["documents"].Value.Items.Value.AllOf[0].Value)
	require.NoError(t, err)

	require.Equal(t, expected, got)
}