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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #6
0
        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);
        }