using System; using System.Configuration; using System.Diagnostics; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; using TeleSharp.TL; using TeleSharp.TL.Messages; using TLSharp.Core; using TLSharp.Core.Requests; using TLSharp.Core.Utils; namespace TLSharp.Tests { [TestClass] public class TLSharpTests { private string NumberToSendMessage { get; set; } private string NumberToAuthenticate { get; set; } private string NotRegisteredNumberToSignUp { get; set; } private string UserNameToSendMessage { get; set; } private string NumberToGetUserFull { get; set; } private string NumberToAddToChat { get; set; } private string ApiHash { get; set; } private int ApiId { get; set; } [TestInitialize] public void Init() { // Setup your API settings and phone numbers in app.config GatherTestConfiguration(); } private TelegramClient NewClient() { try { return new TelegramClient(ApiId, ApiHash); } catch (MissingApiConfigurationException ex) { throw new Exception($"Please add your API settings to the `app.config` file. (More info: {MissingApiConfigurationException.InfoUrl})", ex); } } private void GatherTestConfiguration() { ApiHash = ConfigurationManager.AppSettings[nameof(ApiHash)]; if (string.IsNullOrEmpty(ApiHash)) Debug.WriteLine("ApiHash not configured in app.config! Some tests may fail."); var apiId = ConfigurationManager.AppSettings[nameof(ApiId)]; if (string.IsNullOrEmpty(apiId)) Debug.WriteLine("ApiId not configured in app.config! Some tests may fail."); else ApiId = int.Parse(apiId); NumberToAuthenticate = ConfigurationManager.AppSettings[nameof(NumberToAuthenticate)]; if (string.IsNullOrEmpty(NumberToAuthenticate)) Debug.WriteLine("NumberToAuthenticate not configured in app.config! Some tests may fail."); NotRegisteredNumberToSignUp = ConfigurationManager.AppSettings[nameof(NotRegisteredNumberToSignUp)]; if (string.IsNullOrEmpty(NotRegisteredNumberToSignUp)) Debug.WriteLine("NotRegisteredNumberToSignUp not configured in app.config! Some tests may fail."); NumberToSendMessage = ConfigurationManager.AppSettings[nameof(NumberToSendMessage)]; if (string.IsNullOrEmpty(NumberToSendMessage)) Debug.WriteLine("NumberToSendMessage not configured in app.config! Some tests may fail."); UserNameToSendMessage = ConfigurationManager.AppSettings[nameof(UserNameToSendMessage)]; if (string.IsNullOrEmpty(UserNameToSendMessage)) Debug.WriteLine("UserNameToSendMessage not configured in app.config! Some tests may fail."); NumberToGetUserFull = ConfigurationManager.AppSettings[nameof(NumberToGetUserFull)]; if (string.IsNullOrEmpty(NumberToGetUserFull)) Debug.WriteLine("NumberToGetUserFull not configured in app.config! Some tests may fail."); NumberToAddToChat = ConfigurationManager.AppSettings[nameof(NumberToAddToChat)]; if (string.IsNullOrEmpty(NumberToAddToChat)) Debug.WriteLine("NumberToAddToChat not configured in app.config! Some tests may fail."); } [TestMethod] public async Task AuthUser() { var client = NewClient(); await client.ConnectAsync(); var hash = await client.SendCodeRequestAsync(NumberToAuthenticate); var code = "93463"; // you can change code in debugger var user = await client.MakeAuthAsync(NumberToAuthenticate, hash, code); Assert.IsNotNull(user); Assert.IsTrue(client.IsUserAuthorized()); } [TestMethod] public async Task SendMessageTest() { var client = NewClient(); await client.ConnectAsync(); var result = await client.GetContactsAsync(); var user = result.users.lists .Where(x => x.GetType() == typeof(TLUser)) .Cast() .FirstOrDefault(x => x.phone == NumberToSendMessage); if (user == null) { throw new System.Exception("Number was not found in Contacts List of user: " + NumberToSendMessage); } await client.SendTypingAsync(new TLInputPeerUser() { user_id = user.id }); Thread.Sleep(3000); await client.SendMessageAsync(new TLInputPeerUser() { user_id = user.id }, "TEST"); } [TestMethod] public async Task SendMessageToChannelTest() { var client = NewClient(); await client.ConnectAsync(); var dialogs = await client.GetUserDialogsAsync(); var chat = dialogs.chats.lists .Where(c => c.GetType() == typeof(TLChannel)) .Cast() .FirstOrDefault(c => c.title == "TestGroup"); await client.SendMessageAsync(new TLInputPeerChannel() { channel_id = chat.id, access_hash = chat.access_hash.Value }, "TEST MSG"); } [TestMethod] public async Task SendPhotoToContactTest() { var client = NewClient(); await client.ConnectAsync(); var result = await client.GetContactsAsync(); var user = result.users.lists .Where(x => x.GetType() == typeof(TLUser)) .Cast() .FirstOrDefault(x => x.phone == NumberToSendMessage); var fileResult = (TLInputFile)await client.UploadFile("cat.jpg", new StreamReader("data/cat.jpg")); await client.SendUploadedPhoto(new TLInputPeerUser() { user_id = user.id }, fileResult, "kitty"); } [TestMethod] public async Task SendBigFileToContactTest() { var client = NewClient(); await client.ConnectAsync(); var result = await client.GetContactsAsync(); var user = result.users.lists .Where(x => x.GetType() == typeof(TLUser)) .Cast() .FirstOrDefault(x => x.phone == NumberToSendMessage); var fileResult = (TLInputFileBig)await client.UploadFile("some.zip", new StreamReader("")); await client.SendUploadedDocument( new TLInputPeerUser() { user_id = user.id }, fileResult, "some zips", "application/zip", new TLVector()); } [TestMethod] public async Task DownloadFileFromContactTest() { var client = NewClient(); await client.ConnectAsync(); var result = await client.GetContactsAsync(); var user = result.users.lists .Where(x => x.GetType() == typeof(TLUser)) .Cast() .FirstOrDefault(x => x.phone == NumberToSendMessage); var inputPeer = new TLInputPeerUser() { user_id = user.id }; var res = await client.SendRequestAsync(new TLRequestGetHistory() { peer = inputPeer }); var document = res.messages.lists .Where(m => m.GetType() == typeof(TLMessage)) .Cast() .Where(m => m.media != null && m.media.GetType() == typeof(TLMessageMediaDocument)) .Select(m => m.media) .Cast() .Where(md => md.document.GetType() == typeof(TLDocument)) .Select(md => md.document) .Cast() .First(); var resFile = await client.GetFile( new TLInputDocumentFileLocation() { access_hash = document.access_hash, id = document.id, version = document.version }, document.size); Assert.IsTrue(resFile.bytes.Length > 0); } [TestMethod] public async Task SignUpNewUser() { var client = NewClient(); await client.ConnectAsync(); var hash = await client.SendCodeRequestAsync(NotRegisteredNumberToSignUp); var code = ""; var registeredUser = await client.SignUpAsync(NotRegisteredNumberToSignUp, hash, code, "TLSharp", "User"); Assert.IsNotNull(registeredUser); Assert.IsTrue(client.IsUserAuthorized()); var loggedInUser = await client.MakeAuthAsync(NotRegisteredNumberToSignUp, hash, code); Assert.IsNotNull(loggedInUser); } [TestMethod] public async Task CheckPhones() { var client = NewClient(); await client.ConnectAsync(); var result = await client.IsPhoneRegisteredAsync(NumberToAuthenticate); Assert.IsTrue(result); } } }