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

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

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

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

            Uri fileUri = null;

            using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
                using (var data = new TeamsFileData(fs, "mypng.png", TeamsMediaType.ImagePNG))
                {
                    r = await teams.ReplyToMessageAsync(r.Data.Id, unitTestSpace.Id, "This is a reply message with attachment.", data);

                    Assert.AreEqual(HttpStatusCode.OK, r.HttpStatusCode);
                    Assert.IsTrue(r.IsSuccessStatus);
                    Assert.IsTrue(r.Data.HasValues);
                    Assert.IsTrue(r.Data.HasFiles);

                    fileUri = r.Data.FileUris[0];
                }

            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 attachment.", 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 TestCreateMessageWithAttachment()
        {
            var exePath = new FileInfo(Assembly.GetExecutingAssembly().Location);

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

            Uri fileUri = null;

            using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
                using (var data = new TeamsFileData(fs, "mypng.png", TeamsMediaType.ImagePNG))
                {
                    var r = await teams.CreateMessageAsync(unitTestSpace.Id, "**Post with attachment!!**", data);

                    Assert.AreEqual(HttpStatusCode.OK, r.HttpStatusCode);
                    Assert.IsTrue(r.IsSuccessStatus);
                    Assert.IsTrue(r.Data.HasValues);
                    Assert.IsTrue(r.Data.HasFiles);

                    fileUri = r.Data.FileUris[0];
                }

            var r1 = await teams.GetFileInfoAsync(fileUri);

            Assert.AreEqual(HttpStatusCode.OK, r1.HttpStatusCode);
            Assert.IsTrue(r1.IsSuccessStatus);
            Assert.IsTrue(r1.Data.HasValues);

            Assert.AreEqual("mypng.png", r1.Data.FileName);
            Assert.AreEqual(TeamsMediaType.ImagePNG, r1.Data.MediaType);
            Assert.AreEqual(34991, r1.Data.Size);

            var resourceOperation = r1.ParseResourceOperation();

            Assert.AreEqual(TeamsResource.FileInfo, resourceOperation.Resource);
            Assert.AreEqual(TeamsOperation.Get, resourceOperation.Operation);
            Assert.AreEqual("GetFileInfo", resourceOperation.ToString());



            var r2 = await teams.GetFileDataAsync(fileUri);

            Assert.AreEqual(HttpStatusCode.OK, r2.HttpStatusCode);
            Assert.IsTrue(r2.IsSuccessStatus);
            Assert.IsTrue(r2.Data.HasValues);

            Assert.AreEqual("mypng.png", r2.Data.FileName);
            Assert.AreEqual(TeamsMediaType.ImagePNG, r2.Data.MediaType);
            Assert.AreEqual(34991, r2.Data.Size);

            resourceOperation = r2.ParseResourceOperation();
            Assert.AreEqual(TeamsResource.FileData, resourceOperation.Resource);
            Assert.AreEqual(TeamsOperation.Get, resourceOperation.Operation);
            Assert.AreEqual("GetFileData", resourceOperation.ToString());

            using (var data = r2.Data.Stream)
            {
                Assert.AreEqual(34991, data.Length);
            }



            using (var stream = new MemoryStream())
            {
                var r3 = await teams.CopyFileDataToStreamAsync(fileUri, stream);

                Assert.AreEqual(HttpStatusCode.OK, r3.HttpStatusCode);
                Assert.IsTrue(r3.IsSuccessStatus);
                Assert.IsTrue(r3.Data.HasValues);

                Assert.AreEqual("mypng.png", r3.Data.FileName);
                Assert.AreEqual(TeamsMediaType.ImagePNG, r3.Data.MediaType);
                Assert.AreEqual(34991, r3.Data.Size);

                resourceOperation = r3.ParseResourceOperation();
                Assert.AreEqual(TeamsResource.FileData, resourceOperation.Resource);
                Assert.AreEqual(TeamsOperation.Get, resourceOperation.Operation);
                Assert.AreEqual("GetFileData", resourceOperation.ToString());

                Assert.AreEqual(34991, stream.Length);
            }
        }