diff --git a/.gitignore b/.gitignore index 7c4ca8b..40f7967 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,119 @@ +# Created by https://www.toptal.com/developers/gitignore/api/visualstudio,dotnetcore,jetbrains +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio,dotnetcore,jetbrains + +### DotnetCore ### +# .NET Core build folders +bin/ +obj/ + +# Common node modules locations +/node_modules +/wwwroot/node_modules + +### JetBrains ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### JetBrains Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/**/sonarlint/ + +# SonarQube Plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +### VisualStudio ### ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files +*.rsuser *.suo *.user *.userosscache @@ -10,6 +122,9 @@ # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs +# Mono auto generated files +mono_crash.* + # Build results [Dd]ebug/ [Dd]ebugPublic/ @@ -17,41 +132,58 @@ [Rr]eleases/ x64/ x86/ -build/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ bld/ [Bb]in/ [Oo]bj/ +[Ll]og/ +[Ll]ogs/ -# Visual Studio 2015 cache/options directory +# Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ +# Visual Studio 2017 auto generated files +Generated\ Files/ + # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* -# NUNIT +# NUnit *.VisualState.xml TestResult.xml +nunit-*.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c -# DNX +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core project.lock.json +project.fragment.lock.json artifacts/ +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio *_i.c *_p.c -*_i.h +*_h.h *.ilk *.meta *.obj +*.iobj *.pch *.pdb +*.ipdb *.pgc *.pgd *.rsp @@ -61,6 +193,7 @@ artifacts/ *.tlh *.tmp *.tmp_proj +*_wpftmp.csproj *.log *.vspscc *.vssscc @@ -76,14 +209,21 @@ _Chutzpah* ipch/ *.aps *.ncb +*.opendb *.opensdf *.sdf *.cachefile +*.VC.db +*.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx +*.sap + +# Visual Studio Trace Files +*.e2e # TFS 2012 Local Workspace $tf/ @@ -96,15 +236,23 @@ _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user -# JustCode is a .NET coding add-in -.JustCode - # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*[.json, .xml, .info] + +# Visual Studio code coverage results +*.coverage +*.coveragexml + # NCrunch _NCrunch_* .*crunch*.local.xml @@ -136,45 +284,72 @@ publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml -# TODO: Comment the next line if you want to checkin your web deploy settings +# Note: Comment the next line if you want to checkin your web deploy settings, # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + # NuGet Packages *.nupkg +# NuGet Symbol Packages +*.snupkg # The packages folder can be ignored because of Package Restore -**/packages/* +**/[Pp]ackages/* # except build/, which is used as an MSBuild target. -!**/packages/build/ +!**/[Pp]ackages/build/ # Uncomment if necessary however generally it will be regenerated when needed -#!**/packages/repositories.config +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets -# Windows Azure Build Output +# Microsoft Azure Build Output csx/ *.build.csdef -# Windows Store app package directory +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache -!*.[Cc]ache/ +!?*.[Cc]ache/ # Others ClientBin/ -[Ss]tyle[Cc]op.* ~$* *~ *.dbmdl *.dbproj.schemaview +*.jfm *.pfx *.publishsettings -node_modules/ orleans.codegen.cs +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + # RIA/Silverlight projects Generated_Code/ @@ -185,21 +360,32 @@ _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak # SQL Server files *.mdf *.ldf +*.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl # Microsoft Fakes FakesAssemblies/ +# GhostDoc plugin setting file +*.GhostDoc.xml + # Node.js Tools for Visual Studio .ntvs_analysis.dat +node_modules/ # Visual Studio 6 build log *.plg @@ -207,6 +393,9 @@ FakesAssemblies/ # Visual Studio 6 workspace options file *.opt +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts @@ -214,3 +403,62 @@ FakesAssemblies/ **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# End of https://www.toptal.com/developers/gitignore/api/visualstudio,dotnetcore,jetbrains diff --git a/TextmagicRest.Examples/App.config b/TextmagicRest.Examples/App.config deleted file mode 100644 index 9c05822..0000000 --- a/TextmagicRest.Examples/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/TextmagicRest.Examples/Program.cs b/TextmagicRest.Examples/Program.cs index 746454b..a32fce9 100644 --- a/TextmagicRest.Examples/Program.cs +++ b/TextmagicRest.Examples/Program.cs @@ -1,22 +1,19 @@ using System; -using System.Collections.Generic; -using TextmagicRest; -using TextmagicRest.Model; -namespace textmagicsample +namespace TextmagicRest.Examples { - class Program + public class Program { - public static void Main(string[] args) + public static void Main() { - sendMessage(); + SendMessage(); Console.WriteLine("Check your phone ;-)"); Console.WriteLine("Press any key to continue . . . "); Console.ReadKey(true); } - public static void sendMessage() + public static void SendMessage() { var client = new Client("replace-with-username", "replace-with-user-api-key"); var link = client.SendMessage("Hello from TextMagic API C# Wrapper demo application", "replace-with-phoneNumber-WithInternationalPrefix"); diff --git a/TextmagicRest.Examples/Properties/AssemblyInfo.cs b/TextmagicRest.Examples/Properties/AssemblyInfo.cs deleted file mode 100644 index 2b0cde9..0000000 --- a/TextmagicRest.Examples/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("TextmagicRest.Examples")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("TextmagicRest.Examples")] -[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("9d899328-bb7e-4513-84fa-b8b1bf65f945")] - -// 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/TextmagicRest.Examples/TextmagicRest.Examples.csproj b/TextmagicRest.Examples/TextmagicRest.Examples.csproj index ab961bf..506c291 100644 --- a/TextmagicRest.Examples/TextmagicRest.Examples.csproj +++ b/TextmagicRest.Examples/TextmagicRest.Examples.csproj @@ -1,65 +1,12 @@ - - - + + - Debug - AnyCPU - {2072E259-422B-4F76-A874-01A50079CF67} Exe - Properties - TextmagicRest.Examples - TextmagicRest.Examples - v4.5.1 - 512 - true + netcoreapp3.1 - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - + - - {2aa7cf5d-8e4c-4c6d-8871-26afbe6c078f} - TextmagicRest - + - - - \ No newline at end of file + + diff --git a/TextmagicRest.Tests/Common.cs b/TextmagicRest.Tests/Common.cs index d1a8720..a007695 100644 --- a/TextmagicRest.Tests/Common.cs +++ b/TextmagicRest.Tests/Common.cs @@ -1,12 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using RestSharp; -using System.Net; +using System.Net; using Moq; -using RestSharp.Deserializers; +using RestSharp; +using RestSharp.Serialization.Json; namespace TextmagicRest.Tests { @@ -15,13 +10,14 @@ public static class Common public static string Username = "csharp-test-username"; public static string Token = "csharp-test-token"; - public static IRestClient CreateClient(string json, ResponseStatus? responseStatus, HttpStatusCode? statusCode) where T: new() + public static IRestClient CreateClient(string json, ResponseStatus? responseStatus, + HttpStatusCode? statusCode) where T : new() { - var resp = new RestResponse() + var resp = new RestResponse { ContentType = "application/json", - ResponseStatus = responseStatus.HasValue? (ResponseStatus)responseStatus: RestSharp.ResponseStatus.Completed, - StatusCode = statusCode.HasValue? (HttpStatusCode)statusCode: HttpStatusCode.OK, + ResponseStatus = responseStatus.HasValue ? (ResponseStatus) responseStatus : ResponseStatus.Completed, + StatusCode = statusCode.HasValue ? (HttpStatusCode) statusCode : HttpStatusCode.OK, Content = json }; @@ -35,4 +31,4 @@ public static class Common return mock.Object; } } -} +} \ No newline at end of file diff --git a/TextmagicRest.Tests/ContactsTests.cs b/TextmagicRest.Tests/ContactsTests.cs index 703f94e..7233f81 100644 --- a/TextmagicRest.Tests/ContactsTests.cs +++ b/TextmagicRest.Tests/ContactsTests.cs @@ -1,17 +1,22 @@ using System; using System.Collections.Generic; -using TextmagicRest.Model; using Moq; using NUnit.Framework; using RestSharp; -using System.Text; -using RestSharp.Deserializers; +using TextmagicRest.Model; namespace TextmagicRest.Tests { [TestFixture] public class ContactsTests { + [SetUp] + public void Setup() + { + mockClient = new Mock(Common.Username, Common.Token); + mockClient.CallBase = true; + } + private Mock mockClient; private const int contactId = 31337; @@ -25,56 +30,140 @@ public class ContactsTests private const string customFieldName = "Secure ID"; private const string customFieldValue = "ABC"; private const string contactCompanyName = "JohnCo"; - private DateTime customFieldValueCreatedAt = new DateTime(2007, 12, 27, 13, 04, 20, DateTimeKind.Utc); - private int[] listIds = { 123, 456 }; + private readonly DateTime customFieldValueCreatedAt = new DateTime(2007, 12, 27, 13, 04, 20, DateTimeKind.Utc); + private readonly int[] listIds = {123, 456}; - [SetUp] - public void Setup() + [Test] + public void ShouldCreateContact() { - mockClient = new Mock(Common.Username, Common.Token); - mockClient.CallBase = true; + IRestRequest savedRequest = null; + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new LinkResult()); + var client = mockClient.Object; + + client.CreateContact(contactPhone, listIds, contactFirstName, contactLastName, contactCompanyName, + contactEmail); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + Assert.IsNotNull(savedRequest); + Assert.AreEqual("contacts", savedRequest.Resource); + Assert.AreEqual(Method.POST, savedRequest.Method); + Assert.AreEqual(6, savedRequest.Parameters.Count); + Assert.AreEqual(contactFirstName, savedRequest.Parameters.Find(x => x.Name == "firstName").Value); + Assert.AreEqual(contactLastName, savedRequest.Parameters.Find(x => x.Name == "lastName").Value); + Assert.AreEqual(contactPhone, savedRequest.Parameters.Find(x => x.Name == "phone").Value); + Assert.AreEqual(contactEmail, savedRequest.Parameters.Find(x => x.Name == "email").Value); + Assert.AreEqual(contactCompanyName, savedRequest.Parameters.Find(x => x.Name == "companyName").Value); + Assert.AreEqual(string.Join(",", listIds), savedRequest.Parameters.Find(x => x.Name == "lists").Value); + + var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/contacts/31337\"}"; + + var testClient = Common.CreateClient(content, null, null); + client = new Client(testClient); + + var link = client.CreateContact(contactPhone, listIds, contactFirstName, contactLastName, + contactCompanyName, contactEmail); + + Assert.IsTrue(link.Success); + Assert.AreEqual(31337, link.Id); + Assert.AreEqual("/api/v2/contacts/31337", link.Href); } [Test] - public void ShouldGetSingleContact() + public void ShouldCreateCustomField() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new Contact()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new LinkResult()); var client = mockClient.Object; - client.GetContact(contactId); + client.CreateCustomField(customFieldName); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + Assert.IsNotNull(savedRequest); + Assert.AreEqual("customfields", savedRequest.Resource); + Assert.AreEqual(Method.POST, savedRequest.Method); + Assert.AreEqual(1, savedRequest.Parameters.Count); + Assert.AreEqual(customFieldName, savedRequest.Parameters.Find(x => x.Name == "name").Value); + + var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/contacts/31337\"}"; + + var testClient = Common.CreateClient(content, null, null); + client = new Client(testClient); + + var link = client.CreateCustomField(customFieldName); + + Assert.IsTrue(link.Success); + Assert.AreEqual(31337, link.Id); + Assert.AreEqual("/api/v2/contacts/31337", link.Href); + } + + [Test] + public void ShouldDeleteContact() + { + IRestRequest savedRequest = null; + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new DeleteResult()); + var client = mockClient.Object; + + var contact = new Contact + { + Id = contactId + }; + + client.DeleteContact(contact); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); Assert.AreEqual("contacts/{id}", savedRequest.Resource); - Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(Method.DELETE, savedRequest.Method); Assert.AreEqual(1, savedRequest.Parameters.Count); + Assert.AreEqual(contactId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - var content = "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," - + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," - + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }"; + var content = "{}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var contact = client.GetContact(contactId); + var result = client.DeleteContact(contact); - Assert.IsTrue(contact.Success); - Assert.AreEqual(contactId, contact.Id); - Assert.AreEqual(contactFirstName, contact.FirstName); - Assert.AreEqual(contactLastName, contact.LastName); - Assert.AreEqual(contactPhone, contact.Phone); - Assert.IsNull(contact.CompanyName); - Assert.AreEqual(contactEmail, contact.Email); - Assert.AreEqual(countryId, contact.Country.Id); - Assert.AreEqual(countryName, contact.Country.Name); - Assert.Greater(contact.CustomFields.Count, 0); - Assert.AreEqual(customFieldId, contact.CustomFields[0].Id); - Assert.AreEqual(customFieldName, contact.CustomFields[0].Name); - Assert.AreEqual(customFieldValue, contact.CustomFields[0].Value); - Assert.AreEqual(customFieldValueCreatedAt.ToLocalTime(), contact.CustomFields[0].CreatedAt); + Assert.IsTrue(result.Success); + } + + [Test] + public void ShouldDeleteCustomField() + { + IRestRequest savedRequest = null; + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new DeleteResult()); + var client = mockClient.Object; + + var customField = new CustomField + { + Id = customFieldId + }; + + client.DeleteCustomField(customField); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + Assert.IsNotNull(savedRequest); + Assert.AreEqual("customfields/{id}", savedRequest.Resource); + Assert.AreEqual(Method.DELETE, savedRequest.Method); + Assert.AreEqual(1, savedRequest.Parameters.Count); + Assert.AreEqual(customFieldId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); + + var content = "{}"; + + var testClient = Common.CreateClient(content, null, null); + client = new Client(testClient); + + var result = client.DeleteCustomField(customField); + + Assert.IsTrue(result.Success); } [Test] @@ -85,7 +174,7 @@ public void ShouldGetAllContacts() IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new ContactsResult()); var client = mockClient.Object; @@ -100,14 +189,13 @@ public void ShouldGetAllContacts() Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" - + "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," - + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," - + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }" - - + "{ \"id\": \"31338\", \"first_name\": \"Jack\", \"lastName\": \"Doe\", \"companyName\": null," - + "\"phone\": \"999123457\", \"email\": \"jack@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," - + "\"customFields\": [ ] }" - + "] }"; + + "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," + + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," + + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }" + + "{ \"id\": \"31338\", \"first_name\": \"Jack\", \"lastName\": \"Doe\", \"companyName\": null," + + "\"phone\": \"999123457\", \"email\": \"jack@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," + + "\"customFields\": [ ] }" + + "] }"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); @@ -130,7 +218,7 @@ public void ShouldGetAllContactsWithDefaultParameters() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new ContactsResult()); var client = mockClient.Object; @@ -143,14 +231,13 @@ public void ShouldGetAllContactsWithDefaultParameters() Assert.AreEqual(0, savedRequest.Parameters.Count); var content = "{ \"page\": 1, \"limit\": 10, \"pageCount\": 3, \"resources\": [" - + "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," - + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," - + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }" - - + "{ \"id\": \"31338\", \"first_name\": \"Jack\", \"lastName\": \"Doe\", \"companyName\": null," - + "\"phone\": \"999123457\", \"email\": \"jack@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," - + "\"customFields\": [ ] }" - + "] }"; + + "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," + + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," + + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }" + + "{ \"id\": \"31338\", \"first_name\": \"Jack\", \"lastName\": \"Doe\", \"companyName\": null," + + "\"phone\": \"999123457\", \"email\": \"jack@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," + + "\"customFields\": [ ] }" + + "] }"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); @@ -177,7 +264,7 @@ public void ShouldGetAllContactsWithSharedIncluded() IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new ContactsResult()); var client = mockClient.Object; @@ -190,17 +277,17 @@ public void ShouldGetAllContactsWithSharedIncluded() Assert.AreEqual(3, savedRequest.Parameters.Count); Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - Assert.AreEqual(Convert.ToInt32(shared).ToString(), savedRequest.Parameters.Find(x => x.Name == "shared").Value); + Assert.AreEqual(Convert.ToInt32(shared).ToString(), + savedRequest.Parameters.Find(x => x.Name == "shared").Value); var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" - + "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," - + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," - + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }" - - + "{ \"id\": \"31338\", \"first_name\": \"Jack\", \"lastName\": \"Doe\", \"companyName\": null," - + "\"phone\": \"999123457\", \"email\": \"jack@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," - + "\"customFields\": [ ] }" - + "] }"; + + "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," + + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," + + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }" + + "{ \"id\": \"31338\", \"first_name\": \"Jack\", \"lastName\": \"Doe\", \"companyName\": null," + + "\"phone\": \"999123457\", \"email\": \"jack@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," + + "\"customFields\": [ ] }" + + "] }"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); @@ -219,331 +306,322 @@ public void ShouldGetAllContactsWithSharedIncluded() } [Test] - public void ShouldUpdateContact() + public void ShouldGetAllCustomFields() { + var page = 2; + var limit = 3; + IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new LinkResult()); - mockClient.Setup(trc => trc.SetCustomFieldValue(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns(new LinkResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new CustomFieldsResult()); var client = mockClient.Object; - var contact = new Contact() - { - Id = contactId, - Phone = contactPhone, - FirstName = contactFirstName, - LastName = contactLastName, - CompanyName = contactCompanyName, - Country = new Country() { Id = countryId, Name = countryName }, - Email = contactEmail - }; - - CustomField testCustomField = new CustomField() { Id = 1, Name = "Id1", Value = "StringId1" }; - contact.CustomFields = new List(); - contact.CustomFields.Add(testCustomField); - - client.UpdateContact(contact, listIds); + client.GetCustomFields(page, limit); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); - mockClient.Verify(trc => trc.SetCustomFieldValue(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("contacts/{id}", savedRequest.Resource); - Assert.AreEqual(Method.PUT, savedRequest.Method); - Assert.AreEqual(7, savedRequest.Parameters.Count); - Assert.AreEqual(contactId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - Assert.AreEqual(contactPhone, savedRequest.Parameters.Find(x => x.Name == "phone").Value); - Assert.AreEqual(string.Join(",", listIds), savedRequest.Parameters.Find(x => x.Name == "lists").Value); - Assert.AreEqual(contactFirstName, savedRequest.Parameters.Find(x => x.Name == "firstName").Value); - Assert.AreEqual(contactLastName, savedRequest.Parameters.Find(x => x.Name == "lastName").Value); - Assert.AreEqual(contactEmail, savedRequest.Parameters.Find(x => x.Name == "email").Value); - Assert.AreEqual(contactCompanyName, savedRequest.Parameters.Find(x => x.Name == "companyName").Value); + Assert.AreEqual("customfields", savedRequest.Resource); + Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); + Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/contacts/31337\"}"; + var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" + + "{ \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" }," + + "{ \"id\": 589, \"name\": \"Secure ID2\", \"value\": \"ABCD\", \"createdAt\": \"2007-12-27T13:04:20+0000\" }" + + "] }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var link = client.UpdateContact(contact, listIds); + var results = client.GetCustomFields(page, limit); - Assert.IsTrue(link.Success); - Assert.AreEqual(31337, link.Id); - Assert.AreEqual("/api/v2/contacts/31337", link.Href); + Assert.IsTrue(results.CustomFields[0].Success); + Assert.AreEqual(73, results.CustomFields[0].Id); + Assert.AreEqual("Secure ID", results.CustomFields[0].Name); + Assert.AreEqual("ABC", results.CustomFields[0].Value); + Assert.IsNotNull(results.CustomFields[0].CreatedAt); + + Assert.IsTrue(results.CustomFields[1].Success); + Assert.AreEqual(589, results.CustomFields[1].Id); + Assert.AreEqual("Secure ID2", results.CustomFields[1].Name); + Assert.AreEqual("ABCD", results.CustomFields[1].Value); + Assert.IsNotNull(results.CustomFields[1].CreatedAt); } [Test] - public void ShouldCreateContact() + public void ShouldGetAllUnsubscribedContacts() { + var page = 2; + var limit = 3; + IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new LinkResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new UnsubscribedContactsResult()); var client = mockClient.Object; - client.CreateContact(contactPhone, listIds, contactFirstName, contactLastName, contactCompanyName, contactEmail); + client.GetUnsubscribedContacts(page, limit); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("contacts", savedRequest.Resource); - Assert.AreEqual(Method.POST, savedRequest.Method); - Assert.AreEqual(6, savedRequest.Parameters.Count); - Assert.AreEqual(contactFirstName, savedRequest.Parameters.Find(x => x.Name == "firstName").Value); - Assert.AreEqual(contactLastName, savedRequest.Parameters.Find(x => x.Name == "lastName").Value); - Assert.AreEqual(contactPhone, savedRequest.Parameters.Find(x => x.Name == "phone").Value); - Assert.AreEqual(contactEmail, savedRequest.Parameters.Find(x => x.Name == "email").Value); - Assert.AreEqual(contactCompanyName, savedRequest.Parameters.Find(x => x.Name == "companyName").Value); - Assert.AreEqual(string.Join(",", listIds), savedRequest.Parameters.Find(x => x.Name == "lists").Value); + Assert.AreEqual("unsubscribers", savedRequest.Resource); + Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); + Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/contacts/31337\"}"; + var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" + + "{ \"id\": \"276\", \"firstName\": \"John\", \"lastName\": \"Doe\"," + + "\"phone\": \"999123456\", \"unsubscribeTime\": \"2007-12-27T13:04:20+0000\" } ] }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var link = client.CreateContact(contactPhone, listIds, contactFirstName, contactLastName, contactCompanyName, contactEmail); + var results = client.GetUnsubscribedContacts(page, limit); - Assert.IsTrue(link.Success); - Assert.AreEqual(31337, link.Id); - Assert.AreEqual("/api/v2/contacts/31337", link.Href); + Assert.IsTrue(results.UnsubscribedContacts[0].Success); + Assert.AreEqual(276, results.UnsubscribedContacts[0].Id); + Assert.AreEqual("John", results.UnsubscribedContacts[0].FirstName); + Assert.AreEqual("Doe", results.UnsubscribedContacts[0].LastName); + Assert.AreEqual("999123456", results.UnsubscribedContacts[0].Phone); + Assert.IsNotNull(results.UnsubscribedContacts[0].UnsubscribedAt); } [Test] - public void ShouldDeleteContact() + public void ShouldGetListsWhichContactBelongsTo() { + var page = 2; + var limit = 3; + IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new DeleteResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new ContactListsResult()); var client = mockClient.Object; - var contact = new Contact() - { - Id = contactId - }; - - client.DeleteContact(contact); + client.GetListsWhichContactBelongsTo(contactId, page, limit); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("contacts/{id}", savedRequest.Resource); - Assert.AreEqual(Method.DELETE, savedRequest.Method); - Assert.AreEqual(1, savedRequest.Parameters.Count); + Assert.AreEqual("contacts/{id}/lists", savedRequest.Resource); + Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(3, savedRequest.Parameters.Count); Assert.AreEqual(contactId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); + Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); + Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - var content = "{}"; + var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" + + "{ \"id\": \"31337\", \"name\": \"Partners\", \"description\": \"\"," + + "\"membersCount\": 1, \"shared\": false } ] }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var result = client.DeleteContact(contact); + var results = client.GetListsWhichContactBelongsTo(contactId, page, limit); - Assert.IsTrue(result.Success); + Assert.IsTrue(results.Success); + Assert.AreEqual(contactId, results.ContactLists[0].Id); + Assert.AreEqual("Partners", results.ContactLists[0].Name); + Assert.AreEqual("", results.ContactLists[0].Description); + Assert.AreEqual(1, results.ContactLists[0].MembersCount); + Assert.AreEqual(false, results.ContactLists[0].Shared); } [Test] - public void ShouldGetSingleUnsubscribedContact() + public void ShouldGetSingleContact() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new UnsubscribedContact()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new Contact()); var client = mockClient.Object; - client.GetUnsubscribedContact(contactId); + client.GetContact(contactId); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("unsubscribers/{id}", savedRequest.Resource); + Assert.AreEqual("contacts/{id}", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); Assert.AreEqual(1, savedRequest.Parameters.Count); - var content = "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\"," - + "\"phone\": \"999123456\", \"unsubscribeTime\": \"2007-12-27T13:04:20+0000\" } ] }"; + var content = "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," + + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," + + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var contact = client.GetUnsubscribedContact(contactId); + var contact = client.GetContact(contactId); Assert.IsTrue(contact.Success); Assert.AreEqual(contactId, contact.Id); Assert.AreEqual(contactFirstName, contact.FirstName); Assert.AreEqual(contactLastName, contact.LastName); Assert.AreEqual(contactPhone, contact.Phone); - Assert.AreEqual(customFieldValueCreatedAt.ToLocalTime(), contact.UnsubscribedAt); + Assert.IsNull(contact.CompanyName); + Assert.AreEqual(contactEmail, contact.Email); + Assert.AreEqual(countryId, contact.Country.Id); + Assert.AreEqual(countryName, contact.Country.Name); + Assert.Greater(contact.CustomFields.Count, 0); + Assert.AreEqual(customFieldId, contact.CustomFields[0].Id); + Assert.AreEqual(customFieldName, contact.CustomFields[0].Name); + Assert.AreEqual(customFieldValue, contact.CustomFields[0].Value); + Assert.AreEqual(customFieldValueCreatedAt.ToLocalTime(), contact.CustomFields[0].CreatedAt); } [Test] - public void ShouldGetAllUnsubscribedContacts() + public void ShouldGetSingleCustomField() { - var page = 2; - var limit = 3; - IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new UnsubscribedContactsResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new CustomField()); var client = mockClient.Object; - client.GetUnsubscribedContacts(page, limit); + client.GetCustomField(customFieldId); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("unsubscribers", savedRequest.Resource); + Assert.AreEqual("customfields/{id}", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); - Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); - Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - - var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" - + "{ \"id\": \"276\", \"firstName\": \"John\", \"lastName\": \"Doe\"," - + "\"phone\": \"999123456\", \"unsubscribeTime\": \"2007-12-27T13:04:20+0000\" } ] }"; - - var testClient = Common.CreateClient(content, null, null); - client = new Client(testClient); - - var results = client.GetUnsubscribedContacts(page, limit); - - Assert.IsTrue(results.UnsubscribedContacts[0].Success); - Assert.AreEqual(276, results.UnsubscribedContacts[0].Id); - Assert.AreEqual("John", results.UnsubscribedContacts[0].FirstName); - Assert.AreEqual("Doe", results.UnsubscribedContacts[0].LastName); - Assert.AreEqual("999123456", results.UnsubscribedContacts[0].Phone); - Assert.IsNotNull(results.UnsubscribedContacts[0].UnsubscribedAt); - } - - [Test] - public void ShouldUnsubscribeContact() - { - IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new LinkResult()); - var client = mockClient.Object; - - var contact = new Contact() { Phone = contactPhone }; - client.UnsubscribeContact(contact); - - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); - Assert.IsNotNull(savedRequest); - Assert.AreEqual("unsubscribers", savedRequest.Resource); - Assert.AreEqual(Method.POST, savedRequest.Method); Assert.AreEqual(1, savedRequest.Parameters.Count); - Assert.AreEqual(contactPhone, savedRequest.Parameters.Find(x => x.Name == "phone").Value); + Assert.AreEqual(customFieldId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/contacts/31337\"}"; + var content = + "{ \"id\": \"31337\", \"name\": \"customfieldname\", \"createdAt\": \"2007-12-27T13:04:20+0000\"}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var link = client.UnsubscribeContact(contact); + var link = client.GetCustomField(customFieldId); Assert.IsTrue(link.Success); Assert.AreEqual(31337, link.Id); - Assert.AreEqual("/api/v2/contacts/31337", link.Href); + Assert.AreEqual("customfieldname", link.Name); + Assert.IsNotNull(link.CreatedAt); + Assert.IsNull(link.Value); } [Test] - public void ShouldGetSingleCustomField() + public void ShouldGetSingleUnsubscribedContact() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new CustomField()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new UnsubscribedContact()); var client = mockClient.Object; - client.GetCustomField(customFieldId); + client.GetUnsubscribedContact(contactId); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("customfields/{id}", savedRequest.Resource); + Assert.AreEqual("unsubscribers/{id}", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); Assert.AreEqual(1, savedRequest.Parameters.Count); - Assert.AreEqual(customFieldId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - var content = "{ \"id\": \"31337\", \"name\": \"customfieldname\", \"createdAt\": \"2007-12-27T13:04:20+0000\"}"; + var content = "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\"," + + "\"phone\": \"999123456\", \"unsubscribeTime\": \"2007-12-27T13:04:20+0000\" } ] }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var link = client.GetCustomField(customFieldId); + var contact = client.GetUnsubscribedContact(contactId); - Assert.IsTrue(link.Success); - Assert.AreEqual(31337, link.Id); - Assert.AreEqual("customfieldname", link.Name); - Assert.IsNotNull(link.CreatedAt); - Assert.IsNull(link.Value); + Assert.IsTrue(contact.Success); + Assert.AreEqual(contactId, contact.Id); + Assert.AreEqual(contactFirstName, contact.FirstName); + Assert.AreEqual(contactLastName, contact.LastName); + Assert.AreEqual(contactPhone, contact.Phone); + Assert.AreEqual(customFieldValueCreatedAt.ToLocalTime(), contact.UnsubscribedAt); } [Test] - public void ShouldGetAllCustomFields() + public void ShouldSearchContacts() { var page = 2; var limit = 3; + var shared = false; + int[] ids = {276}; + var listId = 123; + var query = "my_query"; IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new CustomFieldsResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new ContactsResult()); var client = mockClient.Object; - client.GetCustomFields(page, limit); + client.SearchContacts(page, limit, shared, ids, listId, query); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("customfields", savedRequest.Resource); + Assert.AreEqual("contacts/search", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(6, savedRequest.Parameters.Count); Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); + Assert.AreEqual(Convert.ToInt32(shared).ToString(), + savedRequest.Parameters.Find(x => x.Name == "shared").Value); + Assert.AreEqual(ids[0].ToString(), savedRequest.Parameters.Find(x => x.Name == "ids").Value); + Assert.AreEqual(listId.ToString(), savedRequest.Parameters.Find(x => x.Name == "listId").Value); + Assert.AreEqual(query, savedRequest.Parameters.Find(x => x.Name == "query").Value); var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" - + "{ \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" }," - + "{ \"id\": 589, \"name\": \"Secure ID2\", \"value\": \"ABCD\", \"createdAt\": \"2007-12-27T13:04:20+0000\" }" + + "{ \"id\": \"276\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," + + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," + + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }" + "] }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var results = client.GetCustomFields(page, limit); - - Assert.IsTrue(results.CustomFields[0].Success); - Assert.AreEqual(73, results.CustomFields[0].Id); - Assert.AreEqual("Secure ID", results.CustomFields[0].Name); - Assert.AreEqual("ABC", results.CustomFields[0].Value); - Assert.IsNotNull(results.CustomFields[0].CreatedAt); + var contacts = client.SearchContacts(page, limit, shared, ids, listId, query); - Assert.IsTrue(results.CustomFields[1].Success); - Assert.AreEqual(589, results.CustomFields[1].Id); - Assert.AreEqual("Secure ID2", results.CustomFields[1].Name); - Assert.AreEqual("ABCD", results.CustomFields[1].Value); - Assert.IsNotNull(results.CustomFields[1].CreatedAt); + Assert.IsTrue(contacts.Success); + Assert.NotNull(contacts.Contacts); + Assert.AreEqual("John", contacts.Contacts[0].FirstName); + Assert.AreEqual("Doe", contacts.Contacts[0].LastName); + Assert.AreEqual("john@example.com", contacts.Contacts[0].Email); + Assert.AreEqual("999123456", contacts.Contacts[0].Phone); + Assert.AreEqual(null, contacts.Contacts[0].CompanyName); + Assert.AreEqual(ids[0], contacts.Contacts[0].Id); + Assert.AreEqual("GB", contacts.Contacts[0].Country.Id); + Assert.AreEqual("United Kingdom", contacts.Contacts[0].Country.Name); + Assert.AreEqual(1, contacts.Contacts.Count); + Assert.AreEqual(page, contacts.Page); + Assert.AreEqual(limit, contacts.Limit); + Assert.AreEqual(1, contacts.PageCount); + Assert.IsNotNull(contacts.Contacts[0].CustomFields); + Assert.AreEqual(1, contacts.Contacts[0].CustomFields.Count); } [Test] - public void ShouldCreateCustomField() + public void ShouldUnsubscribeContact() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new LinkResult()); var client = mockClient.Object; - client.CreateCustomField(customFieldName); + var contact = new Contact {Phone = contactPhone}; + client.UnsubscribeContact(contact); mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("customfields", savedRequest.Resource); + Assert.AreEqual("unsubscribers", savedRequest.Resource); Assert.AreEqual(Method.POST, savedRequest.Method); Assert.AreEqual(1, savedRequest.Parameters.Count); - Assert.AreEqual(customFieldName, savedRequest.Parameters.Find(x => x.Name == "name").Value); + Assert.AreEqual(contactPhone, savedRequest.Parameters.Find(x => x.Name == "phone").Value); var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/contacts/31337\"}"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var link = client.CreateCustomField(customFieldName); + var link = client.UnsubscribeContact(contact); Assert.IsTrue(link.Success); Assert.AreEqual(31337, link.Id); @@ -551,35 +629,54 @@ public void ShouldCreateCustomField() } [Test] - public void ShouldUpdateCustomField() + public void ShouldUpdateContact() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) + .Returns(new LinkResult()); + mockClient.Setup(trc => trc.SetCustomFieldValue(It.IsAny(), It.IsAny(), It.IsAny())) .Returns(new LinkResult()); var client = mockClient.Object; - var cf = new CustomField() + var contact = new Contact { - Id = customFieldId, - Name = customFieldName + Id = contactId, + Phone = contactPhone, + FirstName = contactFirstName, + LastName = contactLastName, + CompanyName = contactCompanyName, + Country = new Country {Id = countryId, Name = countryName}, + Email = contactEmail }; - client.UpdateCustomField(cf); + + var testCustomField = new CustomField {Id = 1, Name = "Id1", Value = "StringId1"}; + contact.CustomFields = new List(); + contact.CustomFields.Add(testCustomField); + + client.UpdateContact(contact, listIds); mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.SetCustomFieldValue(It.IsAny(), It.IsAny(), It.IsAny()), + Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("customfields/{id}", savedRequest.Resource); + Assert.AreEqual("contacts/{id}", savedRequest.Resource); Assert.AreEqual(Method.PUT, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); - Assert.AreEqual(customFieldId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - Assert.AreEqual(customFieldName, savedRequest.Parameters.Find(x => x.Name == "name").Value); + Assert.AreEqual(7, savedRequest.Parameters.Count); + Assert.AreEqual(contactId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); + Assert.AreEqual(contactPhone, savedRequest.Parameters.Find(x => x.Name == "phone").Value); + Assert.AreEqual(string.Join(",", listIds), savedRequest.Parameters.Find(x => x.Name == "lists").Value); + Assert.AreEqual(contactFirstName, savedRequest.Parameters.Find(x => x.Name == "firstName").Value); + Assert.AreEqual(contactLastName, savedRequest.Parameters.Find(x => x.Name == "lastName").Value); + Assert.AreEqual(contactEmail, savedRequest.Parameters.Find(x => x.Name == "email").Value); + Assert.AreEqual(contactCompanyName, savedRequest.Parameters.Find(x => x.Name == "companyName").Value); var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/contacts/31337\"}"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var link = client.UpdateCustomField(cf); + var link = client.UpdateContact(contact, listIds); Assert.IsTrue(link.Success); Assert.AreEqual(31337, link.Id); @@ -587,95 +684,39 @@ public void ShouldUpdateCustomField() } [Test] - public void ShouldDeleteCustomField() + public void ShouldUpdateCustomField() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new DeleteResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new LinkResult()); var client = mockClient.Object; - var customField = new CustomField() + var cf = new CustomField { - Id = customFieldId + Id = customFieldId, + Name = customFieldName }; + client.UpdateCustomField(cf); - client.DeleteCustomField(customField); - - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); Assert.AreEqual("customfields/{id}", savedRequest.Resource); - Assert.AreEqual(Method.DELETE, savedRequest.Method); - Assert.AreEqual(1, savedRequest.Parameters.Count); + Assert.AreEqual(Method.PUT, savedRequest.Method); + Assert.AreEqual(2, savedRequest.Parameters.Count); Assert.AreEqual(customFieldId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - - var content = "{}"; - - var testClient = Common.CreateClient(content, null, null); - client = new Client(testClient); - - var result = client.DeleteCustomField(customField); - - Assert.IsTrue(result.Success); - } - - [Test] - public void ShouldSearchContacts() - { - var page = 2; - var limit = 3; - var shared = false; - int[] ids = {276}; - int listId = 123; - string query = "my_query"; - - IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new ContactsResult()); - var client = mockClient.Object; - - client.SearchContacts(page, limit, shared, ids, listId, query); - - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); - Assert.IsNotNull(savedRequest); - Assert.AreEqual("contacts/search", savedRequest.Resource); - Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(6, savedRequest.Parameters.Count); - Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); - Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - Assert.AreEqual(Convert.ToInt32(shared).ToString(), savedRequest.Parameters.Find(x => x.Name == "shared").Value); - Assert.AreEqual(ids[0].ToString(), savedRequest.Parameters.Find(x => x.Name == "ids").Value); - Assert.AreEqual(listId.ToString(), savedRequest.Parameters.Find(x => x.Name == "listId").Value); - Assert.AreEqual(query.ToString(), savedRequest.Parameters.Find(x => x.Name == "query").Value); + Assert.AreEqual(customFieldName, savedRequest.Parameters.Find(x => x.Name == "name").Value); - var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" - + "{ \"id\": \"276\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," - + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," - + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }" - + "] }"; + var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/contacts/31337\"}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var contacts = client.SearchContacts(page, limit, shared, ids, listId, query); + var link = client.UpdateCustomField(cf); - Assert.IsTrue(contacts.Success); - Assert.NotNull(contacts.Contacts); - Assert.AreEqual("John", contacts.Contacts[0].FirstName); - Assert.AreEqual("Doe", contacts.Contacts[0].LastName); - Assert.AreEqual("john@example.com", contacts.Contacts[0].Email); - Assert.AreEqual("999123456", contacts.Contacts[0].Phone); - Assert.AreEqual(null, contacts.Contacts[0].CompanyName); - Assert.AreEqual(ids[0], contacts.Contacts[0].Id); - Assert.AreEqual("GB", contacts.Contacts[0].Country.Id); - Assert.AreEqual("United Kingdom", contacts.Contacts[0].Country.Name); - Assert.AreEqual(1, contacts.Contacts.Count); - Assert.AreEqual(page, contacts.Page); - Assert.AreEqual(limit, contacts.Limit); - Assert.AreEqual(1, contacts.PageCount); - Assert.IsNotNull(contacts.Contacts[0].CustomFields); - Assert.AreEqual(1, contacts.Contacts[0].CustomFields.Count); + Assert.IsTrue(link.Success); + Assert.AreEqual(31337, link.Id); + Assert.AreEqual("/api/v2/contacts/31337", link.Href); } [Test] @@ -683,7 +724,7 @@ public void ShouldUpdateSetCustomFieldValue() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new LinkResult()); var client = mockClient.Object; @@ -709,45 +750,5 @@ public void ShouldUpdateSetCustomFieldValue() Assert.AreEqual(31337, link.Id); Assert.AreEqual("/api/v2/contacts/31337", link.Href); } - - [Test] - public void ShouldGetListsWhichContactBelongsTo() - { - var page = 2; - var limit = 3; - - IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new ContactListsResult()); - var client = mockClient.Object; - - client.GetListsWhichContactBelongsTo(contactId, page, limit); - - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); - Assert.IsNotNull(savedRequest); - Assert.AreEqual("contacts/{id}/lists", savedRequest.Resource); - Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(3, savedRequest.Parameters.Count); - Assert.AreEqual(contactId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); - Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - - var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" - + "{ \"id\": \"31337\", \"name\": \"Partners\", \"description\": \"\"," - + "\"membersCount\": 1, \"shared\": false } ] }"; - - var testClient = Common.CreateClient(content, null, null); - client = new Client(testClient); - - var results = client.GetListsWhichContactBelongsTo(contactId, page, limit); - - Assert.IsTrue(results.Success); - Assert.AreEqual(contactId, results.ContactLists[0].Id); - Assert.AreEqual("Partners", results.ContactLists[0].Name); - Assert.AreEqual("", results.ContactLists[0].Description); - Assert.AreEqual(1, results.ContactLists[0].MembersCount); - Assert.AreEqual(false, results.ContactLists[0].Shared); - } } -} +} \ No newline at end of file diff --git a/TextmagicRest.Tests/ListsTests.cs b/TextmagicRest.Tests/ListsTests.cs index 458f27c..cc60fa4 100644 --- a/TextmagicRest.Tests/ListsTests.cs +++ b/TextmagicRest.Tests/ListsTests.cs @@ -1,24 +1,14 @@ -using System; -using TextmagicRest.Model; +using System.Collections.Generic; using Moq; using NUnit.Framework; using RestSharp; -using System.Text; -using RestSharp.Deserializers; +using TextmagicRest.Model; namespace TextmagicRest.Tests { [TestFixture] public class ListsTests { - private Mock mockClient; - - private const int listId = 106847; - private const string listName = "apitestlist"; - private const string listDescription = "apitestlist description"; - private const int listMembersCount = 1; - private const bool listIsShared = false; - [SetUp] public void Setup() { @@ -26,85 +16,54 @@ public void Setup() mockClient.CallBase = true; } - [Test] - public void ShouldGetSingleList() - { - IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new ContactList()); - var client = mockClient.Object; - - client.GetList(listId); - - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); - Assert.IsNotNull(savedRequest); - Assert.AreEqual("lists/{id}", savedRequest.Resource); - Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(1, savedRequest.Parameters.Count); - Assert.AreEqual(listId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - - var content = "{ \"id\": \"106847\", \"name\": \"apitestlist\", \"description\": \"apitestlist description\", \"membersCount\": 1, \"shared\": false }"; - - var testClient = Common.CreateClient(content, null, null); - client = new Client(testClient); - - var list = client.GetList(listId); + private Mock mockClient; - Assert.IsTrue(list.Success); - Assert.AreEqual(listId, list.Id); - Assert.AreEqual(listName, list.Name); - Assert.AreEqual(listDescription, list.Description); - Assert.AreEqual(listMembersCount, list.MembersCount); - Assert.AreEqual(listIsShared, list.Shared); - } + private const int listId = 106847; + private const string listName = "apitestlist"; + private const string listDescription = "apitestlist description"; + private const int listMembersCount = 1; + private const bool listIsShared = false; [Test] - public void ShouldGetAllLists() + public void ShouldAddContactsToList() { - var page = 2; - var limit = 3; + var contactId1 = 12345; + var contactId2 = 23456; + var contactId3 = 34567; IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new ContactListsResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new LinkResult()); var client = mockClient.Object; - client.GetLists(page, limit); + var contact1 = new Contact {Id = contactId1}; + var contact2 = new Contact {Id = contactId2}; + var contact3 = new Contact {Id = contactId3}; + int[] contactIds = {contactId1, contactId2, contactId3}; + var contacts = new List {contact1, contact2, contact3}; + var list = new ContactList {Id = listId}; + client.AddContactsToList(list, contacts); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("lists", savedRequest.Resource); - Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual("lists/{id}/contacts", savedRequest.Resource); + Assert.AreEqual(Method.PUT, savedRequest.Method); Assert.AreEqual(2, savedRequest.Parameters.Count); - Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); - Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); + Assert.AreEqual(listId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); + Assert.AreEqual(string.Join(",", contactIds), + savedRequest.Parameters.Find(x => x.Name == "contacts").Value); - var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" - + "{ \"id\": \"106847\", \"name\": \"apitestlist\", \"description\": \"apitestlist description\", \"membersCount\": 1, \"shared\": false }" - + "{ \"id\": \"106848\", \"name\": \"apitestlist 2\", \"description\": \"apitestlist description 2\", \"membersCount\": 10, \"shared\": true }" - + "{ \"id\": \"106849\", \"name\": \"apitestlist 3\", \"description\": \"apitestlist description 3\", \"membersCount\": 31, \"shared\": true }" - + "] }"; + var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/lists/31337/contacts\"}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var lists = client.GetLists(page, limit); + var link = client.AddContactsToList(list, contacts); - Assert.IsTrue(lists.Success); - Assert.NotNull(lists.ContactLists); - Assert.AreEqual(3, lists.ContactLists.Count); - Assert.AreEqual(page, lists.Page); - Assert.AreEqual(limit, lists.Limit); - Assert.AreEqual(3, lists.PageCount); - Assert.AreEqual(106848, lists.ContactLists[1].Id); - Assert.AreEqual("apitestlist 2", lists.ContactLists[1].Name); - Assert.AreEqual("apitestlist description 2", lists.ContactLists[1].Description); - Assert.AreEqual(10, lists.ContactLists[1].MembersCount); - Assert.IsTrue(lists.ContactLists[1].Shared); - Assert.IsTrue(lists.ContactLists[2].Shared); - Assert.IsFalse(lists.ContactLists[0].Shared); + Assert.IsTrue(link.Success); + Assert.AreEqual(31337, link.Id); + Assert.AreEqual("/api/v2/lists/31337/contacts", link.Href); } [Test] @@ -112,7 +71,7 @@ public void ShouldCreateList() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new LinkResult()); var client = mockClient.Object; @@ -139,43 +98,44 @@ public void ShouldCreateList() } [Test] - public void ShouldUpdateList() + public void ShouldDeleteContactsFromList() { + var contactId1 = 12345; + var contactId2 = 23456; + var contactId3 = 34567; + IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new LinkResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new DeleteResult()); var client = mockClient.Object; - var list = new ContactList() - { - Id = listId, - Name = listName, - Description = listDescription, - MembersCount = listMembersCount, - Shared = listIsShared, - }; - client.UpdateList(list); + var contact1 = new Contact {Id = contactId1}; + var contact2 = new Contact {Id = contactId2}; + var contact3 = new Contact {Id = contactId3}; + int[] contactIds = {contactId1, contactId2, contactId3}; + var contacts = new List {contact1, contact2, contact3}; + var list = new ContactList {Id = listId}; - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + client.DeleteContactsFromList(list, contacts); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("lists/{id}", savedRequest.Resource); - Assert.AreEqual(Method.PUT, savedRequest.Method); - Assert.AreEqual(3, savedRequest.Parameters.Count); + Assert.AreEqual("lists/{id}/contacts", savedRequest.Resource); + Assert.AreEqual(Method.DELETE, savedRequest.Method); + Assert.AreEqual(2, savedRequest.Parameters.Count); Assert.AreEqual(listId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - Assert.AreEqual(listName, savedRequest.Parameters.Find(x => x.Name == "name").Value); - Assert.AreEqual("0", savedRequest.Parameters.Find(x => x.Name == "shared").Value); + Assert.AreEqual(string.Join(",", contactIds), + savedRequest.Parameters.Find(x => x.Name == "contacts").Value); - var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/lists/31337\"}"; + var content = "{}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var link = client.UpdateList(list); + var link = client.DeleteContactsFromList(list, contacts); Assert.IsTrue(link.Success); - Assert.AreEqual(31337, link.Id); - Assert.AreEqual("/api/v2/lists/31337", link.Href); } [Test] @@ -183,11 +143,11 @@ public void ShouldDeleteList() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new DeleteResult()); var client = mockClient.Object; - var list = new ContactList() { Id = listId }; + var list = new ContactList {Id = listId}; client.DeleteList(list); @@ -208,16 +168,64 @@ public void ShouldDeleteList() Assert.IsTrue(link.Success); } + [Test] + public void ShouldGetAllLists() + { + var page = 2; + var limit = 3; + + IRestRequest savedRequest = null; + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new ContactListsResult()); + var client = mockClient.Object; + + client.GetLists(page, limit); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + Assert.IsNotNull(savedRequest); + Assert.AreEqual("lists", savedRequest.Resource); + Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); + Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); + + var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" + + "{ \"id\": \"106847\", \"name\": \"apitestlist\", \"description\": \"apitestlist description\", \"membersCount\": 1, \"shared\": false }" + + "{ \"id\": \"106848\", \"name\": \"apitestlist 2\", \"description\": \"apitestlist description 2\", \"membersCount\": 10, \"shared\": true }" + + "{ \"id\": \"106849\", \"name\": \"apitestlist 3\", \"description\": \"apitestlist description 3\", \"membersCount\": 31, \"shared\": true }" + + "] }"; + + var testClient = Common.CreateClient(content, null, null); + client = new Client(testClient); + + var lists = client.GetLists(page, limit); + + Assert.IsTrue(lists.Success); + Assert.NotNull(lists.ContactLists); + Assert.AreEqual(3, lists.ContactLists.Count); + Assert.AreEqual(page, lists.Page); + Assert.AreEqual(limit, lists.Limit); + Assert.AreEqual(3, lists.PageCount); + Assert.AreEqual(106848, lists.ContactLists[1].Id); + Assert.AreEqual("apitestlist 2", lists.ContactLists[1].Name); + Assert.AreEqual("apitestlist description 2", lists.ContactLists[1].Description); + Assert.AreEqual(10, lists.ContactLists[1].MembersCount); + Assert.IsTrue(lists.ContactLists[1].Shared); + Assert.IsTrue(lists.ContactLists[2].Shared); + Assert.IsFalse(lists.ContactLists[0].Shared); + } + [Test] public void ShouldGetContactsInList() { var page = 2; var limit = 3; - var list = new ContactList() { Id = listId }; + var list = new ContactList {Id = listId}; IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new ContactsResult()); var client = mockClient.Object; @@ -233,14 +241,13 @@ public void ShouldGetContactsInList() Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" - + "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," - + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," - + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }" - - + "{ \"id\": \"31338\", \"first_name\": \"Jack\", \"lastName\": \"Doe\", \"companyName\": null," - + "\"phone\": \"999123457\", \"email\": \"jack@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," - + "\"customFields\": [ ] }" - + "] }"; + + "{ \"id\": \"31337\", \"firstName\": \"John\", \"lastName\": \"Doe\", \"companyName\": null," + + "\"phone\": \"999123456\", \"email\": \"john@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," + + "\"customFields\": [ { \"id\": 73, \"name\": \"Secure ID\", \"value\": \"ABC\", \"createdAt\": \"2007-12-27T13:04:20+0000\" } ] }" + + "{ \"id\": \"31338\", \"first_name\": \"Jack\", \"lastName\": \"Doe\", \"companyName\": null," + + "\"phone\": \"999123457\", \"email\": \"jack@example.com\", \"country\": { \"id\": \"GB\", \"name\": \"United Kingdom\" }," + + "\"customFields\": [ ] }" + + "] }"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); @@ -259,84 +266,37 @@ public void ShouldGetContactsInList() } [Test] - public void ShouldAddContactsToList() + public void ShouldGetSingleList() { - var contactId1 = 12345; - var contactId2 = 23456; - var contactId3 = 34567; - IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new LinkResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new ContactList()); var client = mockClient.Object; - var contact1 = new Contact() { Id = contactId1 }; - var contact2 = new Contact() { Id = contactId2 }; - var contact3 = new Contact() { Id = contactId3 }; - int[] contactIds = { contactId1, contactId2, contactId3 }; - var contacts = new System.Collections.Generic.List { contact1, contact2, contact3 }; - var list = new ContactList() { Id = listId }; - client.AddContactsToList(list, contacts); + client.GetList(listId); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("lists/{id}/contacts", savedRequest.Resource); - Assert.AreEqual(Method.PUT, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual("lists/{id}", savedRequest.Resource); + Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(1, savedRequest.Parameters.Count); Assert.AreEqual(listId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - Assert.AreEqual(string.Join(",", contactIds), savedRequest.Parameters.Find(x => x.Name == "contacts").Value); - - var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/lists/31337/contacts\"}"; - var testClient = Common.CreateClient(content, null, null); - client = new Client(testClient); - - var link = client.AddContactsToList(list, contacts); + var content = + "{ \"id\": \"106847\", \"name\": \"apitestlist\", \"description\": \"apitestlist description\", \"membersCount\": 1, \"shared\": false }"; - Assert.IsTrue(link.Success); - Assert.AreEqual(31337, link.Id); - Assert.AreEqual("/api/v2/lists/31337/contacts", link.Href); - } - - [Test] - public void ShouldDeleteContactsFromList() - { - var contactId1 = 12345; - var contactId2 = 23456; - var contactId3 = 34567; - - IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new DeleteResult()); - var client = mockClient.Object; - - var contact1 = new Contact() { Id = contactId1 }; - var contact2 = new Contact() { Id = contactId2 }; - var contact3 = new Contact() { Id = contactId3 }; - int[] contactIds = { contactId1, contactId2, contactId3 }; - var contacts = new System.Collections.Generic.List { contact1, contact2, contact3 }; - var list = new ContactList() { Id = listId }; - - client.DeleteContactsFromList(list, contacts); - - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); - Assert.IsNotNull(savedRequest); - Assert.AreEqual("lists/{id}/contacts", savedRequest.Resource); - Assert.AreEqual(Method.DELETE, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); - Assert.AreEqual(listId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - Assert.AreEqual(string.Join(",", contactIds), savedRequest.Parameters.Find(x => x.Name == "contacts").Value); - - var content = "{}"; - - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var link = client.DeleteContactsFromList(list, contacts); + var list = client.GetList(listId); - Assert.IsTrue(link.Success); + Assert.IsTrue(list.Success); + Assert.AreEqual(listId, list.Id); + Assert.AreEqual(listName, list.Name); + Assert.AreEqual(listDescription, list.Description); + Assert.AreEqual(listMembersCount, list.MembersCount); + Assert.AreEqual(listIsShared, list.Shared); } [Test] @@ -345,11 +305,11 @@ public void ShouldSearchContactsLists() var page = 2; var limit = 3; int[] ids = {687}; - string query = "my_query"; + var query = "my_query"; IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new ContactListsResult()); var client = mockClient.Object; @@ -366,8 +326,8 @@ public void ShouldSearchContactsLists() Assert.AreEqual(query, savedRequest.Parameters.Find(x => x.Name == "query").Value); var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" - + "{ \"id\": \"687\", \"name\": \"apitestlist\", \"description\": \"apitestlist description\", \"membersCount\": 1, \"shared\": false }" - + "] }"; + + "{ \"id\": \"687\", \"name\": \"apitestlist\", \"description\": \"apitestlist description\", \"membersCount\": 1, \"shared\": false }" + + "] }"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); @@ -385,7 +345,46 @@ public void ShouldSearchContactsLists() Assert.AreEqual("apitestlist description", lists.ContactLists[0].Description); Assert.AreEqual(1, lists.ContactLists[0].MembersCount); Assert.IsFalse(lists.ContactLists[0].Shared); + } + [Test] + public void ShouldUpdateList() + { + IRestRequest savedRequest = null; + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new LinkResult()); + var client = mockClient.Object; + + var list = new ContactList + { + Id = listId, + Name = listName, + Description = listDescription, + MembersCount = listMembersCount, + Shared = listIsShared + }; + client.UpdateList(list); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + Assert.IsNotNull(savedRequest); + Assert.AreEqual("lists/{id}", savedRequest.Resource); + Assert.AreEqual(Method.PUT, savedRequest.Method); + Assert.AreEqual(3, savedRequest.Parameters.Count); + Assert.AreEqual(listId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); + Assert.AreEqual(listName, savedRequest.Parameters.Find(x => x.Name == "name").Value); + Assert.AreEqual("0", savedRequest.Parameters.Find(x => x.Name == "shared").Value); + + var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/lists/31337\"}"; + + var testClient = Common.CreateClient(content, null, null); + client = new Client(testClient); + + var link = client.UpdateList(list); + + Assert.IsTrue(link.Success); + Assert.AreEqual(31337, link.Id); + Assert.AreEqual("/api/v2/lists/31337", link.Href); } } -} +} \ No newline at end of file diff --git a/TextmagicRest.Tests/MessagesTests.cs b/TextmagicRest.Tests/MessagesTests.cs index a798b20..4c77bce 100644 --- a/TextmagicRest.Tests/MessagesTests.cs +++ b/TextmagicRest.Tests/MessagesTests.cs @@ -1,341 +1,362 @@ using System; -using System.Collections.Generic; -using TextmagicRest.Model; using Moq; using NUnit.Framework; using RestSharp; -using System.Text; -using RestSharp.Deserializers; +using TextmagicRest.Model; namespace TextmagicRest.Tests { [TestFixture] public class MessagesTests { + [SetUp] + public void Setup() + { + mockClient = new Mock(Common.Username, Common.Token); + mockClient.CallBase = true; + } + private Mock mockClient; private const int messageId = 49575710; private const string messageReceiver = "999123456"; private const string messageSender = "447624800500"; - private DateTime messageTime = new DateTime(2015, 05, 25, 06, 40, 45, DateTimeKind.Utc); + private readonly DateTime messageTime = new DateTime(2015, 05, 25, 06, 40, 45, DateTimeKind.Utc); private const DeliveryStatus messageStatus = DeliveryStatus.Queued; private const string messageText = "Test C# API message"; private const string messageCharset = "ISO-8859-1"; - private string messageCountryId = "EE"; - private double messagePrice = 0.037; - private int messagePartsCount = 1; + private readonly string messageCountryId = "EE"; + private readonly double messagePrice = 0.037; + private readonly int messagePartsCount = 1; - private string[] messageReceivers = { messageReceiver, "999234567", "999345678" }; + private readonly string[] messageReceivers = {messageReceiver, "999234567", "999345678"}; private const string messageRrule = "FREQ=DAILY;INTERVAL=2;"; private const bool messageCutExtra = true; - private string sessionText = "SCHEDULED API TEST"; - private SendingSource sessionSource = SendingSource.Api; - private float sessionPrice = 0.074f; - private int sessionNumbersCount = 1; + private readonly string sessionText = "SCHEDULED API TEST"; + private readonly SendingSource sessionSource = SendingSource.Api; + private readonly float sessionPrice = 0.074f; + private readonly int sessionNumbersCount = 1; private const int replyId = 5946228; private const string replyReceiver = messageSender; private const string replySender = messageReceiver; - private DateTime replyTime = new DateTime(2015, 05, 25, 06, 45, 45, DateTimeKind.Utc); + private readonly DateTime replyTime = new DateTime(2015, 05, 25, 06, 45, 45, DateTimeKind.Utc); private const string replyText = "Test C# API reply"; private const int scheduleId = 4466; - private DateTime scheduleTime = new DateTime(2015, 05, 08, 13, 18, 38); + private readonly DateTime scheduleTime = new DateTime(2015, 05, 08, 13, 18, 38); private const string sessionReferenceId = "reference-id-test"; private const int sessionId = 34436259; - [SetUp] - public void Setup() - { - mockClient = new Mock(Common.Username, Common.Token); - mockClient.CallBase = true; - } - [Test] - public void ShouldGetSingleMessage() + public void ShouldDeleteMessage() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new Message()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new DeleteResult()); var client = mockClient.Object; - client.GetMessage(messageId); + var message = new Message + { + Id = messageId + }; - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + client.DeleteMessage(message); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); Assert.AreEqual("messages/{id}", savedRequest.Resource); - Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(Method.DELETE, savedRequest.Method); Assert.AreEqual(1, savedRequest.Parameters.Count); + Assert.AreEqual(messageId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); + var content = "{}"; - var content = "{ \"id\": 49575710, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:45+0000\", \"status\": \"q\"," - + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": null, \"lastName\": null, \"country\": \"EE\"," - + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }"; - - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var message = client.GetMessage(messageId); + var result = client.DeleteMessage(message); - Assert.IsTrue(message.Success); - Assert.AreEqual(messageId, message.Id); - Assert.AreEqual(messageStatus, message.Status); - Assert.AreEqual(messageSender, message.Sender); - Assert.AreEqual(messageReceiver, message.Receiver); - Assert.AreEqual(messageTime.ToLocalTime(), message.MessageTime); - Assert.AreEqual(messageCharset, message.Charset); - Assert.AreEqual(messageCountryId, message.CountryId); - Assert.AreEqual(messagePrice, message.Price); - Assert.AreEqual(messagePartsCount, message.PartsCount); - Assert.IsNull(message.FirstName); - Assert.IsNull(message.LastName); + Assert.IsTrue(result.Success); } [Test] - public void ShouldGetAllMessages() + public void ShouldDeleteReply() { - var page = 2; - var limit = 3; - IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new MessagesResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new DeleteResult()); var client = mockClient.Object; - client.GetMessages(page, limit); - - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); - Assert.IsNotNull(savedRequest); - Assert.AreEqual("messages", savedRequest.Resource); - Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); - Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); - Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - - var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" - + "{ \"id\": 49575710, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:45+0000\", \"status\": \"q\"," - + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": null, \"lastName\": null, \"country\": \"EE\"," - + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }" + var reply = new Reply + { + Id = replyId + }; - + "{ \"id\": 49575711, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:46+0000\", \"status\": \"a\"," - + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": \"Albert\", \"lastName\": null, \"country\": \"EE\"," - + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }" + client.DeleteReply(reply); - + "{ \"id\": 49575712, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:49+0000\", \"status\": \"d\"," - + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": null, \"lastName\": null, \"country\": \"EE\"," - + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }" + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + Assert.IsNotNull(savedRequest); + Assert.AreEqual("replies/{id}", savedRequest.Resource); + Assert.AreEqual(Method.DELETE, savedRequest.Method); + Assert.AreEqual(1, savedRequest.Parameters.Count); + Assert.AreEqual(replyId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - + "] }"; + var content = "{}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var messages = client.GetMessages(page, limit); + var result = client.DeleteReply(reply); - Assert.IsTrue(messages.Success); - Assert.NotNull(messages.Messages); - Assert.AreEqual(3, messages.Messages.Count); - Assert.AreEqual(page, messages.Page); - Assert.AreEqual(limit, messages.Limit); - Assert.AreEqual(3, messages.PageCount); - Assert.IsTrue(messages.Messages[1].Success); - Assert.AreEqual(messageId+1, messages.Messages[1].Id); - Assert.AreEqual(DeliveryStatus.Acked, messages.Messages[1].Status); - Assert.AreEqual(messageSender, messages.Messages[1].Sender); - Assert.AreEqual(messageReceiver, messages.Messages[1].Receiver); - Assert.AreEqual(messageCharset, messages.Messages[1].Charset); - Assert.AreEqual(messageCountryId, messages.Messages[1].CountryId); - Assert.AreEqual(messagePrice, messages.Messages[1].Price); - Assert.AreEqual(messagePartsCount, messages.Messages[1].PartsCount); - Assert.AreEqual("Albert", messages.Messages[1].FirstName); - Assert.IsNull(messages.Messages[1].LastName); - - Assert.AreEqual(DeliveryStatus.Delivered, messages.Messages[2].Status); + Assert.IsTrue(result.Success); } [Test] - public void ShouldDeleteMessage() + public void ShouldDeleteSchedule() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new DeleteResult()); var client = mockClient.Object; - var message = new Message() - { - Id = messageId - }; + var schedule = new Schedule {Id = scheduleId}; - client.DeleteMessage(message); + client.DeleteSchedule(schedule); mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("messages/{id}", savedRequest.Resource); + Assert.AreEqual("schedules/{id}", savedRequest.Resource); Assert.AreEqual(Method.DELETE, savedRequest.Method); Assert.AreEqual(1, savedRequest.Parameters.Count); - Assert.AreEqual(messageId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); + Assert.AreEqual(scheduleId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); var content = "{}"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var result = client.DeleteMessage(message); + var result = client.DeleteSchedule(schedule); Assert.IsTrue(result.Success); } [Test] - public void ShouldGetSingleReply() + public void ShouldDeleteSession() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new Reply()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new DeleteResult()); var client = mockClient.Object; - client.GetReply(replyId); + var session = new Session {Id = sessionId}; - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + client.DeleteSession(session); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("replies/{id}", savedRequest.Resource); - Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual("sessions/{id}", savedRequest.Resource); + Assert.AreEqual(Method.DELETE, savedRequest.Method); Assert.AreEqual(1, savedRequest.Parameters.Count); + Assert.AreEqual(sessionId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); - var content = "{ \"id\": 5946228, \"receiver\": \"447624800500\", \"messageTime\": \"2015-05-25T06:45:45+0000\"," - + "\"text\": \"Test C# API reply\", \"sender\": \"999123456\" }"; + var content = "{}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var reply = client.GetReply(messageId); + var result = client.DeleteSession(session); - Assert.IsTrue(reply.Success); - Assert.AreEqual(replyId, reply.Id); - Assert.AreEqual(replySender, reply.Sender); - Assert.AreEqual(replyReceiver, reply.Receiver); - Assert.AreEqual(replyTime.ToLocalTime(), reply.MessageTime); - Assert.AreEqual(replyText, reply.Text); + Assert.IsTrue(result.Success); } [Test] - public void ShouldGetAllReplies() + public void ShouldGetAllBulks() { + IRestRequest savedRequest = null; + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new BulkSessionsResult()); + var client = mockClient.Object; var page = 2; var limit = 3; + client.GetBulkSessions(page, limit); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + Assert.IsNotNull(savedRequest); + Assert.AreEqual("bulks", savedRequest.Resource); + Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(2, savedRequest.Parameters.Count); + + var content = "{\"page\":2,\"limit\":3,\"pageCount\":2,\"resources\":[" + + "{\"id\":271,\"status\":\"c\",\"itemsProcessed\":9937,\"itemsTotal\":9937,\"createdAt\":\"2014-12-14T04:34:46+0000\",\"session\":{\"id\":34419457,\"startTime\":\"2014-12-14T04:34:53+0000\",\"text\":\"test\",\"source\":\"O\",\"referenceId\":\"O_tester_098f6bcd4621d373cade4e832627b4f6_1414151612548d136b600eb4.33276307\",\"price\":393.712,\"numbersCount\":9937},\"text\":\"test\"}," + + "{\"id\":270,\"status\":\"f\",\"itemsProcessed\":9937,\"itemsTotal\":9937,\"createdAt\":\"2014-12-12T07:34:39+0000\",\"session\":{\"id\":34419456,\"startTime\":\"2014-12-12T07:34:46+0000\",\"text\":\"wewerwerwerwerwerwerwr\",\"source\":\"O\",\"referenceId\":\"O_tester_c0ec90d8914c15a564032c2d3bec588d_1843256795548a9a9479e5f7.33123700\",\"price\":393.712,\"numbersCount\":9937},\"text\":\"test me\"}," + + "]}"; + + var testClient = Common.CreateClient(content, null, null); + client = new Client(testClient); + var bulks = client.GetBulkSessions(page, limit); + + Assert.IsTrue(bulks.Success); + Assert.NotNull(bulks.BulkSessions); + Assert.AreEqual(2, bulks.BulkSessions.Count); + Assert.AreEqual(page, bulks.Page); + Assert.AreEqual(limit, bulks.Limit); + Assert.AreEqual(2, bulks.PageCount); + Assert.NotNull(bulks.BulkSessions[0].Session); + Assert.AreEqual(BulkSessionStatus.Completed, bulks.BulkSessions[0].Status); + Assert.AreEqual(BulkSessionStatus.Failed, bulks.BulkSessions[1].Status); + } + + [Test] + public void ShouldGetAllChats() + { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new RepliesResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new ChatsResult()); var client = mockClient.Object; + var page = 2; + var limit = 3; - client.GetReplies(page, limit); + client.GetChats(page, limit); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("replies", savedRequest.Resource); + Assert.AreEqual("chats", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); Assert.AreEqual(2, savedRequest.Parameters.Count); - Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); - Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" - + "{ \"id\": 5946228, \"receiver\": \"447624800500\", \"messageTime\": \"2015-05-25T06:45:45+0000\"," - + "\"text\": \"Test C# API reply\", \"sender\": \"999123456\" }" - - + "{ \"id\": 5946229, \"receiver\": \"447624800500\", \"messageTime\": \"2015-05-25T06:45:46+0000\"," - + "\"text\": \"Test C# API reply 2\", \"sender\": \"999123456\" }" - - + "] }"; + var content = "{\"page\":2,\"limit\":3,\"pageCount\":3,\"resources\":[" + + "{\"id\":44577,\"phone\":\"999123456\",\"contact\":null,\"unread\":\"0\",\"updatedAt\":\"2015-04-08T11:58:49+0000\"}," + + "{\"id\":44433,\"phone\":\"999123457\",\"contact\":null,\"unread\":\"5\",\"updatedAt\":\"2014-08-13T05:36:40+0000\"}," + + "{\"id\":39564,\"phone\":\"999123458\",\"contact\":null,\"unread\":\"0\",\"updatedAt\":\"2014-08-13T05:36:28+0000\"}" + + "]}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); + var chats = client.GetChats(page, limit); - var replies = client.GetReplies(page, limit); - - Assert.IsTrue(replies.Success); - Assert.NotNull(replies.Replies); - Assert.AreEqual(2, replies.Replies.Count); - Assert.AreEqual(page, replies.Page); - Assert.AreEqual(limit, replies.Limit); - Assert.AreEqual(3, replies.PageCount); - Assert.AreEqual(replyText, replies.Replies[0].Text); - Assert.AreEqual(replyText + " 2", replies.Replies[1].Text); + Assert.IsTrue(chats.Success); + Assert.NotNull(chats.Chats); + Assert.AreEqual(3, chats.Chats.Count); + Assert.AreEqual(page, chats.Page); + Assert.AreEqual(limit, chats.Limit); + Assert.AreEqual(3, chats.PageCount); + Assert.AreEqual(5, chats.Chats[1].Unread); } [Test] - public void ShouldDeleteReply() + public void ShouldGetAllMessages() { + var page = 2; + var limit = 3; + IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new DeleteResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new MessagesResult()); var client = mockClient.Object; - var reply = new Reply() - { - Id = replyId - }; - - client.DeleteReply(reply); + client.GetMessages(page, limit); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("replies/{id}", savedRequest.Resource); - Assert.AreEqual(Method.DELETE, savedRequest.Method); - Assert.AreEqual(1, savedRequest.Parameters.Count); - Assert.AreEqual(replyId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); + Assert.AreEqual("messages", savedRequest.Resource); + Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); + Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - var content = "{}"; + var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" + + "{ \"id\": 49575710, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:45+0000\", \"status\": \"q\"," + + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": null, \"lastName\": null, \"country\": \"EE\"," + + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }" + + "{ \"id\": 49575711, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:46+0000\", \"status\": \"a\"," + + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": \"Albert\", \"lastName\": null, \"country\": \"EE\"," + + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }" + + "{ \"id\": 49575712, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:49+0000\", \"status\": \"d\"," + + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": null, \"lastName\": null, \"country\": \"EE\"," + + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }" + + "] }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var result = client.DeleteReply(reply); + var messages = client.GetMessages(page, limit); - Assert.IsTrue(result.Success); + Assert.IsTrue(messages.Success); + Assert.NotNull(messages.Messages); + Assert.AreEqual(3, messages.Messages.Count); + Assert.AreEqual(page, messages.Page); + Assert.AreEqual(limit, messages.Limit); + Assert.AreEqual(3, messages.PageCount); + Assert.IsTrue(messages.Messages[1].Success); + Assert.AreEqual(messageId + 1, messages.Messages[1].Id); + Assert.AreEqual(DeliveryStatus.Acked, messages.Messages[1].Status); + Assert.AreEqual(messageSender, messages.Messages[1].Sender); + Assert.AreEqual(messageReceiver, messages.Messages[1].Receiver); + Assert.AreEqual(messageCharset, messages.Messages[1].Charset); + Assert.AreEqual(messageCountryId, messages.Messages[1].CountryId); + Assert.AreEqual(messagePrice, messages.Messages[1].Price); + Assert.AreEqual(messagePartsCount, messages.Messages[1].PartsCount); + Assert.AreEqual("Albert", messages.Messages[1].FirstName); + Assert.IsNull(messages.Messages[1].LastName); + + Assert.AreEqual(DeliveryStatus.Delivered, messages.Messages[2].Status); } [Test] - public void ShouldGetSingleSchedule() + public void ShouldGetAllReplies() { + var page = 2; + var limit = 3; + IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new Schedule()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new RepliesResult()); var client = mockClient.Object; - client.GetSchedule(scheduleId); + client.GetReplies(page, limit); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("schedules/{id}", savedRequest.Resource); + Assert.AreEqual("replies", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(1, savedRequest.Parameters.Count); + Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(page.ToString(), savedRequest.Parameters.Find(x => x.Name == "page").Value); + Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); - var content = "{\"id\":4466,\"nextSend\":\"2015-05-08T13:18:38+0000\",\"rrule\":null" - + "\"session\":{\"id\":34436259,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," - + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}}"; + var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" + + "{ \"id\": 5946228, \"receiver\": \"447624800500\", \"messageTime\": \"2015-05-25T06:45:45+0000\"," + + "\"text\": \"Test C# API reply\", \"sender\": \"999123456\" }" + + "{ \"id\": 5946229, \"receiver\": \"447624800500\", \"messageTime\": \"2015-05-25T06:45:46+0000\"," + + "\"text\": \"Test C# API reply 2\", \"sender\": \"999123456\" }" + + "] }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var schedule = client.GetSchedule(messageId); + var replies = client.GetReplies(page, limit); - Assert.IsTrue(schedule.Success); - Assert.AreEqual(scheduleId, schedule.Id); - Assert.AreEqual(scheduleTime.ToLocalTime(), schedule.NextSend); - Assert.IsNull(schedule.Rrule); - Assert.IsNotNull(schedule.Session); - Assert.AreEqual(sessionReferenceId, schedule.Session.ReferenceId); + Assert.IsTrue(replies.Success); + Assert.NotNull(replies.Replies); + Assert.AreEqual(2, replies.Replies.Count); + Assert.AreEqual(page, replies.Page); + Assert.AreEqual(limit, replies.Limit); + Assert.AreEqual(3, replies.PageCount); + Assert.AreEqual(replyText, replies.Replies[0].Text); + Assert.AreEqual(replyText + " 2", replies.Replies[1].Text); } - + [Test] public void ShouldGetAllSchedules() { @@ -344,7 +365,7 @@ public void ShouldGetAllSchedules() IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new SchedulesResult()); var client = mockClient.Object; @@ -359,15 +380,13 @@ public void ShouldGetAllSchedules() Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" - + "{\"id\":4466,\"nextSend\":\"2015-05-08T13:18:38+0000\",\"rrule\":null" - + "\"session\":{\"id\":34436259,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," - + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}}" - - + "{\"id\":4466,\"nextSend\":null,\"rrule\":null" - + "\"session\":{\"id\":34436262,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," - + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}}" - - + "] }"; + + "{\"id\":4466,\"nextSend\":\"2015-05-08T13:18:38+0000\",\"rrule\":null" + + "\"session\":{\"id\":34436259,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," + + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}}" + + "{\"id\":4466,\"nextSend\":null,\"rrule\":null" + + "\"session\":{\"id\":34436262,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," + + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}}" + + "] }"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); @@ -384,98 +403,120 @@ public void ShouldGetAllSchedules() } [Test] - public void ShouldDeleteSchedule() + public void ShouldGetAllSessions() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new DeleteResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new SessionsResult()); var client = mockClient.Object; + var page = 2; + var limit = 3; - var schedule = new Schedule() { Id = scheduleId }; - - client.DeleteSchedule(schedule); + client.GetSessions(page, limit); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("schedules/{id}", savedRequest.Resource); - Assert.AreEqual(Method.DELETE, savedRequest.Method); - Assert.AreEqual(1, savedRequest.Parameters.Count); - Assert.AreEqual(scheduleId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); + Assert.AreEqual("sessions", savedRequest.Resource); + Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(2, savedRequest.Parameters.Count); - var content = "{}"; + var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" + + "{\"id\":34436259,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," + + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}" + + "{\"id\":34436258,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," + + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}" + + "{\"id\":34436257,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," + + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}" + + "] }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var result = client.DeleteSchedule(schedule); + var sessions = client.GetSessions(page, limit); - Assert.IsTrue(result.Success); + Assert.IsTrue(sessions.Success); + Assert.NotNull(sessions.Sessions); + Assert.AreEqual(3, sessions.Sessions.Count); + Assert.AreEqual(page, sessions.Page); + Assert.AreEqual(limit, sessions.Limit); + Assert.AreEqual(3, sessions.PageCount); + Assert.AreEqual(sessionId, sessions.Sessions[0].Id); } [Test] - public void ShouldGetSingleSession() + public void ShouldGetBulkMessageSessionStatus() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new Session()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new BulkSession()); var client = mockClient.Object; - client.GetSession(sessionId); + var id = 4577; + client.GetBulkSessionStatus(id); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("sessions/{id}", savedRequest.Resource); + Assert.AreEqual("bulks/{id}", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); Assert.AreEqual(1, savedRequest.Parameters.Count); - var content = "{\"id\":34436259,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," - + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}"; + var content = + "{\"id\":4577,\"status\":\"c\",\"itemsProcessed\":9937,\"itemsTotal\":9937,\"createdAt\":\"2014-12-14T04:34:46+0000\",\"session\":{\"id\":34419457,\"startTime\":\"2014-12-14T04:34:53+0000\",\"text\":\"test\",\"source\":\"O\",\"referenceId\":\"O_tester_098f6bcd4621d373cade4e832627b4f6_1414151612548d136b600eb4.33276307\",\"price\":393.712,\"numbersCount\":9937},\"text\":\"test\"}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); + var bulkStatus = client.GetBulkSessionStatus(id); - var session = client.GetSession(sessionId); - - Assert.IsTrue(session.Success); - Assert.AreEqual(sessionId, session.Id); - Assert.AreEqual(scheduleTime.ToLocalTime(), session.StartTime); - Assert.AreEqual(sessionReferenceId, session.ReferenceId); - Assert.AreEqual(sessionText, session.Text); - Assert.AreEqual(sessionSource, session.Source); - Assert.AreEqual(sessionPrice, session.Price); - Assert.AreEqual(sessionNumbersCount, session.NumbersCount); + Assert.AreEqual(id, bulkStatus.Id); + Assert.AreEqual(BulkSessionStatus.Completed, bulkStatus.Status); + Assert.AreEqual(9937, bulkStatus.ItemsProcessed); + Assert.AreEqual(9937, bulkStatus.ItemsTotal); } [Test] - public void ShouldDeleteSession() + public void ShouldGetPrice() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new DeleteResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new Pricing()); var client = mockClient.Object; - var session = new Session() { Id = sessionId }; + int[] contactIds = {321}; + int[] listIds = {5436}; + string[] phones = {"55443322"}; - client.DeleteSession(session); + var sendingOptions = new SendingOptions(); + sendingOptions.ContactIds = contactIds; + sendingOptions.ListIds = listIds; + sendingOptions.Phones = phones; + sendingOptions.TemplateId = null; + sendingOptions.Text = "Hello My Message"; - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + client.GetPrice(sendingOptions); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("sessions/{id}", savedRequest.Resource); - Assert.AreEqual(Method.DELETE, savedRequest.Method); - Assert.AreEqual(1, savedRequest.Parameters.Count); - Assert.AreEqual(sessionId.ToString(), savedRequest.Parameters.Find(x => x.Name == "id").Value); + Assert.AreEqual("messages/price", savedRequest.Resource); + Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(5, savedRequest.Parameters.Count); - var content = "{}"; + var content = "{ \"total\": 0.056, \"parts\": 1, \"countries\": { \"CH\": {" + + "\"country\": \"CH\", \"count\": \"1\", \"max\": 0.056 } } }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var result = client.DeleteSession(session); + var messagePricing = client.GetPrice(sendingOptions); - Assert.IsTrue(result.Success); + Assert.IsTrue(messagePricing.Success); + Assert.AreEqual("CH", messagePricing.Countries["CH"].Country); + Assert.AreEqual(1, messagePricing.Countries["CH"].Count); + Assert.AreEqual(0.056f, messagePricing.Countries["CH"].Price); + Assert.AreEqual(1, messagePricing.Parts); + Assert.AreEqual(0.056f, messagePricing.Total); } [Test] @@ -486,7 +527,7 @@ public void ShouldGetSessionMessages() IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new MessagesResult()); var client = mockClient.Object; @@ -502,11 +543,10 @@ public void ShouldGetSessionMessages() Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" - + "{ \"id\": 782, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:45+0000\", \"status\": \"q\"," - + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": \"Joe\", \"lastName\": null, \"country\": \"EE\"," - + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }" - - + "] }"; + + "{ \"id\": 782, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:45+0000\", \"status\": \"q\"," + + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": \"Joe\", \"lastName\": null, \"country\": \"EE\"," + + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }" + + "] }"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); @@ -524,165 +564,189 @@ public void ShouldGetSessionMessages() } [Test] - public void ShouldGetAllSessions() + public void ShouldGetSingleChat() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new SessionsResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new ChatMessagesResult()); var client = mockClient.Object; - int page = 2; - int limit = 3; + var phone = "999123456"; + var page = 2; + var limit = 3; - client.GetSessions(page, limit); + client.GetChat(phone, page, limit); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("sessions", savedRequest.Resource); + Assert.AreEqual("chats/{phone}", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(3, savedRequest.Parameters.Count); - var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 3, \"resources\": [" - + "{\"id\":34436259,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," - + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}" + var content = "{\"page\":2,\"limit\":3,\"pageCount\":3,\"resources\":[" + + "{\"id\":49360873,\"sender\":\"9990001234\",\"messageTime\":\"2014-08-13T05:05:51+0000\",\"text\":\"Hello. TextMagic test.\n\nPlease reply.\",\"receiver\":\"999123456\",\"status\":\"f\",\"firstName\":null,\"lastName\":null,\"direction\":\"o\"}," + + "{\"id\":49430972,\"sender\":\"999123456\",\"messageTime\":\"2014-09-19T05:34:22+0000\",\"text\":\"testing\",\"receiver\":\"9990001234\",\"status\":\"d\",\"firstName\":null,\"lastName\":null,\"direction\":\"i\"}" + + "]}"; - + "{\"id\":34436258,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," - + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}" + var testClient = Common.CreateClient(content, null, null); + client = new Client(testClient); + var chat = client.GetChat(phone, page, limit); - + "{\"id\":34436257,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," - + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}" + Assert.IsTrue(chat.Success); + Assert.AreEqual(2, chat.Messages.Count); + Assert.AreEqual("testing", chat.Messages[1].Text); + Assert.AreEqual(phone, chat.Messages[1].Sender); + Assert.AreEqual(ChatMessageDirection.Outgoing, chat.Messages[0].Direction); + Assert.AreEqual(ChatMessageDirection.Incoming, chat.Messages[1].Direction); + Assert.AreEqual(page, chat.Page); + Assert.AreEqual(limit, chat.Limit); + Assert.AreEqual(3, chat.PageCount); + } - + "] }"; + [Test] + public void ShouldGetSingleMessage() + { + IRestRequest savedRequest = null; + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new Message()); + var client = mockClient.Object; - var testClient = Common.CreateClient(content, null, null); + client.GetMessage(messageId); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + Assert.IsNotNull(savedRequest); + Assert.AreEqual("messages/{id}", savedRequest.Resource); + Assert.AreEqual(Method.GET, savedRequest.Method); + Assert.AreEqual(1, savedRequest.Parameters.Count); + + + var content = + "{ \"id\": 49575710, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:45+0000\", \"status\": \"q\"," + + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": null, \"lastName\": null, \"country\": \"EE\"," + + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }"; + + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var sessions = client.GetSessions(page, limit); + var message = client.GetMessage(messageId); - Assert.IsTrue(sessions.Success); - Assert.NotNull(sessions.Sessions); - Assert.AreEqual(3, sessions.Sessions.Count); - Assert.AreEqual(page, sessions.Page); - Assert.AreEqual(limit, sessions.Limit); - Assert.AreEqual(3, sessions.PageCount); - Assert.AreEqual(sessionId, sessions.Sessions[0].Id); + Assert.IsTrue(message.Success); + Assert.AreEqual(messageId, message.Id); + Assert.AreEqual(messageStatus, message.Status); + Assert.AreEqual(messageSender, message.Sender); + Assert.AreEqual(messageReceiver, message.Receiver); + Assert.AreEqual(messageTime, message.MessageTime); + Assert.AreEqual(messageCharset, message.Charset); + Assert.AreEqual(messageCountryId, message.CountryId); + Assert.AreEqual(messagePrice, message.Price); + Assert.AreEqual(messagePartsCount, message.PartsCount); + Assert.IsNull(message.FirstName); + Assert.IsNull(message.LastName); } [Test] - public void ShouldGetAllChats() + public void ShouldGetSingleReply() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new ChatsResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new Reply()); var client = mockClient.Object; - int page = 2; - int limit = 3; - client.GetChats(page, limit); + client.GetReply(replyId); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("chats", savedRequest.Resource); + Assert.AreEqual("replies/{id}", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(1, savedRequest.Parameters.Count); - var content = "{\"page\":2,\"limit\":3,\"pageCount\":3,\"resources\":[" - + "{\"id\":44577,\"phone\":\"999123456\",\"contact\":null,\"unread\":\"0\",\"updatedAt\":\"2015-04-08T11:58:49+0000\"}," - + "{\"id\":44433,\"phone\":\"999123457\",\"contact\":null,\"unread\":\"5\",\"updatedAt\":\"2014-08-13T05:36:40+0000\"}," - + "{\"id\":39564,\"phone\":\"999123458\",\"contact\":null,\"unread\":\"0\",\"updatedAt\":\"2014-08-13T05:36:28+0000\"}" - + "]}"; + var content = + "{ \"id\": 5946228, \"receiver\": \"447624800500\", \"messageTime\": \"2015-05-25T06:45:45+0000\"," + + "\"text\": \"Test C# API reply\", \"sender\": \"999123456\" }"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var chats = client.GetChats(page, limit); - Assert.IsTrue(chats.Success); - Assert.NotNull(chats.Chats); - Assert.AreEqual(3, chats.Chats.Count); - Assert.AreEqual(page, chats.Page); - Assert.AreEqual(limit, chats.Limit); - Assert.AreEqual(3, chats.PageCount); - Assert.AreEqual(5, chats.Chats[1].Unread); + var reply = client.GetReply(messageId); + + Assert.IsTrue(reply.Success); + Assert.AreEqual(replyId, reply.Id); + Assert.AreEqual(replySender, reply.Sender); + Assert.AreEqual(replyReceiver, reply.Receiver); + Assert.AreEqual(replyTime, reply.MessageTime); + Assert.AreEqual(replyText, reply.Text); } [Test] - public void ShouldGetSingleChat() + public void ShouldGetSingleSchedule() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new ChatMessagesResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new Schedule()); var client = mockClient.Object; - string phone = "999123456"; - int page = 2; - int limit = 3; - client.GetChat(phone, page, limit); + client.GetSchedule(scheduleId); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("chats/{phone}", savedRequest.Resource); + Assert.AreEqual("schedules/{id}", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(3, savedRequest.Parameters.Count); + Assert.AreEqual(1, savedRequest.Parameters.Count); - var content = "{\"page\":2,\"limit\":3,\"pageCount\":3,\"resources\":[" - + "{\"id\":49360873,\"sender\":\"9990001234\",\"messageTime\":\"2014-08-13T05:05:51+0000\",\"text\":\"Hello. TextMagic test.\n\nPlease reply.\",\"receiver\":\"999123456\",\"status\":\"f\",\"firstName\":null,\"lastName\":null,\"direction\":\"o\"}," - + "{\"id\":49430972,\"sender\":\"999123456\",\"messageTime\":\"2014-09-19T05:34:22+0000\",\"text\":\"testing\",\"receiver\":\"9990001234\",\"status\":\"d\",\"firstName\":null,\"lastName\":null,\"direction\":\"i\"}" - + "]}"; + var content = "{\"id\":4466,\"nextSend\":\"2015-05-08T13:18:38+0000\",\"rrule\":null" + + "\"session\":{\"id\":34436259,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," + + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var chat = client.GetChat(phone, page, limit); - Assert.IsTrue(chat.Success); - Assert.AreEqual(2, chat.Messages.Count); - Assert.AreEqual("testing", chat.Messages[1].Text); - Assert.AreEqual(phone, chat.Messages[1].Sender); - Assert.AreEqual(ChatMessageDirection.Outgoing, chat.Messages[0].Direction); - Assert.AreEqual(ChatMessageDirection.Incoming, chat.Messages[1].Direction); - Assert.AreEqual(page, chat.Page); - Assert.AreEqual(limit, chat.Limit); - Assert.AreEqual(3, chat.PageCount); + var schedule = client.GetSchedule(messageId); + + Assert.IsTrue(schedule.Success); + Assert.AreEqual(scheduleId, schedule.Id); + Assert.AreEqual(scheduleTime, schedule.NextSend); + Assert.IsNull(schedule.Rrule); + Assert.IsNotNull(schedule.Session); + Assert.AreEqual(sessionReferenceId, schedule.Session.ReferenceId); } [Test] - public void ShouldGetAllBulks() + public void ShouldGetSingleSession() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new BulkSessionsResult()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new Session()); var client = mockClient.Object; - int page = 2; - int limit = 3; - client.GetBulkSessions(page, limit); + client.GetSession(sessionId); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("bulks", savedRequest.Resource); + Assert.AreEqual("sessions/{id}", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(1, savedRequest.Parameters.Count); - var content = "{\"page\":2,\"limit\":3,\"pageCount\":2,\"resources\":[" - + "{\"id\":271,\"status\":\"c\",\"itemsProcessed\":9937,\"itemsTotal\":9937,\"createdAt\":\"2014-12-14T04:34:46+0000\",\"session\":{\"id\":34419457,\"startTime\":\"2014-12-14T04:34:53+0000\",\"text\":\"test\",\"source\":\"O\",\"referenceId\":\"O_tester_098f6bcd4621d373cade4e832627b4f6_1414151612548d136b600eb4.33276307\",\"price\":393.712,\"numbersCount\":9937},\"text\":\"test\"}," - + "{\"id\":270,\"status\":\"f\",\"itemsProcessed\":9937,\"itemsTotal\":9937,\"createdAt\":\"2014-12-12T07:34:39+0000\",\"session\":{\"id\":34419456,\"startTime\":\"2014-12-12T07:34:46+0000\",\"text\":\"wewerwerwerwerwerwerwr\",\"source\":\"O\",\"referenceId\":\"O_tester_c0ec90d8914c15a564032c2d3bec588d_1843256795548a9a9479e5f7.33123700\",\"price\":393.712,\"numbersCount\":9937},\"text\":\"test me\"}," - + "]}"; + var content = + "{\"id\":34436259,\"startTime\":\"2015-05-08T13:18:38+0000\",\"text\":\"SCHEDULED API TEST\",\"source\":\"A\"," + + "\"referenceId\":\"reference-id-test\",\"price\":0.074,\"numbersCount\":1}"; - var testClient = Common.CreateClient(content, null, null); + var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); - var bulks = client.GetBulkSessions(page, limit); - Assert.IsTrue(bulks.Success); - Assert.NotNull(bulks.BulkSessions); - Assert.AreEqual(2, bulks.BulkSessions.Count); - Assert.AreEqual(page, bulks.Page); - Assert.AreEqual(limit, bulks.Limit); - Assert.AreEqual(2, bulks.PageCount); - Assert.NotNull(bulks.BulkSessions[0].Session); - Assert.AreEqual(BulkSessionStatus.Completed, bulks.BulkSessions[0].Status); - Assert.AreEqual(BulkSessionStatus.Failed, bulks.BulkSessions[1].Status); + var session = client.GetSession(sessionId); + + Assert.IsTrue(session.Success); + Assert.AreEqual(sessionId, session.Id); + Assert.AreEqual(scheduleTime, session.StartTime); + Assert.AreEqual(sessionReferenceId, session.ReferenceId); + Assert.AreEqual(sessionText, session.Text); + Assert.AreEqual(sessionSource, session.Source); + Assert.AreEqual(sessionPrice, session.Price); + Assert.AreEqual(sessionNumbersCount, session.NumbersCount); } [Test] @@ -690,13 +754,13 @@ public void ShouldSearchMessages() { var page = 2; var limit = 3; - int[] ids = { 782 }; - int sessionId = 1; - string query = "my_query"; + int[] ids = {782}; + var sessionId = 1; + var query = "my_query"; IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new MessagesResult()); var client = mockClient.Object; @@ -711,11 +775,10 @@ public void ShouldSearchMessages() Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" - + "{ \"id\": 782, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:45+0000\", \"status\": \"q\"," - + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": \"Joe\", \"lastName\": null, \"country\": \"EE\"," - + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }" - - + "] }"; + + "{ \"id\": 782, \"receiver\": \"999123456\", \"messageTime\": \"2015-05-25T06:40:45+0000\", \"status\": \"q\"," + + "\"text\": \"Test C# API message\", \"charset\": \"ISO-8859-1\", \"firstName\": \"Joe\", \"lastName\": null, \"country\": \"EE\"," + + "\"sender\": \"447624800500\", \"price\": 0.037, \"partsCount\": 1 }" + + "] }"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); @@ -732,47 +795,17 @@ public void ShouldSearchMessages() Assert.AreEqual(DeliveryStatus.Queued, messages.Messages[0].Status); } - [Test] - public void ShouldGetBulkMessageSessionStatus() - { - IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new BulkSession()); - var client = mockClient.Object; - - int id = 4577; - client.GetBulkSessionStatus(id); - - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); - Assert.IsNotNull(savedRequest); - Assert.AreEqual("bulks/{id}", savedRequest.Resource); - Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(1, savedRequest.Parameters.Count); - - var content = "{\"id\":4577,\"status\":\"c\",\"itemsProcessed\":9937,\"itemsTotal\":9937,\"createdAt\":\"2014-12-14T04:34:46+0000\",\"session\":{\"id\":34419457,\"startTime\":\"2014-12-14T04:34:53+0000\",\"text\":\"test\",\"source\":\"O\",\"referenceId\":\"O_tester_098f6bcd4621d373cade4e832627b4f6_1414151612548d136b600eb4.33276307\",\"price\":393.712,\"numbersCount\":9937},\"text\":\"test\"}"; - - var testClient = Common.CreateClient(content, null, null); - client = new Client(testClient); - var bulkStatus = client.GetBulkSessionStatus(id); - - Assert.AreEqual(id, bulkStatus.Id); - Assert.AreEqual(BulkSessionStatus.Completed, bulkStatus.Status); - Assert.AreEqual(9937, bulkStatus.ItemsProcessed); - Assert.AreEqual(9937, bulkStatus.ItemsTotal); - } - [Test] public void ShouldSearchReplies() { var page = 2; var limit = 3; - int[] ids = { 5946228 }; - string query = "my_query"; + int[] ids = {5946228}; + var query = "my_query"; IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new RepliesResult()); var client = mockClient.Object; @@ -787,10 +820,9 @@ public void ShouldSearchReplies() Assert.AreEqual(limit.ToString(), savedRequest.Parameters.Find(x => x.Name == "limit").Value); var content = "{ \"page\": 2, \"limit\": 3, \"pageCount\": 1, \"resources\": [" - + "{ \"id\": 5946228, \"receiver\": \"447624800500\", \"messageTime\": \"2015-05-25T06:45:45+0000\"," - + "\"text\": \"Test C# API reply\", \"sender\": \"999123456\" }" - - + "] }"; + + "{ \"id\": 5946228, \"receiver\": \"447624800500\", \"messageTime\": \"2015-05-25T06:45:45+0000\"," + + "\"text\": \"Test C# API reply\", \"sender\": \"999123456\" }" + + "] }"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); @@ -807,47 +839,51 @@ public void ShouldSearchReplies() } [Test] - public void ShouldGetPrice() + public void ShouldSendAllSetParameters() { + int[] contactIds = {385, 15}; + int[] listIds = {424, 454, 223}; + IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new Pricing()); + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new SendingResult()); var client = mockClient.Object; - int[] contactIds = { 321 }; - int[] listIds = { 5436 }; - string[] phones = { "55443322" }; - - SendingOptions sendingOptions = new SendingOptions(); - sendingOptions.ContactIds = contactIds; - sendingOptions.ListIds = listIds; - sendingOptions.Phones = phones; - sendingOptions.TemplateId = null; - sendingOptions.Text = "Hello My Message"; - - client.GetPrice(sendingOptions); + var options = new SendingOptions + { + Phones = messageReceivers, + Text = messageText, + SendingTime = messageTime, + ContactIds = contactIds, + ListIds = listIds, + From = messageSender, + CutExtra = messageCutExtra, + PartsCount = messagePartsCount, + ReferenceId = sessionReferenceId, + Rrule = messageRrule + }; + var link = client.SendMessage(options); - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); - Assert.AreEqual("messages/price", savedRequest.Resource); - Assert.AreEqual(Method.GET, savedRequest.Method); - Assert.AreEqual(5, savedRequest.Parameters.Count); - - var content = "{ \"total\": 0.056, \"parts\": 1, \"countries\": { \"CH\": {" - + "\"country\": \"CH\", \"count\": \"1\", \"max\": 0.056 } } }"; - - var testClient = Common.CreateClient(content, null, null); - client = new Client(testClient); - - var messagePricing = client.GetPrice(sendingOptions); - - Assert.IsTrue(messagePricing.Success); - Assert.AreEqual("CH", messagePricing.Countries["CH"].Country); - Assert.AreEqual(1, messagePricing.Countries["CH"].Count); - Assert.AreEqual(0.056f, messagePricing.Countries["CH"].Price); - Assert.AreEqual(1, messagePricing.Parts); - Assert.AreEqual(0.056f, messagePricing.Total); + Assert.AreEqual("messages", savedRequest.Resource); + Assert.AreEqual(Method.POST, savedRequest.Method); + Assert.AreEqual(10, savedRequest.Parameters.Count); + Assert.AreEqual(messageText, savedRequest.Parameters.Find(x => x.Name == "text").Value); + Assert.AreEqual(string.Join(",", messageReceivers), + savedRequest.Parameters.Find(x => x.Name == "phones").Value); + Assert.AreEqual(string.Join(",", contactIds), + savedRequest.Parameters.Find(x => x.Name == "contacts").Value); + Assert.AreEqual(string.Join(",", listIds), savedRequest.Parameters.Find(x => x.Name == "lists").Value); + Assert.AreEqual(Client.DateTimeToTimestamp(messageTime).ToString(), + savedRequest.Parameters.Find(x => x.Name == "sendingTime").Value); + Assert.AreEqual(messageSender, savedRequest.Parameters.Find(x => x.Name == "from").Value); + Assert.AreEqual(messageCutExtra ? "1" : "0", savedRequest.Parameters.Find(x => x.Name == "cutExtra").Value); + Assert.AreEqual(messagePartsCount.ToString(), + savedRequest.Parameters.Find(x => x.Name == "partsCount").Value); + Assert.AreEqual(sessionReferenceId, savedRequest.Parameters.Find(x => x.Name == "referenceId").Value); + Assert.AreEqual(messageRrule, savedRequest.Parameters.Find(x => x.Name == "rrule").Value); } [Test] @@ -855,15 +891,15 @@ public void ShouldSendMessage() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new SendingResult()); var client = mockClient.Object; - int[] contactIds = { 321 }; - int[] listIds = { 5436 }; - string[] phones = { "55443322" }; + int[] contactIds = {321}; + int[] listIds = {5436}; + string[] phones = {"55443322"}; - SendingOptions sendingOptions = new SendingOptions(); + var sendingOptions = new SendingOptions(); sendingOptions.ContactIds = contactIds; sendingOptions.ListIds = listIds; sendingOptions.Phones = phones; @@ -879,7 +915,7 @@ public void ShouldSendMessage() Assert.AreEqual(4, savedRequest.Parameters.Count); var content = "{ \"type\": \"session\", \"sessionId\": 1, \"bulkId\": 2," - + "\"messageId\": 3, \"scheduleId\": 4 }"; + + "\"messageId\": 3, \"scheduleId\": 4 }"; var testClient = Common.CreateClient(content, null, null); client = new Client(testClient); @@ -895,35 +931,20 @@ public void ShouldSendMessage() } [Test] - public void ShouldSendSimpleMessageToOnePhone() - { - IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) - .Returns(new SendingResult()); - var client = mockClient.Object; - - var link = client.SendMessage(messageText, messageReceiver); - - mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); - Assert.IsNotNull(savedRequest); - Assert.AreEqual("messages", savedRequest.Resource); - Assert.AreEqual(Method.POST, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); - Assert.AreEqual(messageText, savedRequest.Parameters.Find(x => x.Name == "text").Value); - Assert.AreEqual(messageReceiver, savedRequest.Parameters.Find(x => x.Name == "phones").Value); - } - - [Test] - public void ShouldSendSimpleMessageToArrayOfPhones() + public void ShouldSendMessageToArrayOfPhonesInComplexOptions() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new SendingResult()); var client = mockClient.Object; - var link = client.SendMessage(messageText, messageReceivers); + var options = new SendingOptions + { + Phones = messageReceivers, + Text = messageText + }; + var link = client.SendMessage(options); mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); @@ -931,22 +952,24 @@ public void ShouldSendSimpleMessageToArrayOfPhones() Assert.AreEqual(Method.POST, savedRequest.Method); Assert.AreEqual(2, savedRequest.Parameters.Count); Assert.AreEqual(messageText, savedRequest.Parameters.Find(x => x.Name == "text").Value); - Assert.AreEqual(string.Join(",", messageReceivers), savedRequest.Parameters.Find(x => x.Name == "phones").Value); + Assert.AreEqual(string.Join(",", messageReceivers), + savedRequest.Parameters.Find(x => x.Name == "phones").Value); } [Test] - public void ShouldSendMessageToArrayOfPhonesInComplexOptions() + public void ShouldSendScheduledMessage() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new SendingResult()); var client = mockClient.Object; var options = new SendingOptions { Phones = messageReceivers, - Text = messageText + Text = messageText, + SendingTime = messageTime }; var link = client.SendMessage(options); @@ -954,80 +977,53 @@ public void ShouldSendMessageToArrayOfPhonesInComplexOptions() Assert.IsNotNull(savedRequest); Assert.AreEqual("messages", savedRequest.Resource); Assert.AreEqual(Method.POST, savedRequest.Method); - Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(3, savedRequest.Parameters.Count); Assert.AreEqual(messageText, savedRequest.Parameters.Find(x => x.Name == "text").Value); - Assert.AreEqual(string.Join(",", messageReceivers), savedRequest.Parameters.Find(x => x.Name == "phones").Value); + Assert.AreEqual(string.Join(",", messageReceivers), + savedRequest.Parameters.Find(x => x.Name == "phones").Value); + Assert.AreEqual(Client.DateTimeToTimestamp(messageTime).ToString(), + savedRequest.Parameters.Find(x => x.Name == "sendingTime").Value); } [Test] - public void ShouldSendScheduledMessage() + public void ShouldSendSimpleMessageToArrayOfPhones() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new SendingResult()); var client = mockClient.Object; - var options = new SendingOptions - { - Phones = messageReceivers, - Text = messageText, - SendingTime = messageTime - }; - var link = client.SendMessage(options); + var link = client.SendMessage(messageText, messageReceivers); mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); Assert.AreEqual("messages", savedRequest.Resource); Assert.AreEqual(Method.POST, savedRequest.Method); - Assert.AreEqual(3, savedRequest.Parameters.Count); + Assert.AreEqual(2, savedRequest.Parameters.Count); Assert.AreEqual(messageText, savedRequest.Parameters.Find(x => x.Name == "text").Value); - Assert.AreEqual(string.Join(",", messageReceivers), savedRequest.Parameters.Find(x => x.Name == "phones").Value); - Assert.AreEqual(Client.DateTimeToTimestamp(messageTime).ToString(), savedRequest.Parameters.Find(x => x.Name == "sendingTime").Value); + Assert.AreEqual(string.Join(",", messageReceivers), + savedRequest.Parameters.Find(x => x.Name == "phones").Value); } [Test] - public void ShouldSendAllSetParameters() + public void ShouldSendSimpleMessageToOnePhone() { - int[] contactIds = { 385, 15 }; - int[] listIds = { 424, 454, 223 }; - IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new SendingResult()); var client = mockClient.Object; - var options = new SendingOptions - { - Phones = messageReceivers, - Text = messageText, - SendingTime = messageTime, - ContactIds = contactIds, - ListIds = listIds, - From = messageSender, - CutExtra = messageCutExtra, - PartsCount = messagePartsCount, - ReferenceId = sessionReferenceId, - Rrule = messageRrule - }; - var link = client.SendMessage(options); + var link = client.SendMessage(messageText, messageReceiver); mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); Assert.AreEqual("messages", savedRequest.Resource); Assert.AreEqual(Method.POST, savedRequest.Method); - Assert.AreEqual(10, savedRequest.Parameters.Count); + Assert.AreEqual(2, savedRequest.Parameters.Count); Assert.AreEqual(messageText, savedRequest.Parameters.Find(x => x.Name == "text").Value); - Assert.AreEqual(string.Join(",", messageReceivers), savedRequest.Parameters.Find(x => x.Name == "phones").Value); - Assert.AreEqual(string.Join(",", contactIds), savedRequest.Parameters.Find(x => x.Name == "contacts").Value); - Assert.AreEqual(string.Join(",", listIds), savedRequest.Parameters.Find(x => x.Name == "lists").Value); - Assert.AreEqual(Client.DateTimeToTimestamp(messageTime).ToString(), savedRequest.Parameters.Find(x => x.Name == "sendingTime").Value); - Assert.AreEqual(messageSender, savedRequest.Parameters.Find(x => x.Name == "from").Value); - Assert.AreEqual(messageCutExtra ? "1" : "0", savedRequest.Parameters.Find(x => x.Name == "cutExtra").Value); - Assert.AreEqual(messagePartsCount.ToString(), savedRequest.Parameters.Find(x => x.Name == "partsCount").Value); - Assert.AreEqual(sessionReferenceId, savedRequest.Parameters.Find(x => x.Name == "referenceId").Value); - Assert.AreEqual(messageRrule, savedRequest.Parameters.Find(x => x.Name == "rrule").Value); + Assert.AreEqual(messageReceiver, savedRequest.Parameters.Find(x => x.Name == "phones").Value); } [Test] @@ -1037,7 +1033,7 @@ public void ShouldSendTemplate() IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new SendingResult()); var client = mockClient.Object; @@ -1053,8 +1049,9 @@ public void ShouldSendTemplate() Assert.AreEqual("messages", savedRequest.Resource); Assert.AreEqual(Method.POST, savedRequest.Method); Assert.AreEqual(2, savedRequest.Parameters.Count); - Assert.AreEqual(string.Join(",", messageReceivers), savedRequest.Parameters.Find(x => x.Name == "phones").Value); + Assert.AreEqual(string.Join(",", messageReceivers), + savedRequest.Parameters.Find(x => x.Name == "phones").Value); Assert.AreEqual(templateId.ToString(), savedRequest.Parameters.Find(x => x.Name == "templateId").Value); } } -} +} \ No newline at end of file diff --git a/TextmagicRest.Tests/PingTest.cs b/TextmagicRest.Tests/PingTest.cs index 235d906..0ed89f7 100644 --- a/TextmagicRest.Tests/PingTest.cs +++ b/TextmagicRest.Tests/PingTest.cs @@ -1,18 +1,13 @@ -using System; -using TextmagicRest.Model; -using Moq; +using Moq; using NUnit.Framework; using RestSharp; -using System.Text; -using RestSharp.Deserializers; +using TextmagicRest.Model; namespace TextmagicRest.Tests { [TestFixture] public class PingTest { - private Mock mockClient; - [SetUp] public void Setup() { @@ -20,18 +15,20 @@ public void Setup() mockClient.CallBase = true; } + private Mock mockClient; + [Test] public void ShouldPing() { IRestRequest savedRequest = null; mockClient.Setup(trc => trc.Execute(It.IsAny())) - .Callback((request) => savedRequest = request) + .Callback(request => savedRequest = request) .Returns(new PingResult()); var client = mockClient.Object; client.Ping(); - mockClient.Verify(trc => trc.Execute (It.IsAny()), Times.Once); + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); Assert.IsNotNull(savedRequest); Assert.AreEqual("ping", savedRequest.Resource); Assert.AreEqual(Method.GET, savedRequest.Method); @@ -48,4 +45,4 @@ public void ShouldPing() Assert.AreEqual("pong", pingResult.Ping); } } -} +} \ No newline at end of file diff --git a/TextmagicRest.Tests/Properties/AssemblyInfo.cs b/TextmagicRest.Tests/Properties/AssemblyInfo.cs deleted file mode 100644 index d9461ae..0000000 --- a/TextmagicRest.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("TextmagicRest.Tests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("TextmagicRest.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("714dcdba-a603-47ba-8742-984c64a3691e")] - -// 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/TextmagicRest.Tests/TemplatesTests.cs b/TextmagicRest.Tests/TemplatesTests.cs index 8d0aaf5..116ab66 100644 --- a/TextmagicRest.Tests/TemplatesTests.cs +++ b/TextmagicRest.Tests/TemplatesTests.cs @@ -1,70 +1,103 @@ using System; -using TextmagicRest.Model; using Moq; using NUnit.Framework; using RestSharp; -using System.Text; -using RestSharp.Deserializers; +using TextmagicRest.Model; namespace TextmagicRest.Tests { [TestFixture] public class TemplatesTests { + [SetUp] + public void Setup() + { + mockClient = new Mock(Common.Username, Common.Token); + mockClient.CallBase = true; + } + private Mock mockClient; private const int templateId = 51335; private const string templateName = "Template name"; private const string templateContent = "Template content"; - private DateTime date = new DateTime(2015, 05, 07, 06, 05, 55, 0, DateTimeKind.Utc); + private readonly DateTime date = new DateTime(2015, 05, 07, 06, 05, 55, 0, DateTimeKind.Utc); - [SetUp] - public void Setup() + [Test] + public void ShouldCreateTemplate() { - mockClient = new Mock(Common.Username, Common.Token); - mockClient.CallBase = true; + IRestRequest savedRequest = null; + mockClient.Setup(trc => trc.Execute(It.IsAny())) + .Callback(request => savedRequest = request) + .Returns(new LinkResult()); + var client = mockClient.Object; + + client.CreateTemplate(templateName, templateContent); + + mockClient.Verify(trc => trc.Execute(It.IsAny()), Times.Once); + Assert.IsNotNull(savedRequest); + Assert.AreEqual("templates", savedRequest.Resource); + Assert.AreEqual(Method.POST, savedRequest.Method); + Assert.AreEqual(2, savedRequest.Parameters.Count); + Assert.AreEqual(templateName, savedRequest.Parameters.Find(x => x.Name == "name").Value); + Assert.AreEqual(templateContent, savedRequest.Parameters.Find(x => x.Name == "content").Value); + + var content = "{ \"id\": \"31337\", \"href\": \"/api/v2/contacts/31337\"}"; + + var testClient = Common.CreateClient(content, null, null); + client = new Client(testClient); + + var link = client.CreateTemplate(templateName, templateContent); + + Assert.IsTrue(link.Success); + Assert.AreEqual(31337, link.Id); + Assert.AreEqual("/api/v2/contacts/31337", link.Href); } [Test] - public void ShouldGetSingleTemplate() + public void ShouldDeleteTemplate() { IRestRequest savedRequest = null; - mockClient.Setup(trc => trc.Execute