using System; using System.Collections.Generic; using System.IO; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using System.Text; namespace StellaOps.Cli.Tests.Testing; internal sealed class TempDirectory : IDisposable { public TempDirectory() { Path = System.IO.Path.Combine(System.IO.Path.GetTempPath(), $"stellaops-cli-tests-{Guid.NewGuid():N}"); Directory.CreateDirectory(Path); } public string Path { get; } public void Dispose() { try { if (Directory.Exists(Path)) { Directory.Delete(Path, recursive: true); } } catch { // ignored } } } internal sealed class TempFile : IDisposable { public TempFile(string fileName, byte[] contents) { var directory = System.IO.Path.Combine(System.IO.Path.GetTempPath(), $"stellaops-cli-file-{Guid.NewGuid():N}"); Directory.CreateDirectory(directory); Path = System.IO.Path.Combine(directory, fileName); File.WriteAllBytes(Path, contents); } public string Path { get; } public void Dispose() { try { if (File.Exists(Path)) { File.Delete(Path); } var directory = System.IO.Path.GetDirectoryName(Path); if (!string.IsNullOrEmpty(directory) && Directory.Exists(directory)) { Directory.Delete(directory, recursive: true); } } catch { // ignored intentionally } } } internal sealed class StubHttpMessageHandler : HttpMessageHandler { private readonly Queue> _responses; public StubHttpMessageHandler(params Func[] handlers) { if (handlers is null || handlers.Length == 0) { throw new ArgumentException("At least one handler must be provided.", nameof(handlers)); } _responses = new Queue>(handlers); } protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var factory = _responses.Count > 1 ? _responses.Dequeue() : _responses.Peek(); return Task.FromResult(factory(request, cancellationToken)); } }