using MConnectSDK; using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Xunit; namespace MCC_xUnitTest { public class UnitTestSuite { #region area oggetti globali /// /// Token x cancellazione thread /// protected CancellationTokenSource _cts = new CancellationTokenSource(); /// /// Istanza classe MaestroConnectClient /// public MConnectClient MCC; /// /// Risposta BASE della classe di comunicazione /// protected Result reqStatus; /// /// File conf yaml /// protected string confFilePath = "mconnect.conf.yaml"; /// /// Restituisce un oggetto MCC inizializzato di base /// /// public MConnectClient getNewMCC() { // arrange if (_cts != null) { _cts.Cancel(); } // act (COMMON) MCC = new MConnectClient(); return MCC; } #endregion [Fact] [Trait("Category", "Init")] public void Create_MCC() { // act MCC = getNewMCC(); // assert Assert.NotNull(MCC); } [Fact] [Trait("Category", "Init")] public void initSDK_hasResult() { // act MCC = getNewMCC(); Task taskResult = MCC.InitSDKAsync(confFilePath, CancellationToken.None); // assert Assert.NotNull(taskResult.Result); } [Fact] [Trait("Category", "Init")] public void initSDK_throwNoConfig() { // act MCC = getNewMCC(); Task taskResult = MCC.InitSDKAsync("", CancellationToken.None); // assert is handled by the ExpectedException Action actual = () => taskResult.Result.ToString(); // assert Assert.Throws(actual); } [Fact] [Trait("Category", "InitResult")] public void initSDK_callResultOk() { // act MCC = getNewMCC(); Task taskResult = MCC.InitSDKAsync(confFilePath, CancellationToken.None); reqStatus = taskResult.Result; // asserts Assert.True(reqStatus.CallResultOk); } [Fact] [Trait("Category", "InitResult")] public void initSDK_error() { // act MCC = getNewMCC(); Task taskResult = MCC.InitSDKAsync(confFilePath, CancellationToken.None); reqStatus = taskResult.Result; // asserts Assert.Null(reqStatus.Error); } [Fact] [Trait("Category", "InitResult")] public void initSDK_localOk() { // act MCC = getNewMCC(); Task taskResult = MCC.InitSDKAsync(confFilePath, CancellationToken.None); reqStatus = taskResult.Result; // asserts Assert.True(reqStatus.LocalStatusOk); } [Fact] [Trait("Category", "InitResult")] public void initSDK_cloudOk() { // act MCC = getNewMCC(); Task taskResult = MCC.InitSDKAsync(confFilePath, CancellationToken.None); reqStatus = taskResult.Result; // asserts Assert.True(reqStatus.CloudStatusOk); } [Fact] [Trait("Category", "InitResult")] public void initSDK_sourceOk() { // act MCC = getNewMCC(); Task taskResult = MCC.InitSDKAsync(confFilePath, CancellationToken.None); reqStatus = taskResult.Result; // asserts Assert.NotNull(reqStatus.Source); } [Fact] [Trait("Category", "InitResult")] public void initSDK_payloadOk() { // act MCC = getNewMCC(); Task taskResult = MCC.InitSDKAsync(confFilePath, CancellationToken.None); reqStatus = taskResult.Result; // asserts Assert.Null(reqStatus.Payload); } #region Test OAUTH [Fact] [Trait("Category", "OAuth")] public void tryActGetUserCode() { // act MCC = getNewMCC(); // init async... su DB NON auth... Task tResInit = MCC.InitSDKAsync(confFilePath.Replace("mconnect.conf", "mconnectNoAuth.conf"), CancellationToken.None); ActivationPayload actPayload = new ActivationPayload(); string userCode = ""; tResInit.Wait(); // provo a chiamare procedura AUTH _cts = new CancellationTokenSource(); // imposto scadenza max 10 sec... _cts.CancelAfter(10000); CancellationToken token = _cts.Token; // gestione progress... var progressHandler = new Progress(value => { // aggiorno richiesta live... reqStatus = value; // se ho token chiudo! actPayload = (ActivationPayload)reqStatus.Payload; // salvo solo se != "" userCode = actPayload.UserCode != "" ? actPayload.UserCode : userCode; // forzo cancellazione _cts.Cancel(); }); var progress = progressHandler as IProgress; Task tResActivation = MCC.TryActivationAsync(token, progress); tResActivation.Wait(); // assert Assert.True(userCode != ""); } #endregion #region Test INFO UTENTI [Theory] [InlineData(false)] [InlineData(true)] [Trait("Category", "UserData")] public void getUserList(bool getImages) { // act MCC = getNewMCC(); // init async... Task taskResult1 = MCC.InitSDKAsync(confFilePath, CancellationToken.None); taskResult1.Wait(); Task taskResult2 = MCC.GetClientStatusAsync(); var userResult = MCC.getUserListAsync(getImages); List userList = ((UserPayload)userResult.Result.Payload).UserList; // assert Assert.True(userList.Count > 0); } [Theory] [InlineData("slocatelli", "ViaDante16!", UserReason.AllOk)] [InlineData("slocatelli", "WrongPassword", UserReason.PwdMismatch)] [InlineData("slocatelli_wrong", "ViaDante16!", UserReason.UserNotFound)] [Trait("Category", "UserData")] public void tryLogin(string username, string password, UserReason loginResult) { // act MCC = getNewMCC(); // init async... Task taskResult1 = MCC.InitSDKAsync(confFilePath, CancellationToken.None); taskResult1.Wait(); Task userResult = MCC.TryUserLogin(username, password); userResult.Wait(); // assert Assert.True(userResult.Result.Error.Reason == loginResult); } #endregion } }