1
1
package org.grails.forge.api
2
2
3
+ import com.fasterxml.jackson.core.JsonParser
4
+ import com.fasterxml.jackson.databind.ObjectMapper
5
+ import io.micronaut.http.HttpRequest
6
+ import io.micronaut.http.client.HttpClient
7
+ import io.micronaut.http.client.annotation.Client
8
+ import io.micronaut.json.tree.JsonNode
3
9
import io.micronaut.test.extensions.spock.annotation.MicronautTest
4
10
import jakarta.inject.Inject
5
11
import org.grails.forge.application.ApplicationType
12
+ import org.grails.forge.options.FeatureFilter
6
13
import org.grails.forge.options.GormImpl
7
14
import org.grails.forge.options.JdkVersion
15
+ import org.grails.forge.options.TestFramework
8
16
import org.grails.forge.options.ServletImpl
9
17
import spock.lang.Specification
10
18
11
19
@MicronautTest
12
20
class FeatureControllerSpec extends Specification {
13
21
14
22
@Inject
15
- ApplicationTypeClient client
23
+ ApplicationTypeClient applicationTypeClient
24
+
25
+ @Inject
26
+ @Client (" /" )
27
+ HttpClient httpClient
16
28
17
29
void ' test list features' () {
18
30
when :
19
- List<FeatureDTO > features = client
31
+ List<FeatureDTO > features = applicationTypeClient
20
32
.features(ApplicationType . DEFAULT_OPTION ,
21
33
RequestInfo . LOCAL ,
22
- TestFramework . DEFAULT_OPTION ,
23
- GormImpl . DEFAULT_OPTION ,
24
- ServletImpl . DEFAULT_OPTION ,
25
- JdkVersion . DEFAULT_OPTION ). features
34
+ new FeatureFilter ( test : TestFramework . DEFAULT_OPTION ,
35
+ gorm : GormImpl . DEFAULT_OPTION ,
36
+ servlet : ServletImpl . DEFAULT_OPTION ,
37
+ javaVersion : JdkVersion . DEFAULT_OPTION ) ). features
26
38
27
39
then :
28
40
! features. isEmpty()
29
41
}
30
42
31
43
void ' test community features' () {
32
44
when :
33
- List<FeatureDTO > communityFeatures = client
45
+ List<FeatureDTO > communityFeatures = applicationTypeClient
34
46
.features(ApplicationType . DEFAULT_OPTION ,
35
47
RequestInfo . LOCAL ,
36
- TestFramework . DEFAULT_OPTION ,
37
- GormImpl . DEFAULT_OPTION ,
38
- ServletImpl . DEFAULT_OPTION ,
39
- JdkVersion . DEFAULT_OPTION ). features
48
+ new FeatureFilter ( test : TestFramework . DEFAULT_OPTION ,
49
+ gorm : GormImpl . DEFAULT_OPTION ,
50
+ servlet : ServletImpl . DEFAULT_OPTION ,
51
+ javaVersion : JdkVersion . DEFAULT_OPTION ) ). features
40
52
.findAll { it. community }
41
53
42
54
then :
@@ -45,12 +57,12 @@ class FeatureControllerSpec extends Specification {
45
57
46
58
void ' test list features - spanish' () {
47
59
when :
48
- List<FeatureDTO > features = client
60
+ List<FeatureDTO > features = applicationTypeClient
49
61
.spanishFeatures(ApplicationType . DEFAULT_OPTION ,
50
- TestFramework . DEFAULT_OPTION ,
51
- GormImpl . DEFAULT_OPTION ,
52
- ServletImpl . DEFAULT_OPTION ,
53
- JdkVersion . DEFAULT_OPTION ). features
62
+ new FeatureFilter ( test : TestFramework . DEFAULT_OPTION ,
63
+ gorm : GormImpl . DEFAULT_OPTION ,
64
+ servlet : ServletImpl . DEFAULT_OPTION ,
65
+ javaVersion : JdkVersion . DEFAULT_OPTION ) ). features
54
66
def mongoGorm = features. find { it. name == ' asciidoctor' }
55
67
56
68
then :
@@ -61,12 +73,12 @@ class FeatureControllerSpec extends Specification {
61
73
62
74
void ' test list default features - spanish' () {
63
75
when :
64
- List<FeatureDTO > features = client
76
+ List<FeatureDTO > features = applicationTypeClient
65
77
.spanishDefaultFeatures(ApplicationType . DEFAULT_OPTION ,
66
- TestFramework . DEFAULT_OPTION ,
67
- GormImpl . DEFAULT_OPTION ,
68
- ServletImpl . DEFAULT_OPTION ,
69
- JdkVersion . DEFAULT_OPTION ). features
78
+ new FeatureFilter ( test : TestFramework . DEFAULT_OPTION ,
79
+ gorm : GormImpl . DEFAULT_OPTION ,
80
+ servlet : ServletImpl . DEFAULT_OPTION ,
81
+ javaVersion : JdkVersion . DEFAULT_OPTION ) ). features
70
82
def assetPipeline = features. find { it. name == ' asset-pipeline-grails' }
71
83
72
84
then :
@@ -77,68 +89,84 @@ class FeatureControllerSpec extends Specification {
77
89
78
90
void ' test list default features for application type' () {
79
91
when :
80
- def features = client
92
+ def features = applicationTypeClient
81
93
.defaultFeatures(ApplicationType . PLUGIN ,
82
94
RequestInfo . LOCAL ,
83
- TestFramework . DEFAULT_OPTION ,
84
- GormImpl . DEFAULT_OPTION ,
85
- ServletImpl . DEFAULT_OPTION ,
86
- JdkVersion . DEFAULT_OPTION ). features
95
+ new FeatureFilter ( test : TestFramework . DEFAULT_OPTION ,
96
+ gorm : GormImpl . DEFAULT_OPTION ,
97
+ servlet : ServletImpl . DEFAULT_OPTION ,
98
+ javaVersion : JdkVersion . DEFAULT_OPTION ) ). features
87
99
88
100
then :
89
101
! features. any { it. name == ' geb-with-testcontainers' }
90
102
features. any { it. name == ' gorm-hibernate5' }
91
103
92
104
when :
93
- features = client
105
+ features = applicationTypeClient
94
106
.defaultFeatures(ApplicationType . DEFAULT_OPTION ,
95
107
RequestInfo . LOCAL ,
96
- TestFramework . DEFAULT_OPTION ,
97
- GormImpl . DEFAULT_OPTION ,
98
- ServletImpl . DEFAULT_OPTION ,
99
- JdkVersion . DEFAULT_OPTION ). features
108
+ new FeatureFilter ( test : TestFramework . DEFAULT_OPTION ,
109
+ gorm : GormImpl . DEFAULT_OPTION ,
110
+ servlet : ServletImpl . DEFAULT_OPTION ,
111
+ javaVersion : JdkVersion . DEFAULT_OPTION ) ). features
100
112
101
113
then :
102
114
features. any { it. name == ' geb-with-testcontainers' }
103
115
}
104
116
105
117
void ' test list features for application type' () {
106
118
when :
107
- def features = client
119
+ def features = applicationTypeClient
108
120
.features(ApplicationType . PLUGIN ,
109
121
RequestInfo . LOCAL ,
110
- TestFramework . DEFAULT_OPTION ,
111
- GormImpl . DEFAULT_OPTION ,
112
- ServletImpl . DEFAULT_OPTION ,
113
- JdkVersion . DEFAULT_OPTION ). features
122
+ new FeatureFilter ( test : TestFramework . DEFAULT_OPTION ,
123
+ gorm : GormImpl . DEFAULT_OPTION ,
124
+ servlet : ServletImpl . DEFAULT_OPTION ,
125
+ javaVersion : JdkVersion . DEFAULT_OPTION ) ). features
114
126
115
127
then :
116
128
! features. any { it. name == ' geb-with-testcontainers' }
117
129
118
130
when :
119
- features = client
131
+ features = applicationTypeClient
120
132
.features(ApplicationType . DEFAULT_OPTION ,
121
133
RequestInfo . LOCAL ,
122
- TestFramework . DEFAULT_OPTION ,
123
- GormImpl . DEFAULT_OPTION ,
124
- ServletImpl . DEFAULT_OPTION ,
125
- JdkVersion . DEFAULT_OPTION ). features
134
+ new FeatureFilter ( test : TestFramework . DEFAULT_OPTION ,
135
+ gorm : GormImpl . DEFAULT_OPTION ,
136
+ servlet : ServletImpl . DEFAULT_OPTION ,
137
+ javaVersion : JdkVersion . DEFAULT_OPTION ) ). features
126
138
127
139
then :
128
140
features. any { it. name == ' gorm-mongodb' }
129
141
}
130
142
131
143
void ' test list features for application type should NOT return default included features' () {
132
144
when :
133
- def features = client
145
+ def features = applicationTypeClient
134
146
.features(ApplicationType . WEB ,
135
147
RequestInfo . LOCAL ,
136
- TestFramework . DEFAULT_OPTION ,
137
- GormImpl . DEFAULT_OPTION ,
138
- ServletImpl . DEFAULT_OPTION ,
139
- JdkVersion . DEFAULT_OPTION ). features
148
+ new FeatureFilter ( test : TestFramework . DEFAULT_OPTION ,
149
+ gorm : GormImpl . DEFAULT_OPTION ,
150
+ servlet : ServletImpl . DEFAULT_OPTION ,
151
+ javaVersion : JdkVersion . DEFAULT_OPTION ) ). features
140
152
141
153
then :
142
154
! features. any { it. name == ' asset-pipeline-grails' }
143
155
}
156
+
157
+ void " test feature filter - invalid option as query parameter" () {
158
+ when :
159
+ String response = httpClient. toBlocking(). withCloseable { client ->
160
+ client. exchange(HttpRequest . GET (' /application-types/' + ApplicationType . WEB . name + ' /features?javaVersion=invalid' ), String . class). body()
161
+ }
162
+
163
+ then :
164
+ response
165
+
166
+ and :
167
+ ObjectMapper mapper = new ObjectMapper ()
168
+ def map = mapper. readValue(response, Map )
169
+
170
+ map. features. collect { it -> it. name }. find { it == ' gorm-mongodb' }
171
+ }
144
172
}
0 commit comments