using System.Linq.Expressions; using Centron.Host.Messages; using Centron.Host.RestRequests; using Centron.Interfaces.Administration.Connections; using CentronSoftware.Centron.WebServices.Connections; namespace Centron.Tests.Integration; public class IntegrationTestHelper { private static string? LoginToken { get; set; } private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1); public static async Task Login(CentronWebService connection, string? username = null, string? password = null, string? device = null) { await _semaphore.WaitAsync(); if (LoginToken != null) { _semaphore.Release(); return LoginToken; } var request = GetRequest(new LoginRequest { Username = username ?? "admin", Password = password ?? "1", Application = "{7880B678-989E-4405-B570-F7FC34D25367}", Device = device ?? "test", AppVersion = "1.0.2502", LoginKind = WebLoginType.User, }); Expression>> execute= f => f.Login(request); try { var response = await connection.CallAsync(execute); var result = response.Result.FirstOrDefault(); Assert.NotNull(result); Assert.NotEmpty(result); LoginToken = result; return result; } finally { _semaphore.Release(); } } public static async Task Logout(CentronWebService connection) { await _semaphore.WaitAsync(); if (LoginToken == null) { _semaphore.Release(); return; } var request = GetRequest(LoginToken!); Expression> execute = f => f.Logout(request); try { var response = await connection.CallAsync(execute); Assert.Equal(StatusCode.Success, response.Status); LoginToken = null; } finally { _semaphore.Release(); } } public static Request GetRequest(string ticket = "") { return new Request { Ticket = ticket }; } public static Request GetRequest(T data, string ticket = "") { return new Request { Data = data, Ticket = ticket, }; } public static CentronWebService GetConnection() { var url = "http://localhost:1234/CentronService"; return new CentronWebService(url); } }