public void ResolveType_Returns_Expected_MessageRepliedEvent(
            string messageId,
            string parentMessageId,
            bool isMessageReply)
        {
            // due to a bug in Slack Event API, subtype is always null for MessageRepliedEvent
            // see resolver implementation for more details.
            var typeToken =
                $"\"{CallbackEvent.EventTypeJsonName}\":\"{MessageEvent.CallbackEventTypeValue}\"";
            var subTypeToken   = $"\"{MessageEvent.SubTypeJsonName}\":null";
            var messageIdToken =
                $"\"{MessageEvent.MessageIdJsonName}\":\"{messageId}\"";
            var parentMessageIdToken =
                $"\"{MessageEvent.ParentMessageIdJsonName}\":\"{parentMessageId}\"";

            var json =
                $"{{{typeToken},{subTypeToken},{messageIdToken},{parentMessageIdToken}}}";
            var jsonDocument = JsonDocument.Parse(json);
            var typeResolver =
                new CallbackEventJsonTypeResolver(jsonDocument.RootElement);

            var actualType = typeResolver.ResolveType();

            Assert.Equal(
                isMessageReply,
                actualType == typeof(MessageRepliedEvent));
        }
        public void ResolveType_Throws_When_Type_Property_Does_Not_Exist()
        {
            const string json         = "{\"property\": \"value\"}";
            var          jsonDocument = JsonDocument.Parse(json);
            var          typeProvider =
                new CallbackEventJsonTypeResolver(jsonDocument.RootElement);

            Assert.Throws <JsonException>(() => typeProvider.ResolveType());
        }
        public void ResolveType_Returns_Expected_Message_Type(
            string messageSubTypeValue,
            Type expectedType)
        {
            var json =
                $"{{\"{CallbackEvent.EventTypeJsonName}\":\"{MessageEvent.CallbackEventTypeValue}\",\"{MessageEvent.SubTypeJsonName}\":\"{messageSubTypeValue}\"}}";
            var jsonDocument = JsonDocument.Parse(json);
            var typeResolver =
                new CallbackEventJsonTypeResolver(jsonDocument.RootElement);

            var actualType = typeResolver.ResolveType();

            Assert.Equal(
                expectedType,
                actualType);
        }