public void TestWebPubSubContext_ConnectedEvent()
        {
            var context = new WebPubSubConnectionContext(connectionId: "connectionId", userId: "userA", eventName: "connected", eventType: WebPubSubEventType.System, hub: null);
            var test    = new WebPubSubContext(new ConnectedEventRequest(context));

            var serialize = JObject.FromObject(test);

            Assert.NotNull(serialize["request"]);
            Assert.NotNull(serialize["response"]);
            Assert.AreEqual("", serialize["errorMessage"].ToString());
            Assert.AreEqual("False", serialize["hasError"].ToString());
            Assert.AreEqual("False", serialize["isPreflight"].ToString());
        }
        public void TestWebPubSubContext_DisconnectedEvent()
        {
            var test = new WebPubSubContext(new DisconnectedEventRequest(null, "dropped"));

            var serialize = JObject.FromObject(test);
            var request   = serialize["request"];

            Assert.NotNull(request);
            Assert.AreEqual("dropped", request["reason"].ToString());
            Assert.NotNull(serialize["response"]);
            Assert.AreEqual("", serialize["errorMessage"].ToString());
            Assert.AreEqual("False", serialize["hasError"].ToString());
            Assert.AreEqual("False", serialize["isPreflight"].ToString());
        }
        public void TestWebPubSubContext_ErrorResponse()
        {
            var test = new WebPubSubContext("Invalid Request", WebPubSubErrorCode.UserError);

            var serialize = JObject.FromObject(test);
            var response  = serialize["response"];

            Assert.Null(serialize["request"]);
            Assert.NotNull(response);
            Assert.AreEqual("400", response["status"].ToString());
            Assert.AreEqual("Invalid Request", response["body"].ToString());
            Assert.AreEqual("Invalid Request", serialize["errorMessage"].ToString());
            Assert.AreEqual("True", serialize["hasError"].ToString());
            Assert.AreEqual("False", serialize["isPreflight"].ToString());
        }
        public void TestWebPubSubContext_UserEventStates_Legacy()
        {
            var states =
                new Dictionary <string, object>
            {
                { "aKey", "aValue" },
                { "bKey", 123 },
                { "cKey", new StateTestClass() }
            };

            // Use the Dictionary<string, object> states .ctor overload
            var context = new WebPubSubConnectionContext(
                WebPubSubEventType.System,
                "connected",
                "hub",
                "connectionId",
                "userA",
                null,
                null,
                states,
                null);
            var test = new WebPubSubContext(new UserEventRequest(context, BinaryData.FromString("test"), WebPubSubDataType.Text));

            var jObj    = JObject.FromObject(test);
            var request = jObj["request"];

            Assert.NotNull(request);
            Assert.AreEqual("test", request["data"].ToString());
            Assert.NotNull(jObj["response"]);
            Assert.AreEqual("", jObj["errorMessage"].ToString());
            Assert.AreEqual("False", jObj["hasError"].ToString());
            Assert.AreEqual("False", jObj["isPreflight"].ToString());

            var context1 = request["connectionContext"];

            Assert.NotNull(context1);
            var states1 = context1["states"];

            Assert.NotNull(states1);
            Assert.AreEqual("\"aValue\"", states1["aKey"].Value <string>());
            Assert.NotNull(states1);
            Assert.AreEqual(123, states1["bKey"].Value <int>());
        }
        public void TestWebPubSubContext_UserEventStates()
        {
            var states =
                new Dictionary <string, object>
            {
                { "aKey", "aValue" },
                { "bKey", 123 },
                { "cKey", new StateTestClass() }
            }.EncodeConnectionStates().DecodeConnectionStates().ToDictionary(p => p.Key, p => (BinaryData)p.Value);

            // Use the Dictionary<string, BinaryData> connectionStates .ctor overload
            var context = new WebPubSubConnectionContext(
                eventType: WebPubSubEventType.System,
                eventName: "connected",
                hub: null,
                connectionId: "connectionId",
                userId: "userA",
                connectionStates: states);
            var test = new WebPubSubContext(new UserEventRequest(context, BinaryData.FromString("test"), WebPubSubDataType.Text));

            var jObj    = JObject.Parse(JsonConvert.SerializeObject(test));
            var request = jObj["request"];

            Assert.NotNull(request);
            Assert.AreEqual("test", request["data"].Value <string>());
            Assert.NotNull(jObj["response"]);
            Assert.AreEqual(null, jObj["errorMessage"].Value <string>());
            Assert.AreEqual("False", jObj["hasError"].Value <string>());
            Assert.AreEqual("False", jObj["isPreflight"].Value <string>());
            var context1 = request["connectionContext"];

            Assert.NotNull(context1);
            var states1 = context1["states"];

            Assert.NotNull(states1);
            Assert.AreEqual("aValue", states1["aKey"].Value <string>());
            Assert.AreEqual(123, states1["bKey"].Value <int>());
            var classStates = states1["cKey"];

            Assert.NotNull(classStates);
            Assert.AreEqual("GA", classStates["Title"].Value <string>());
        }
        public void TestWebPubSubContext_ConnectEvent()
        {
            var context = new WebPubSubConnectionContext(connectionId: "connectionId", userId: "userA", eventName: "connected", eventType: WebPubSubEventType.System, hub: null);

            var claims = new Dictionary <string, string[]>
            {
                { "aa", new string[] { "aa1, aa2" } },
                { "bb", new string[] { "bb, bb2" } },
            };
            var subprotocol = new string[] { "sub1", "sub2" };
            var test        = new WebPubSubContext(new ConnectEventRequest(context, claims, null, subprotocol, null));

            var serialize = JObject.FromObject(test);
            var request   = serialize["request"];

            Assert.NotNull(request);
            Assert.AreEqual(subprotocol, request["subprotocols"].ToObject <string[]>());
            Assert.NotNull(serialize["response"]);
            Assert.AreEqual("", serialize["errorMessage"].ToString());
            Assert.AreEqual("False", serialize["hasError"].ToString());
            Assert.AreEqual("False", serialize["isPreflight"].ToString());
        }
 public static void TestFunc(
     [WebPubSubContext] WebPubSubContext request)
 {
     Console.WriteLine(request.HasError);
 }