public async Task TestReplyToMessageWithCard()
        {
            var r = await teams.CreateMessageAsync(unitTestSpace.Id, "This message is to be replied with card.");

            Assert.AreEqual(HttpStatusCode.OK, r.HttpStatusCode);
            Assert.AreEqual("This message is to be replied with card.", r.Data.Text);

            var card = AdaptiveCardAttachment.FromJsonString(
                @"
                    {
                        ""type"": ""AdaptiveCard"",
                        ""version"": ""1.2"",
                        ""body"": [
                        {
                            ""type"": ""TextBlock"",
                            ""text"": ""Adaptive Cards"",
                            ""size"": ""large""
                        }
                        ],
                        ""actions"": [
                        {
                            ""type"": ""Action.OpenUrl"",
                            ""url"": ""http://adaptivecards.io"",
                            ""title"": ""Learn More""
                        }
                        ]
                    }
                ");

            r = await teams.ReplyToMessageAsync(r.Data.Id, unitTestSpace.Id, "This is a reply message with card.", card);

            Assert.AreEqual(HttpStatusCode.OK, r.HttpStatusCode);

            Assert.IsTrue(r.IsSuccessStatus);
            Assert.IsTrue(r.Data.HasValues);

            Assert.IsNotNull(r.Data.Id);
            Assert.IsNotNull(r.TrackingId);

            Assert.AreNotEqual(Guid.Empty, r.TransactionId);

            Assert.IsTrue(r.RequestInfo.ContentLength > 0);
            Assert.IsTrue(r.ContentLength > 0);

            Assert.AreEqual("POST /v1/messages HTTP/1.1", r.RequestLine);

            Assert.AreEqual("This is a reply message with card.", r.Data.Text);

            var resourceOperation = r.ParseResourceOperation();

            Assert.AreEqual(TeamsResource.Message, resourceOperation.Resource);
            Assert.AreEqual(TeamsOperation.Create, resourceOperation.Operation);
            Assert.AreEqual("CreateMessage", resourceOperation.ToString());
        }
        public async Task TestCreateMessageWithAdaptiveCardFromObject()
        {
            var card = new
            {
                type    = "AdaptiveCard",
                version = "1.0",
                body    = new []
                {
                    new
                    {
                        type = "TextBlock",
                        text = "Adaptive Cards",
                        size = "large",
                    }
                },
                actions = new []
                {
                    new
                    {
                        type  = "Action.OpenUrl",
                        url   = "http://adaptivecards.io",
                        title = "Learn More"
                    }
                },
            };

            var r = await teams.CreateMessageAsync(unitTestSpace.Id, "Adaptive Card is not supported in you client.",
                                                   AdaptiveCardAttachment.FromObject(card));

            Assert.AreEqual(HttpStatusCode.OK, r.HttpStatusCode);

            Assert.IsTrue(r.IsSuccessStatus);
            Assert.IsTrue(r.Data.HasValues);

            Assert.IsNotNull(r.Data.Id);
            Assert.IsNotNull(r.TrackingId);

            Assert.AreNotEqual(Guid.Empty, r.TransactionId);

            Assert.AreEqual("POST /v1/messages HTTP/1.1", r.RequestLine);

            Assert.AreEqual("Adaptive Card is not supported in you client.", r.Data.Text);

            var resourceOperation = r.ParseResourceOperation();

            Assert.AreEqual(TeamsResource.Message, resourceOperation.Resource);
            Assert.AreEqual(TeamsOperation.Create, resourceOperation.Operation);
            Assert.AreEqual("CreateMessage", resourceOperation.ToString());


            r = await teams.CreateMessageAsync(unitTestSpace.Id, "Adaptive Card is not supported in you client.",
                                               AdaptiveCardAttachment.FromObject(new SampleAdaptiveCard01()));

            Assert.AreEqual(HttpStatusCode.OK, r.HttpStatusCode);

            Assert.IsTrue(r.IsSuccessStatus);
            Assert.IsTrue(r.Data.HasValues);

            Assert.IsNotNull(r.Data.Id);
            Assert.IsNotNull(r.TrackingId);

            Assert.AreNotEqual(Guid.Empty, r.TransactionId);

            Assert.AreEqual("POST /v1/messages HTTP/1.1", r.RequestLine);

            Assert.AreEqual("Adaptive Card is not supported in you client.", r.Data.Text);

            resourceOperation = r.ParseResourceOperation();
            Assert.AreEqual(TeamsResource.Message, resourceOperation.Resource);
            Assert.AreEqual(TeamsOperation.Create, resourceOperation.Operation);
            Assert.AreEqual("CreateMessage", resourceOperation.ToString());
        }
        public async Task TestCreateMessageWithAdaptiveCardFromString()
        {
            var card = AdaptiveCardAttachment.FromJsonString(
                @"
                    {
                        ""type"": ""AdaptiveCard"",
                        ""version"": ""1.2"",
                        ""body"": [
                        {
                            ""type"": ""TextBlock"",
                            ""text"": ""Adaptive Cards"",
                            ""size"": ""large""
                        }
                        ],
                        ""actions"": [
                        {
                            ""type"": ""Action.OpenUrl"",
                            ""url"": ""http://adaptivecards.io"",
                            ""title"": ""Learn More""
                        }
                        ]
                    }
                ");

            var res = await teams.CreateMessageAsync(
                unitTestSpace.Id,
                "[Learn More](http://adaptivecards.io) about Adaptive Card.",
                card);

            Assert.AreEqual(HttpStatusCode.OK, res.HttpStatusCode);


            var exePath = new FileInfo(Assembly.GetExecutingAssembly().Location);

            string path = String.Format("{0}{1}TestData{1}AdaptiveCards", exePath.DirectoryName, Path.DirectorySeparatorChar);

            foreach (var item in Directory.EnumerateFiles(path, "*.json", SearchOption.TopDirectoryOnly))
            {
                using (var fs = new FileStream(item, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (var reader = new StreamReader(fs, UTF8Utils.UTF8_WITHOUT_BOM, true))
                    {
                        var r = await teams.CreateMessageAsync(unitTestSpace.Id, "Adaptive Card is not supported in you client.",
                                                               AdaptiveCardAttachment.FromJsonString(reader.ReadToEnd()));

                        Assert.AreEqual(HttpStatusCode.OK, r.HttpStatusCode);

                        Assert.IsTrue(r.IsSuccessStatus);
                        Assert.IsTrue(r.Data.HasValues);

                        Assert.IsNotNull(r.Data.Id);
                        Assert.IsNotNull(r.TrackingId);

                        Assert.AreNotEqual(Guid.Empty, r.TransactionId);

                        Assert.AreEqual("POST /v1/messages HTTP/1.1", r.RequestLine);

                        Assert.AreEqual("Adaptive Card is not supported in you client.", r.Data.Text);

                        var resourceOperation = r.ParseResourceOperation();
                        Assert.AreEqual(TeamsResource.Message, resourceOperation.Resource);
                        Assert.AreEqual(TeamsOperation.Create, resourceOperation.Operation);
                        Assert.AreEqual("CreateMessage", resourceOperation.ToString());
                    }
            }
        }