using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using FluentAssertions;
using FluentAssertions.Execution;
using FluentAssertions.Primitives;
using Newtonsoft.Json.Linq;
namespace Microsoft.Extensions.DependencyModel.Tests
{
public static class JsonAssertionExtensions
public static JsonAssetions Should(this JToken jToken)
return new JsonAssetions(jToken);
}
public class JsonAssetions: ReferenceTypeAssertions<JToken, JsonAssetions>
public JsonAssetions(JToken token)
Subject = token;
protected override string Context => nameof(JToken);
public AndWhichConstraint<JsonAssetions, JToken> HaveProperty(string expected)
var token = Subject[expected];
Execute.Assertion
.ForCondition(token != null)
.FailWith($"Expected {Subject} to have property '" + expected + "'");
return new AndWhichConstraint<JsonAssetions, JToken>(this, token);
public AndConstraint<JsonAssetions> NotHaveProperty(string expected)
.ForCondition(token == null)
.FailWith($"Expected {Subject} not to have property '" + expected + "'");
return new AndConstraint<JsonAssetions>(this);
public AndWhichConstraint<JsonAssetions, JObject> HavePropertyAsObject(string expected)
return HaveProperty(expected).Subject.Should().BeOfType<JObject>();
public AndConstraint<ObjectAssertions> HavePropertyValue<T>(string expected, T value)
return HaveProperty(expected).Subject.Value<T>().Should().Be(value);