|
5 | 5 | using Microsoft.OpenApi.Expressions;
|
6 | 6 | using Microsoft.OpenApi.Properties;
|
7 | 7 | using System;
|
| 8 | +using System.Linq; |
8 | 9 | using Xunit;
|
9 | 10 |
|
10 | 11 | namespace Microsoft.OpenApi.Tests.Writers
|
@@ -171,5 +172,83 @@ public void CompareRuntimeExpressionWorks(string expression)
|
171 | 172 | Assert.NotSame(runtimeExpression1, runtimeExpression2);
|
172 | 173 | Assert.Equal(runtimeExpression1, runtimeExpression2);
|
173 | 174 | }
|
| 175 | + |
| 176 | + |
| 177 | + [Fact] |
| 178 | + public void CompositeRuntimeExpressionContainsExpression() |
| 179 | + { |
| 180 | + // Arrange |
| 181 | + string expression = "This is a composite expression {$url} yay"; |
| 182 | + |
| 183 | + // Act |
| 184 | + var runtimeExpression = RuntimeExpression.Build(expression); |
| 185 | + |
| 186 | + // Assert |
| 187 | + Assert.NotNull(runtimeExpression); |
| 188 | + var response = Assert.IsType<CompositeExpression>(runtimeExpression); |
| 189 | + Assert.Equal(expression, response.Expression); |
| 190 | + |
| 191 | + var compositeExpression = runtimeExpression as CompositeExpression; |
| 192 | + Assert.Single(compositeExpression.ContainedExpressions); |
| 193 | + |
| 194 | + } |
| 195 | + |
| 196 | + [Fact] |
| 197 | + public void CompositeRuntimeExpressionContainsMultipleExpressions() |
| 198 | + { |
| 199 | + // Arrange |
| 200 | + string expression = "This is a composite expression {$url} yay and {$request.header.foo}"; |
| 201 | + |
| 202 | + // Act |
| 203 | + var runtimeExpression = RuntimeExpression.Build(expression); |
| 204 | + |
| 205 | + // Assert |
| 206 | + Assert.NotNull(runtimeExpression); |
| 207 | + var response = Assert.IsType<CompositeExpression>(runtimeExpression); |
| 208 | + Assert.Equal(expression, response.Expression); |
| 209 | + |
| 210 | + var compositeExpression = runtimeExpression as CompositeExpression; |
| 211 | + Assert.Equal(2,compositeExpression.ContainedExpressions.Count); |
| 212 | + |
| 213 | + Assert.IsType<UrlExpression>(compositeExpression.ContainedExpressions.First()); |
| 214 | + Assert.IsType<RequestExpression>(compositeExpression.ContainedExpressions.Last()); |
| 215 | + } |
| 216 | + |
| 217 | + |
| 218 | + |
| 219 | + [Fact] |
| 220 | + public void CompositeRuntimeExpressionForWebHook() |
| 221 | + { |
| 222 | + // Arrange |
| 223 | + string expression = "http://notificationServer.com?transactionId={$request.body#/id}&email={$request.body#/email}"; |
| 224 | + |
| 225 | + // Act |
| 226 | + var runtimeExpression = RuntimeExpression.Build(expression); |
| 227 | + |
| 228 | + // Assert |
| 229 | + Assert.NotNull(runtimeExpression); |
| 230 | + var response = Assert.IsType<CompositeExpression>(runtimeExpression); |
| 231 | + Assert.Equal(expression, response.Expression); |
| 232 | + |
| 233 | + var compositeExpression = runtimeExpression as CompositeExpression; |
| 234 | + Assert.Equal(2, compositeExpression.ContainedExpressions.Count); |
| 235 | + |
| 236 | + Assert.IsType<RequestExpression>(compositeExpression.ContainedExpressions.First()); |
| 237 | + Assert.IsType<RequestExpression>(compositeExpression.ContainedExpressions.Last()); |
| 238 | + } |
| 239 | + |
| 240 | + [Theory] |
| 241 | + [InlineData("This is a composite expression yay and {} and {$sddsd}")] |
| 242 | + [InlineData("This is a composite expression {url} yay and {} and {$url}")] |
| 243 | + public void CompositeRuntimeExpressionContainsInvalidExpressions(string expression) |
| 244 | + { |
| 245 | + // Arrange |
| 246 | + |
| 247 | + // Act |
| 248 | + Action test = () => RuntimeExpression.Build(expression); |
| 249 | + |
| 250 | + // Assert |
| 251 | + Assert.Throws<OpenApiException>(test); |
| 252 | + } |
174 | 253 | }
|
175 | 254 | }
|
0 commit comments