File: Mocks\IAspireServerEventsMock.cs
Web Access
Project: ..\..\..\test\Microsoft.WebTools.AspireService.Tests\Microsoft.WebTools.AspireService.Tests.csproj (Microsoft.WebTools.AspireService.Tests)
// Copyright (c) Microsoft Corporation. All rights reserved.
 
using Moq;
using Moq.Language.Flow;
 
namespace Aspire.Tools.Service.UnitTests;
 
internal class IAspireServerEventsMock : MockFactory<IAspireServerEvents>
{
    public IAspireServerEventsMock(Mocks mocks, MockBehavior? mockBehavior = null)
        : base(mocks, mockBehavior)
    {
    }
 
    public IAspireServerEventsMock ImplementStartProjectAsync(string dcpId, string sessionId, Exception? ex = null, bool requireNullArguments = false)
    {
        ISetup<IAspireServerEvents, ValueTask<string>> setup;
        if (requireNullArguments)
        {
            setup = MockObject.Setup(x => x.StartProjectAsync(dcpId, It.Is<ProjectLaunchRequest>(plr => plr.Arguments == null), It.IsAny<CancellationToken>()));
        }
        else
        {
            setup = MockObject.Setup(x => x.StartProjectAsync(dcpId, It.IsAny<ProjectLaunchRequest>(), It.IsAny<CancellationToken>()));
        }
 
        setup.Returns(() =>
        {
            if (ex is not null)
            {
                throw ex;
            }
             
            return new ValueTask<string>(sessionId);
        }).Verifiable();
 
        return this;
    }
 
    public IAspireServerEventsMock ImplementStopSessionAsync(string dcpId, string sessionId, bool exists, Exception? ex = null)
    {
        MockObject.Setup(x => x.StopSessionAsync(dcpId, sessionId, It.IsAny<CancellationToken>()))
                  .Returns(() =>
                  {
                        if (ex is not null)
                        {
                            throw ex;
                        }
 
                        return new ValueTask<bool>(exists);
                  })
                  .Verifiable();
        return this;
    }
}