public async Task GetInitialState_ValuesGiven_TransfersValuesToInitialState() { //Arrange var flow = new ProvisionInstanceStateFlow( "some-plan-id", new Dogger.Domain.Models.Instance() { Name = "some-instance-name" }); var serviceProvider = TestServiceProviderFactory.CreateUsingStartup(); var stateFactory = new ProvisioningStateFactory(serviceProvider); var fakeMediator = Substitute.For <IMediator>(); //Act var state = await flow.GetInitialStateAsync(new InitialStateContext( fakeMediator, stateFactory)) as ICreateLightsailInstanceState; //Assert Assert.IsNotNull(state); Assert.AreEqual("some-plan-id", state.PlanId); Assert.AreEqual("some-instance-name", state.DatabaseInstance.Name); }
public async Task GetNextState_FromRunDockerComposeOnInstanceState_ReturnsNull() { //Arrange var flow = new DeployToClusterStateFlow( "127.0.0.1", new[] { "some-docker-compose-contents" }); var serviceProvider = TestServiceProviderFactory.CreateUsingStartup(); var stateFactory = new ProvisioningStateFactory(serviceProvider); var fakeState = Substitute.For <IRunDockerComposeOnInstanceState>(); var fakeMediator = Substitute.For <IMediator>(); //Act var state = await flow.GetNextStateAsync(new NextStateContext( fakeMediator, stateFactory, fakeState)); //Assert Assert.IsNull(state); }
public async Task GetNextState_FromUnknownState_ThrowsException() { //Arrange var flow = new ProvisionInstanceStateFlow( "some-plan-id", new Dogger.Domain.Models.Instance() { Name = "some-instance-name" }); var serviceProvider = TestServiceProviderFactory.CreateUsingStartup(); var stateFactory = new ProvisioningStateFactory(serviceProvider); var fakeState = Substitute.For <IProvisioningState>(); var fakeMediator = Substitute.For <IMediator>(); //Act var exception = await Assert.ThrowsExceptionAsync <UnknownFlowStateException>(async() => await flow.GetNextStateAsync(new NextStateContext( fakeMediator, stateFactory, fakeState))); //Assert Assert.IsNotNull(exception); }
public async Task GetNextState_FromCompleteInstanceSetupState_ReturnsNull() { //Arrange var flow = new ProvisionInstanceStateFlow( "some-plan-id", new Dogger.Domain.Models.Instance() { Name = "some-instance-name" }); var serviceProvider = TestServiceProviderFactory.CreateUsingStartup(); var stateFactory = new ProvisioningStateFactory(serviceProvider); var fakeState = Substitute.For <ICompleteInstanceSetupState>(); var fakeMediator = Substitute.For <IMediator>(); //Act var state = await flow.GetNextStateAsync(new NextStateContext( fakeMediator, stateFactory, fakeState)); //Assert Assert.IsNull(state); }
public async Task Create_AllStatesCanBeCreated() { //Arrange var stateTypes = typeof(Startup) .Assembly .GetTypes() .Where(x => x.IsClass) .Where(x => !x.IsAbstract) .Where(x => !x.IsNestedPrivate) .Where(x => x .GetInterfaces() .Contains(typeof(IProvisioningState))); await using var environment = await IntegrationTestEnvironment.CreateAsync(); var stateFactory = new ProvisioningStateFactory(environment.ServiceProvider); //Act var stateInstances = stateTypes .Select(stateType => typeof(IProvisioningStateFactory) .GetMethod(nameof(IProvisioningStateFactory.Create)) ?.MakeGenericMethod(stateType)) .Where(createMethod => createMethod != null) .Select(createMethod => createMethod .Invoke(stateFactory, new object[] { null })) .ToArray(); //Assert Assert.AreNotEqual(0, stateInstances.Length); foreach (var stateInstance in stateInstances) { Assert.IsNotNull(stateInstance); } }
public async Task GetInitialState_ValuesGiven_TransfersValuesToInitialState() { //Arrange var buildArguments = new Dictionary <string, string>(); var flow = new DeployToClusterStateFlow( "127.0.0.1", new[] { "some-docker-compose-contents" }) { BuildArguments = buildArguments }; var serviceProvider = TestServiceProviderFactory.CreateUsingStartup(); var stateFactory = new ProvisioningStateFactory(serviceProvider); var fakeMediator = Substitute.For <IMediator>(); fakeMediator .Send(Arg.Any <GetLightsailInstanceByNameQuery>()) .Returns(new Instance() { PublicIpAddress = "127.0.0.1" }); //Act var state = await flow.GetInitialStateAsync(new InitialStateContext( fakeMediator, stateFactory)) as IRunDockerComposeOnInstanceState; //Assert Assert.IsNotNull(state); Assert.AreEqual("127.0.0.1", state.IpAddress); Assert.AreEqual("some-docker-compose-contents", state.DockerComposeYmlFilePaths?.Single()); Assert.AreSame(buildArguments, state.BuildArguments); }
public async Task GetNextState_FromCreateLightsailInstanceState_ReturnsInstallDockerOnInstanceStateWithValuesTransferred() { //Arrange var fakeUserId = Guid.NewGuid(); var flow = new ProvisionInstanceStateFlow( "some-plan-id", new Dogger.Domain.Models.Instance() { Name = "some-instance-name" }) { UserId = fakeUserId }; var serviceProvider = TestServiceProviderFactory.CreateUsingStartup(); var stateFactory = new ProvisioningStateFactory(serviceProvider); var fakeMediator = Substitute.For <IMediator>(); var fakeState = Substitute.For <ICreateLightsailInstanceState>(); fakeState.CreatedLightsailInstance.Returns(new Instance() { PublicIpAddress = "127.0.0.1" }); //Act var state = await flow.GetNextStateAsync(new NextStateContext( fakeMediator, stateFactory, fakeState)) as IInstallSoftwareOnInstanceState; //Assert Assert.IsNotNull(state); Assert.AreEqual("127.0.0.1", state.IpAddress); Assert.AreEqual(fakeUserId, state.UserId); }