From f083fb9b30d4f415580fe12562a91093b235b227 Mon Sep 17 00:00:00 2001 From: Afshin Arani Date: Thu, 22 Sep 2016 16:42:27 +0330 Subject: [PATCH] Remove Test Project --- TLSharp.Tests/Properties/AssemblyInfo.cs | 36 -- TLSharp.Tests/TLSharp.Tests.csproj | 94 ----- TLSharp.Tests/TLSharpTests.cs | 423 ----------------------- TLSharp.Tests/app.config | 11 - TLSharp.Tests/data/cat.jpg | Bin 20780 -> 0 bytes TLSharp.Tests/packages.config | 3 - TLSharp.sln | 8 +- 7 files changed, 1 insertion(+), 574 deletions(-) delete mode 100644 TLSharp.Tests/Properties/AssemblyInfo.cs delete mode 100644 TLSharp.Tests/TLSharp.Tests.csproj delete mode 100644 TLSharp.Tests/TLSharpTests.cs delete mode 100644 TLSharp.Tests/app.config delete mode 100644 TLSharp.Tests/data/cat.jpg delete mode 100644 TLSharp.Tests/packages.config diff --git a/TLSharp.Tests/Properties/AssemblyInfo.cs b/TLSharp.Tests/Properties/AssemblyInfo.cs deleted file mode 100644 index 706d0a4..0000000 --- a/TLSharp.Tests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("TLSharp.Tests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("TLSharp.Tests")] -[assembly: AssemblyCopyright("Copyright © 2015")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("de5c0467-ee99-4734-95f2-eff7a0b99924")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TLSharp.Tests/TLSharp.Tests.csproj b/TLSharp.Tests/TLSharp.Tests.csproj deleted file mode 100644 index a2463ad..0000000 --- a/TLSharp.Tests/TLSharp.Tests.csproj +++ /dev/null @@ -1,94 +0,0 @@ - - - - Debug - AnyCPU - {DE5C0467-EE99-4734-95F2-EFF7A0B99924} - Library - Properties - TLSharp.Tests - TLSharp.Tests - v4.5.2 - 512 - {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - {400d2544-1cc6-4d8a-a62c-2292d9947a16} - TLSharp.Core - - - - - - - False - - - False - - - False - - - False - - - - - - - - \ No newline at end of file diff --git a/TLSharp.Tests/TLSharpTests.cs b/TLSharp.Tests/TLSharpTests.cs deleted file mode 100644 index d5ed580..0000000 --- a/TLSharp.Tests/TLSharpTests.cs +++ /dev/null @@ -1,423 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using TLSharp.Core; -using TLSharp.Core.Auth; -using TLSharp.Core.MTProto; -using TLSharp.Core.Network; - -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 = ""; - - private int apiId = 0; - - [TestInitialize] - public void Init() - { - // Setup your phone numbers in app.config - 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 store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - - await client.Connect(); - - var hash = await client.SendCodeRequest(NumberToAuthenticate); - var code = "93463"; // you can change code in debugger - - var user = await client.MakeAuth(NumberToAuthenticate, hash, code); - - Assert.IsNotNull(user); - Assert.IsTrue(client.IsUserAuthorized()); - } - - [TestMethod] - public async Task SignUpNewUser() - { - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - await client.Connect(); - - var hash = await client.SendCodeRequest(NotRegisteredNumberToSignUp); - var code = ""; - - var registeredUser = await client.SignUp(NotRegisteredNumberToSignUp, hash, code, "TLSharp", "User"); - Assert.IsNotNull(registeredUser); - Assert.IsTrue(client.IsUserAuthorized()); - - var loggedInUser = await client.MakeAuth(NotRegisteredNumberToSignUp, hash, code); - Assert.IsNotNull(loggedInUser); - } - - [TestMethod] - public async Task CheckPhones() - { - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - await client.Connect(); - - var result = await client.IsPhoneRegistered(NumberToAuthenticate); - Assert.IsTrue(result); - } - - [TestMethod] - public async Task ImportContactByPhoneNumber() - { - // User should be already authenticated! - - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - - await client.Connect(); - - Assert.IsTrue(client.IsUserAuthorized()); - - var res = await client.ImportContactByPhoneNumber(NumberToSendMessage); - - Assert.IsNotNull(res); - } - - [TestMethod] - public async Task ImportByUserName() - { - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - - await client.Connect(); - - Assert.IsTrue(client.IsUserAuthorized()); - - var res = await client.ImportByUserName(UserNameToSendMessage); - - Assert.IsNotNull(res); - } - - [TestMethod] - public async Task ImportByUserNameAndSendMessage() - { - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - - await client.Connect(); - - Assert.IsTrue(client.IsUserAuthorized()); - - var res = await client.ImportByUserName(UserNameToSendMessage); - - Assert.IsNotNull(res); - - await client.SendMessage(res.Value, "Test message from TelegramClient"); - } - - [TestMethod] - public async Task ImportContactByPhoneNumberAndSendMessage() - { - // User should be already authenticated! - - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - await client.Connect(); - - Assert.IsTrue(client.IsUserAuthorized()); - - var res = await client.ImportContactByPhoneNumber(NumberToSendMessage); - - Assert.IsNotNull(res); - - await client.SendMessage(res.Value, "Test message from TelegramClient"); - } - - [TestMethod] - public async Task GetHistory() - { - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - await client.Connect(); - - Assert.IsTrue(client.IsUserAuthorized()); - - var res = await client.ImportContactByPhoneNumber(NumberToSendMessage); - - Assert.IsNotNull(res); - - var hist = await client.GetMessagesHistoryForContact(res.Value, 0, 5); - - Assert.IsNotNull(hist); - } - - [TestMethod] - public async Task UploadAndSendMedia() - { - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - await client.Connect(); - - Assert.IsTrue(client.IsUserAuthorized()); - - var res = await client.ImportContactByPhoneNumber(NumberToSendMessage); - - Assert.IsNotNull(res); - - var file = File.ReadAllBytes("../../data/cat.jpg"); - - var mediaFile = await client.UploadFile("test_file.jpg", file); - - Assert.IsNotNull(mediaFile); - - var state = await client.SendMediaMessage(res.Value, mediaFile); - - Assert.IsTrue(state); - } - - [TestMethod] - public async Task GetFile() - { - // Get uploaded file from last message (ie: cat.jpg) - - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - await client.Connect(); - Assert.IsTrue(client.IsUserAuthorized()); - - var res = await client.ImportContactByPhoneNumber(NumberToSendMessage); - Assert.IsNotNull(res); - - // Get last message - var hist = await client.GetMessagesHistoryForContact(res.Value, 0, 1); - Assert.AreEqual(1, hist.Count); - - var message = (MessageConstructor) hist[0]; - Assert.AreEqual(typeof (MessageMediaPhotoConstructor), message.media.GetType()); - - var media = (MessageMediaPhotoConstructor) message.media; - Assert.AreEqual(typeof (PhotoConstructor), media.photo.GetType()); - - var photo = (PhotoConstructor) media.photo; - Assert.AreEqual(3, photo.sizes.Count); - Assert.AreEqual(typeof (PhotoSizeConstructor), photo.sizes[2].GetType()); - - var photoSize = (PhotoSizeConstructor) photo.sizes[2]; - Assert.AreEqual(typeof (FileLocationConstructor), photoSize.location.GetType()); - - var fileLocation = (FileLocationConstructor) photoSize.location; - var file = await client.GetFile(fileLocation.volume_id, fileLocation.local_id, fileLocation.secret, 0, photoSize.size + 1024); - storage_FileType type = file.Item1; - byte[] bytes = file.Item2; - - string name = "../../data/get_file."; - if (type.GetType() == typeof (Storage_fileJpegConstructor)) - name += "jpg"; - else if (type.GetType() == typeof (Storage_fileGifConstructor)) - name += "gif"; - else if (type.GetType() == typeof (Storage_filePngConstructor)) - name += "png"; - - using (var fileStream = new FileStream(name, FileMode.Create, FileAccess.Write)) - { - fileStream.Write(bytes, 4, photoSize.size); // The first 4 bytes seem to be the error code - } - } - - [TestMethod] - public async Task TestConnection() - { - var store = new FakeSessionStore(); - var client = new TelegramClient(store, "", apiId, apiHash); - - Assert.IsTrue(await client.Connect()); - } - - [TestMethod] - public async Task AuthenticationWorks() - { - using (var transport = new TcpTransport("91.108.56.165", 443)) - { - var authKey = await Authenticator.DoAuthentication(transport); - - Assert.IsNotNull(authKey.AuthKey.Data); - } - } - - [TestMethod] - public async Task GetUserFullRequest() - { - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - await client.Connect(); - - Assert.IsTrue(client.IsUserAuthorized()); - - var res = await client.ImportContactByPhoneNumber(NumberToGetUserFull); - - Assert.IsNotNull(res); - - var userFull = await client.GetUserFull(res.Value); - - Assert.IsNotNull(userFull); - } - - [TestMethod] - public async Task CreateChatRequest() - { - var client = await InitializeClient(); - - var chatName = Guid.NewGuid().ToString(); - var statedMessage = await client.CreateChat(chatName, new List {NumberToSendMessage}); - - var createdChat = GetChatFromStatedMessage(statedMessage); - - Assert.AreEqual(chatName, createdChat.title); - Assert.AreEqual(2, createdChat.participants_count); - } - - [TestMethod] - public async Task AddChatUserRequest() - { - var client = await InitializeClient(); - - var chatName = Guid.NewGuid().ToString(); - var statedMessageAfterCreation = await client.CreateChat(chatName, new List { NumberToSendMessage }); - - var createdChat = GetChatFromStatedMessage(statedMessageAfterCreation); - - var addUserId = await client.ImportContactByPhoneNumber(NumberToAddToChat); - - var statedMessageAfterAddUser = await client.AddChatUser(createdChat.id, addUserId.Value); - var modifiedChat = GetChatFromStatedMessage(statedMessageAfterAddUser); - - Assert.AreEqual(createdChat.id, modifiedChat.id); - Assert.AreEqual(3, modifiedChat.participants_count); - } - - [TestMethod] - public async Task LeaveChatRequest() - { - var client = await InitializeClient(); - - var chatName = Guid.NewGuid().ToString(); - var statedMessageAfterCreation = await client.CreateChat(chatName, new List { NumberToSendMessage }); - - var createdChat = GetChatFromStatedMessage(statedMessageAfterCreation); - - var statedMessageAfterLeave = await client.LeaveChat(createdChat.id); - var modifiedChat = GetChatFromStatedMessage(statedMessageAfterLeave); - - Assert.AreEqual(createdChat.id, modifiedChat.id); - Assert.AreEqual(1, modifiedChat.participants_count); - } - - private ChatConstructor GetChatFromStatedMessage(Messages_statedMessageConstructor message) - { - var serviceMessage = message.message as MessageServiceConstructor; - var peerChat = serviceMessage.to_id as PeerChatConstructor; - - var createdChatId = peerChat.chat_id; - return message.chats.OfType().Single(c => c.id == createdChatId); - } - - private async Task InitializeClient() - { - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - await client.Connect(); - - if (!client.IsUserAuthorized()) - { - var hash = await client.SendCodeRequest(NumberToAuthenticate); - - var code = ""; // you can change code in debugger - Debugger.Break(); - - await client.MakeAuth(NumberToAuthenticate, hash, code); - } - - Assert.IsTrue(client.IsUserAuthorized()); - - return client; - } - - [TestMethod] - public async Task GetUpdates() - { - var store = new FileSessionStore(); - var client = new TelegramClient(store, "session", apiId, apiHash); - await client.Connect(); - - Assert.IsTrue(client.IsUserAuthorized()); - - var updatesState = await client.GetUpdatesState(); - var initialState = updatesState as Updates_stateConstructor; - - Assert.IsNotNull(initialState); - - var difference = await client.GetUpdatesDifference(initialState.pts, initialState.date, initialState.qts); - Assert.IsNotNull(difference); - Assert.AreEqual(difference.Constructor, Constructor.updates_differenceEmpty); - - var userIdToSendMessage = await client.ImportContactByPhoneNumber(NumberToSendMessage); - - await client.SendMessage(userIdToSendMessage.Value, "test"); - - var differenceAfterMessage = await client.GetUpdatesDifference(initialState.pts, initialState.date, initialState.qts); - - Assert.IsNotNull(differenceAfterMessage); - Assert.AreEqual(differenceAfterMessage.Constructor, Constructor.updates_difference); - - var differenceUpdate = differenceAfterMessage as Updates_differenceConstructor; - Assert.IsNotNull(differenceUpdate); - Assert.AreEqual(1, differenceUpdate.new_messages.Count); - - var messageUpdate = differenceUpdate.new_messages[0] as MessageConstructor; - Assert.IsNotNull(messageUpdate); - - Assert.AreEqual("test", messageUpdate.message); - } - } -} diff --git a/TLSharp.Tests/app.config b/TLSharp.Tests/app.config deleted file mode 100644 index 62aae65..0000000 --- a/TLSharp.Tests/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/TLSharp.Tests/data/cat.jpg b/TLSharp.Tests/data/cat.jpg deleted file mode 100644 index f64b383766a1ea4a6ee4cfec45810538141e9163..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20780 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 diff --git a/TLSharp.Tests/packages.config b/TLSharp.Tests/packages.config deleted file mode 100644 index 6b8deb9..0000000 --- a/TLSharp.Tests/packages.config +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/TLSharp.sln b/TLSharp.sln index d9ec695..1d8702f 100644 --- a/TLSharp.sln +++ b/TLSharp.sln @@ -1,12 +1,10 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 +VisualStudioVersion = 14.0.24720.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TLSharp.Core", "TLSharp.Core\TLSharp.Core.csproj", "{400D2544-1CC6-4D8A-A62C-2292D9947A16}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TLSharp.Tests", "TLSharp.Tests\TLSharp.Tests.csproj", "{DE5C0467-EE99-4734-95F2-EFF7A0B99924}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -17,10 +15,6 @@ Global {400D2544-1CC6-4D8A-A62C-2292D9947A16}.Debug|Any CPU.Build.0 = Debug|Any CPU {400D2544-1CC6-4D8A-A62C-2292D9947A16}.Release|Any CPU.ActiveCfg = Release|Any CPU {400D2544-1CC6-4D8A-A62C-2292D9947A16}.Release|Any CPU.Build.0 = Release|Any CPU - {DE5C0467-EE99-4734-95F2-EFF7A0B99924}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE5C0467-EE99-4734-95F2-EFF7A0B99924}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE5C0467-EE99-4734-95F2-EFF7A0B99924}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DE5C0467-EE99-4734-95F2-EFF7A0B99924}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE