Swagger support (#749)

* r

* fix

* sw

* x

* s

* .

* .

* .

* CreateTypeFromJObject

* .

* .

* f

* c

* .

* .

* .

* .

* .

* .

* ok

* ,

* .

* .

* .

* .

* n

* pact

* fix

* schema

* null

* fluent

* r

* -p

* .

* .

* refs

* .
This commit is contained in:
Stef Heyenrath
2022-05-13 22:01:46 +02:00
committed by GitHub
parent 0d8b3b1438
commit 5e301fd74b
45 changed files with 2371 additions and 1123 deletions

View File

@@ -1,115 +1,167 @@
using System;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Reflection;
using FluentAssertions;
using Newtonsoft.Json.Linq;
using NFluent;
using WireMock.Util;
using Xunit;
namespace WireMock.Net.Tests.Util
namespace WireMock.Net.Tests.Util;
public class JsonUtilsTests
{
public class JsonUtilsTests
[Fact]
public void JsonUtils_ParseJTokenToObject()
{
[Fact]
public void JsonUtils_ParseJTokenToObject()
// Assign
object value = "test";
// Act
string result = JsonUtils.ParseJTokenToObject<string>(value);
// Assert
Check.That(result).IsEqualTo(default(string));
}
[Fact]
public void JsonUtils_GenerateDynamicLinqStatement_JToken()
{
// Assign
JToken instance = "Test";
// Act
string line = JsonUtils.GenerateDynamicLinqStatement(instance);
// Assert
var queryable = new[] { instance }.AsQueryable().Select(line);
bool result = queryable.Any("it == \"Test\"");
Check.That(result).IsTrue();
Check.That(line).IsEqualTo("string(it)");
}
[Fact]
public void JsonUtils_GenerateDynamicLinqStatement_JArray_Indexer()
{
// Assign
var instance = new JObject
{
// Assign
object value = "test";
{ "Items", new JArray(new JValue(4), new JValue(8)) }
};
// Act
string result = JsonUtils.ParseJTokenToObject<string>(value);
// Act
string line = JsonUtils.GenerateDynamicLinqStatement(instance);
// Assert
Check.That(result).IsEqualTo(default(string));
}
// Assert 1
line.Should().Be("new ((new [] { long(Items[0]), long(Items[1])}) as Items)");
[Fact]
public void JsonUtils_GenerateDynamicLinqStatement_JToken()
// Assert 2
var queryable = new[] { instance }.AsQueryable().Select(line);
bool result = queryable.Any("Items != null");
result.Should().BeTrue();
}
[Fact]
public void JsonUtils_GenerateDynamicLinqStatement_JObject2()
{
// Assign
var instance = new JObject
{
// Assign
JToken j = "Test";
// Act
string line = JsonUtils.GenerateDynamicLinqStatement(j);
// Assert
var queryable = new[] { j }.AsQueryable().Select(line);
bool result = queryable.Any("it == \"Test\"");
Check.That(result).IsTrue();
Check.That(line).IsEqualTo("string(it)");
}
[Fact]
public void JsonUtils_GenerateDynamicLinqStatement_JArray_Indexer()
{
// Assign
var j = new JObject
{"U", new JValue(new Uri("http://localhost:80/abc?a=5"))},
{"N", new JValue((object?) null)},
{"G", new JValue(Guid.NewGuid())},
{"Flt", new JValue(10.0f)},
{"Dbl", new JValue(Math.PI)},
{"Check", new JValue(true)},
{
{ "Items", new JArray(new[] { new JValue(4), new JValue(8) }) }
};
// Act
string line = JsonUtils.GenerateDynamicLinqStatement(j);
// Assert 1
line.Should().Be("new ((new [] { long(Items[0]), long(Items[1])}) as Items)");
// Assert 2
var queryable = new[] { j }.AsQueryable().Select(line);
bool result = queryable.Any("Items != null");
result.Should().BeTrue();
}
[Fact]
public void JsonUtils_GenerateDynamicLinqStatement_JObject2()
{
// Assign
var j = new JObject
{
{"U", new JValue(new Uri("http://localhost:80/abc?a=5"))},
{"N", new JValue((object) null)},
{"G", new JValue(Guid.NewGuid())},
{"Flt", new JValue(10.0f)},
{"Dbl", new JValue(Math.PI)},
{"Check", new JValue(true)},
"Child", new JObject
{
"Child", new JObject
{
{"ChildId", new JValue(4)},
{"ChildDateTime", new JValue(new DateTime(2018, 2, 17))},
{"TS", new JValue(TimeSpan.FromMilliseconds(999))}
}
},
{"I", new JValue(9)},
{"L", new JValue(long.MaxValue)},
{"Name", new JValue("Test")}
};
{"ChildId", new JValue(4)},
{"ChildDateTime", new JValue(new DateTime(2018, 2, 17))},
{"TS", new JValue(TimeSpan.FromMilliseconds(999))}
}
},
{"I", new JValue(9)},
{"L", new JValue(long.MaxValue)},
{"Name", new JValue("Test")}
};
// Act
string line = JsonUtils.GenerateDynamicLinqStatement(j);
// Act
string line = JsonUtils.GenerateDynamicLinqStatement(instance);
// Assert 1
line.Should().Be("new (Uri(U) as U, null as N, Guid(G) as G, double(Flt) as Flt, double(Dbl) as Dbl, bool(Check) as Check, new (long(Child.ChildId) as ChildId, DateTime(Child.ChildDateTime) as ChildDateTime, TimeSpan(Child.TS) as TS) as Child, long(I) as I, long(L) as L, string(Name) as Name)");
// Assert 1
line.Should().Be("new (Uri(U) as U, null as N, Guid(G) as G, double(Flt) as Flt, double(Dbl) as Dbl, bool(Check) as Check, new (long(Child.ChildId) as ChildId, DateTime(Child.ChildDateTime) as ChildDateTime, TimeSpan(Child.TS) as TS) as Child, long(I) as I, long(L) as L, string(Name) as Name)");
// Assert 2
var queryable = new[] { j }.AsQueryable().Select(line);
bool result = queryable.Any("I > 1 && L > 1");
result.Should().BeTrue();
}
// Assert 2
var queryable = new[] { instance }.AsQueryable().Select(line);
bool result = queryable.Any("I > 1 && L > 1");
result.Should().BeTrue();
}
[Fact]
public void JsonUtils_GenerateDynamicLinqStatement_Throws()
[Fact]
public void JsonUtils_GenerateDynamicLinqStatement_Throws()
{
// Assign
var instance = new JObject
{
// Assign
var j = new JObject
{
{ "B", new JValue(new byte[] {48, 49}) }
};
{ "B", new JValue(new byte[] {48, 49}) }
};
// Act and Assert
Check.ThatCode(() => JsonUtils.GenerateDynamicLinqStatement(j)).Throws<NotSupportedException>();
}
// Act and Assert
Check.ThatCode(() => JsonUtils.GenerateDynamicLinqStatement(instance)).Throws<NotSupportedException>();
}
[Fact]
public void JsonUtils_CreateTypeFromJObject()
{
// Assign
var instance = new JObject
{
{"U", new JValue(new Uri("http://localhost:80/abc?a=5"))},
{"N", new JValue((object?) null)},
{"G", new JValue(Guid.NewGuid())},
{"Flt", new JValue(10.0f)},
{"Dbl", new JValue(Math.PI)},
{"Check", new JValue(true)},
{
"Child", new JObject
{
{"ChildId", new JValue(4)},
{"ChildDateTime", new JValue(new DateTime(2018, 2, 17))},
{"ChildTimeSpan", new JValue(TimeSpan.FromMilliseconds(999))}
}
},
{"I", new JValue(9)},
{"L", new JValue(long.MaxValue)},
{"S", new JValue("Test")},
{"C", new JValue('c')}
};
// Act
var type = JsonUtils.CreateTypeFromJObject(instance);
// Assert
var setProperties = type
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(pi => pi.GetMethod != null).Select(pi => $"{pi.GetMethod}")
.ToArray();
setProperties.Should().HaveCount(11);
setProperties.Should().BeEquivalentTo(new[]
{
"System.String get_U()",
"System.Object get_N()",
"System.Guid get_G()",
"Single get_Flt()",
"Single get_Dbl()",
"Boolean get_Check()",
"Child get_Child()",
"Int64 get_I()",
"Int64 get_L()",
"System.String get_S()",
"System.String get_C()"
});
}
}

View File

@@ -0,0 +1,14 @@
using FluentAssertions;
using WireMock.Util;
using Xunit;
namespace WireMock.Net.Tests.Util;
public class SystemUtilsTests
{
[Fact]
public void Version()
{
SystemUtils.Version.Should().NotBeEmpty();
}
}