-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathversion_test.go
More file actions
145 lines (123 loc) · 4.55 KB
/
Copy pathversion_test.go
File metadata and controls
145 lines (123 loc) · 4.55 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// Copyright 2026 Princess Beef Heavy Industries / Dave Shanley
// SPDX-License-Identifier: MIT
package libasyncapi
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestDetectAsyncAPIVersion_Valid300(t *testing.T) {
spec := []byte(`asyncapi: "3.0.0"`)
version, err := DetectAsyncAPIVersion(spec)
require.NoError(t, err)
assert.Equal(t, "3.0.0", version)
}
func TestDetectAsyncAPIVersion_Valid301(t *testing.T) {
spec := []byte(`asyncapi: "3.0.1"`)
version, err := DetectAsyncAPIVersion(spec)
require.NoError(t, err)
assert.Equal(t, "3.0.1", version)
}
func TestDetectAsyncAPIVersion_UnquotedVersion(t *testing.T) {
spec := []byte(`asyncapi: 3.0.0`)
version, err := DetectAsyncAPIVersion(spec)
require.NoError(t, err)
assert.Equal(t, "3.0.0", version)
}
func TestDetectAsyncAPIVersion_WithOtherFields(t *testing.T) {
spec := []byte(`asyncapi: "3.0.0"
info:
title: Test API
version: "1.0.0"`)
version, err := DetectAsyncAPIVersion(spec)
require.NoError(t, err)
assert.Equal(t, "3.0.0", version)
}
func TestDetectAsyncAPIVersion_MissingAsyncAPIField(t *testing.T) {
spec := []byte(`openapi: "3.0.0"`)
_, err := DetectAsyncAPIVersion(spec)
assert.ErrorIs(t, err, ErrNoAsyncAPIVersion)
}
func TestDetectAsyncAPIVersion_EmptySpec(t *testing.T) {
spec := []byte(``)
_, err := DetectAsyncAPIVersion(spec)
assert.ErrorIs(t, err, ErrInvalidYAML)
}
func TestDetectAsyncAPIVersion_InvalidYAML(t *testing.T) {
spec := []byte(`{{{invalid`)
_, err := DetectAsyncAPIVersion(spec)
assert.ErrorIs(t, err, ErrInvalidYAML)
}
func TestDetectAsyncAPIVersion_EmptyValue(t *testing.T) {
spec := []byte(`asyncapi: ""`)
_, err := DetectAsyncAPIVersion(spec)
assert.ErrorIs(t, err, ErrNoAsyncAPIVersion)
}
func TestParseAsyncAPIVersion_Valid300(t *testing.T) {
specInfo, err := ParseAsyncAPIVersion("3.0.0")
require.NoError(t, err)
require.NotNil(t, specInfo)
assert.Equal(t, "3.0.0", specInfo.Version)
assert.Equal(t, "asyncapi", specInfo.SpecType)
assert.Equal(t, uint64(3), specInfo.VersionParsed.Major())
assert.Equal(t, uint64(0), specInfo.VersionParsed.Minor())
assert.Equal(t, uint64(0), specInfo.VersionParsed.Patch())
}
func TestParseAsyncAPIVersion_Valid301(t *testing.T) {
specInfo, err := ParseAsyncAPIVersion("3.0.1")
require.NoError(t, err)
require.NotNil(t, specInfo)
assert.Equal(t, uint64(3), specInfo.VersionParsed.Major())
assert.Equal(t, uint64(0), specInfo.VersionParsed.Minor())
assert.Equal(t, uint64(1), specInfo.VersionParsed.Patch())
}
func TestParseAsyncAPIVersion_Valid310(t *testing.T) {
specInfo, err := ParseAsyncAPIVersion("3.1.0")
require.NoError(t, err)
require.NotNil(t, specInfo)
assert.Equal(t, uint64(3), specInfo.VersionParsed.Major())
assert.Equal(t, uint64(1), specInfo.VersionParsed.Minor())
}
func TestParseAsyncAPIVersion_WithVPrefix(t *testing.T) {
specInfo, err := ParseAsyncAPIVersion("v3.0.0")
require.NoError(t, err)
require.NotNil(t, specInfo)
assert.Equal(t, "v3.0.0", specInfo.Version)
assert.Equal(t, uint64(3), specInfo.VersionParsed.Major())
}
func TestParseAsyncAPIVersion_AsyncAPI2NotSupported(t *testing.T) {
_, err := ParseAsyncAPIVersion("2.6.0")
assert.ErrorIs(t, err, ErrAsyncAPI2NotSupported)
}
func TestParseAsyncAPIVersion_AsyncAPI200NotSupported(t *testing.T) {
_, err := ParseAsyncAPIVersion("2.0.0")
assert.ErrorIs(t, err, ErrAsyncAPI2NotSupported)
}
func TestParseAsyncAPIVersion_InvalidVersionString(t *testing.T) {
_, err := ParseAsyncAPIVersion("invalid")
assert.ErrorIs(t, err, ErrInvalidAsyncAPIVersion)
}
func TestParseAsyncAPIVersion_Version1NotSupported(t *testing.T) {
_, err := ParseAsyncAPIVersion("1.0.0")
assert.ErrorIs(t, err, ErrInvalidAsyncAPIVersion)
}
func TestIsAsyncAPI3_True(t *testing.T) {
assert.True(t, IsAsyncAPI3("3.0.0"))
assert.True(t, IsAsyncAPI3("3.0.1"))
assert.True(t, IsAsyncAPI3("3.1.0"))
assert.True(t, IsAsyncAPI3("v3.0.0"))
}
func TestIsAsyncAPI3_False(t *testing.T) {
assert.False(t, IsAsyncAPI3("2.6.0"))
assert.False(t, IsAsyncAPI3("2.0.0"))
assert.False(t, IsAsyncAPI3("1.0.0"))
assert.False(t, IsAsyncAPI3("invalid"))
assert.False(t, IsAsyncAPI3(""))
}
func TestDefaultSchemaFormat(t *testing.T) {
assert.Equal(t, "application/vnd.aai.asyncapi+json;version=3.0.0", DefaultSchemaFormat("3.0.0"))
assert.Equal(t, "application/vnd.aai.asyncapi+json;version=3.0.1", DefaultSchemaFormat("3.0.1"))
assert.Equal(t, "application/vnd.aai.asyncapi+json;version=3.1.0", DefaultSchemaFormat("3.1.0"))
// Verify v-prefix is stripped
assert.Equal(t, "application/vnd.aai.asyncapi+json;version=3.0.0", DefaultSchemaFormat("v3.0.0"))
}