/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ using System.Collections.Generic; using System.Text; using Newtonsoft.Json; using NUnit.Framework; using QuantConnect.Notifications; namespace QuantConnect.Tests.Common.Notifications { [TestFixture] public class NotificationJsonConverterTests { [TestCase(true)] [TestCase(false)] public void EmailRoundTrip(bool nullFields) { var expected = new NotificationEmail("p@p.com", "subjectP", null, null); if (!nullFields) { expected.Headers = new Dictionary { { "key", "value" } }; expected.Data = "dataContent"; } var serialized = JsonConvert.SerializeObject(expected); var result = (NotificationEmail)JsonConvert.DeserializeObject(serialized); Assert.AreEqual(expected.Subject, result.Subject); Assert.AreEqual(expected.Address, result.Address); Assert.AreEqual(expected.Data, result.Data); Assert.AreEqual(expected.Message, result.Message); Assert.AreEqual(expected.Headers, result.Headers); } [TestCase(true)] [TestCase(false)] public void SmsRoundTrip(bool nullFields) { var expected = new NotificationSms("123", nullFields ? null : "ImATextMessage"); var serialized = JsonConvert.SerializeObject(expected); var result = (NotificationSms)JsonConvert.DeserializeObject(serialized); Assert.AreEqual(expected.PhoneNumber, result.PhoneNumber); Assert.AreEqual(expected.Message, result.Message); } [TestCase(true)] [TestCase(false)] public void WebRoundTrip(bool nullFields) { var expected = new NotificationWeb("qc.com", nullFields ? null : "JijiData", nullFields ? null : new Dictionary { { "key", "value" } }); var serialized = JsonConvert.SerializeObject(expected); var result = (NotificationWeb)JsonConvert.DeserializeObject(serialized); Assert.AreEqual(expected.Address, result.Address); Assert.AreEqual(expected.Data, result.Data); Assert.AreEqual(expected.Headers, result.Headers); } [TestCase(true, true)] [TestCase(true, false)] [TestCase(false, true)] [TestCase(false, false)] public void TelegramRoundTrip(bool nullMessage, bool nullToken) { var expected = new NotificationTelegram("pepe", nullMessage ? null : "ImAMessage", nullToken ? null : "botToken"); var serialized = JsonConvert.SerializeObject(expected); var result = (NotificationTelegram)JsonConvert.DeserializeObject(serialized); Assert.AreEqual(expected.Id, result.Id); Assert.AreEqual(expected.Message, result.Message); Assert.AreEqual(expected.Token, result.Token); } [Test] public void FtpWithPasswordRoundTrip([Values] bool secure, [Values] bool withPort) { var expected = new NotificationFtp( "qc.com", "username", "password", "path/to/file.json", Encoding.ASCII.GetBytes("{}"), secure, withPort ? 2121: null); var serialized = JsonConvert.SerializeObject(expected); var result = (NotificationFtp)JsonConvert.DeserializeObject(serialized); Assert.AreEqual(expected.Hostname, result.Hostname); Assert.AreEqual(expected.Username, result.Username); Assert.AreEqual(expected.Password, result.Password); Assert.AreEqual(expected.FilePath, result.FilePath); Assert.AreEqual(expected.FileContent, result.FileContent); Assert.AreEqual(expected.Port, result.Port); Assert.AreEqual(expected.Secure, result.Secure); Assert.IsNull(result.PrivateKey); Assert.IsNull(result.PrivateKeyPassphrase); } [Test] public void FtpWithKeyRoundTrip([Values] bool withPort, [Values] bool withPassphrase) { var expected = new NotificationFtp( "qc.com", "username", "privatekey", withPassphrase ? "passphrase" : null, "path/to/file.json", Encoding.ASCII.GetBytes("{}"), withPort ? 2121 : null); var serialized = JsonConvert.SerializeObject(expected); var result = (NotificationFtp)JsonConvert.DeserializeObject(serialized); Assert.AreEqual(expected.Hostname, result.Hostname); Assert.AreEqual(expected.Username, result.Username); Assert.AreEqual(expected.PrivateKey, result.PrivateKey); Assert.AreEqual(expected.FilePath, result.FilePath); Assert.AreEqual(expected.FileContent, result.FileContent); Assert.AreEqual(expected.Port, result.Port); Assert.IsNull(result.Password); Assert.IsTrue(result.Secure); if (withPassphrase) { Assert.AreEqual(expected.PrivateKeyPassphrase, result.PrivateKeyPassphrase); } else { Assert.IsNull(result.PrivateKeyPassphrase); } } [Test] public void CaseInsensitive() { var serialized = @"[{ ""address"": ""p@p.com"", ""subject"": ""sdads"" }, { ""phoneNumber"": ""11111111111"" }, { ""headers"": { ""1"": ""2"" }, ""address"": ""qc.com"" }, { ""address"": ""qc.com/1234"" },{ ""host"": ""qc.com"", ""username"": ""username"", ""password"": ""password"", ""fileDestinationPath"": ""path/to/file.csv"", ""fileContent"": ""abcde"", ""secure"": ""true"", ""port"": 2222 },{ ""host"": ""qc.com"", ""username"": ""username"", ""password"": ""password"", ""fileDestinationPath"": ""path/to/file.csv"", ""filecontent"": ""abcde"", ""secure"": ""false"", ""port"": 2222 },{ ""host"": ""qc.com"", ""username"": ""username"", ""privatekey"": ""privatekey"", ""passphrase"": ""privatekeyPassphrase"", ""fileDestinationPath"": ""path/to/file.csv"", ""filecontent"": ""abcde"", ""secure"": ""false"", ""port"": 2222 }]"; var result = JsonConvert.DeserializeObject>(serialized); Assert.AreEqual(7, result.Count); var email = result[0] as NotificationEmail; Assert.AreEqual("sdads", email.Subject); Assert.AreEqual("p@p.com", email.Address); var sms = result[1] as NotificationSms; Assert.AreEqual("11111111111", sms.PhoneNumber); var web = result[2] as NotificationWeb; Assert.AreEqual(1, web.Headers.Count); Assert.AreEqual("2", web.Headers["1"]); Assert.AreEqual("qc.com", web.Address); var web2 = result[3] as NotificationWeb; Assert.AreEqual("qc.com/1234", web2.Address); var ftp = result[4] as NotificationFtp; Assert.AreEqual("qc.com", ftp.Hostname); Assert.AreEqual("username", ftp.Username); Assert.AreEqual("password", ftp.Password); Assert.AreEqual("path/to/file.csv", ftp.FilePath); Assert.AreEqual("abcde", ftp.FileContent); Assert.IsTrue(ftp.Secure); Assert.AreEqual(2222, ftp.Port); Assert.IsNull(ftp.PrivateKey); Assert.IsNull(ftp.PrivateKeyPassphrase); var ftp2 = result[5] as NotificationFtp; Assert.AreEqual("qc.com", ftp2.Hostname); Assert.AreEqual("username", ftp2.Username); Assert.AreEqual("password", ftp2.Password); Assert.AreEqual("path/to/file.csv", ftp2.FilePath); Assert.AreEqual("abcde", ftp2.FileContent); Assert.IsFalse(ftp2.Secure); Assert.AreEqual(2222, ftp2.Port); Assert.IsNull(ftp.PrivateKey); Assert.IsNull(ftp.PrivateKeyPassphrase); var ftp3 = result[6] as NotificationFtp; Assert.AreEqual("qc.com", ftp3.Hostname); Assert.AreEqual("username", ftp3.Username); Assert.AreEqual("privatekey", ftp3.PrivateKey); Assert.AreEqual("privatekeyPassphrase", ftp3.PrivateKeyPassphrase); Assert.AreEqual("path/to/file.csv", ftp3.FilePath); Assert.AreEqual("abcde", ftp3.FileContent); Assert.IsTrue(ftp3.Secure); Assert.AreEqual(2222, ftp3.Port); Assert.IsNull(ftp3.Password); } } }