public void GetByName_VirtualMachineExists_RepositoryIsCalled()
        {
            // Arrange
            var machineList = new[]
            {
                new VirtualMachine {Name = "Machine1"},
                new VirtualMachine {Name = "Machine2"},
                new VirtualMachine {Name = "Machine3"}
            };

            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(machineList.AsQueryable());

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            controller.Get("Machine2");

            // Assert
            repository.VerifyAllExpectations();
        }
        public void GetByName_VirtualMachineDoesNotExist_ReturnsNull()
        {
            // Arrange
            var machineList = new[]
            {
                new VirtualMachine {Name = "Machine1"},
                new VirtualMachine {Name = "Machine2"},
                new VirtualMachine {Name = "Machine3"}
            };

            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(machineList.AsQueryable());

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            var result = controller.Get("FakeMachine");

            // Assert
            Assert.That(result, Is.Null);
        }
        public void Delete_RepositoryIsCalled()
        {
            // Arrange
            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Delete(Arg<string>.Is.TypeOf))
                .Repeat.Once();

            var messenger = MockRepository.GenerateStub<IMessenger>();
            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            controller.Delete("Machine");

            // Assert
            repository.VerifyAllExpectations();
        }
        public void Put_ThrowsHttpException()
        {
            // Arrange
            var repository = MockRepository.GenerateStub<IVirtualMachineRepository>();
            var messenger = MockRepository.GenerateStub<IMessenger>();
            var controller = new VirtualMachinesController(repository, messenger);

            // Act

            // Assert
            Assert.That(() => controller.Put("ExistingMachine", new VirtualMachine {Name = "ExistingMachine"}), Throws.InstanceOf<HttpException>());
            repository.VerifyAllExpectations();
            messenger.VerifyAllExpectations();
        }
        public void Post_VirtualMachineHasNoName_ThrowsHttpException()
        {
            // Arrange
            var repository = MockRepository.GenerateStub<IVirtualMachineRepository>();
            var messenger = MockRepository.GenerateStub<IMessenger>();
            var controller = new VirtualMachinesController(repository, messenger);

            // Act

            // Assert
            Assert.That(() => controller.Post(new VirtualMachine()), Throws.InstanceOf<HttpException>());
        }
        public void Post_VirtualMachineAlreadyExists_ThrowsHttpException()
        {
            // Arrange
            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(new EnumerableQuery<VirtualMachine>(new[] {new VirtualMachine {Name = "Machine"}}));

            var messenger = MockRepository.GenerateStub<IMessenger>();
            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            var virtualMachine = new VirtualMachine
            {
                Name = "Machine",
                AdminPassword = "******",
                AdminUserName = "******",
                Location = "a;sdgh;",
                Size = AzureVirtualMachineSize.ExtraSmall,
                TimeZone = "kl;agh;"
            };

            // Assert
            Assert.That(() => controller.Post(virtualMachine), Throws.InstanceOf<HttpException>());
            repository.VerifyAllExpectations();
        }
        public void Post_ValidVirtualMachine_ReturnsMachine()
        {
            // Arrange
            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(new EnumerableQuery<VirtualMachine>(Enumerable.Empty<VirtualMachine>()));
            var messenger = MockRepository.GenerateStub<IMessenger>();
            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            var virtualMachine = new VirtualMachine
            {
                Name = "Machine",
                AdminPassword = "******",
                AdminUserName = "******",
                Location = "a;sdgh;",
                Size = AzureVirtualMachineSize.ExtraSmall,
                TimeZone = "kl;agh;"
            };
            var result = controller.Post(virtualMachine);

            // Assert
            Assert.That(result.Name, Is.EqualTo("Machine"));
        }
        public void Post_ValidVirtualMachine_RepositoryIsCalled()
        {
            // Arrange
            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(new EnumerableQuery<VirtualMachine>(Enumerable.Empty<VirtualMachine>()));
            repository.Expect(x => x.Create(Arg<VirtualMachine>.Is.TypeOf));

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            var virtualMachine = new VirtualMachine
            {
                Name = "Machine",
                AdminPassword = "******",
                AdminUserName = "******",
                Location = "a;sdgh;",
                Size = AzureVirtualMachineSize.ExtraSmall,
                TimeZone = "kl;agh;"
            };

            // Act
            controller.Post(virtualMachine);

            // Assert
            repository.VerifyAllExpectations();
        }
        public void Post_InvalidVirtualMachine_RepositoryIsNotCalled()
        {
            // Arrange
            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Create(Arg<VirtualMachine>.Is.TypeOf))
                .Repeat.Never();

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            var machine = new VirtualMachine();

            // Act
            try
            {
                controller.Post(machine);
            }
            catch (HttpException) { }

            // Assert
            repository.VerifyAllExpectations();
        }
        public void Get_NoVirtualMachines_ReturnsEmptyList()
        {
            // Arrange
            var machineList = new VirtualMachine[0];

            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(machineList.AsQueryable());

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            var result = controller.Get();

            // Assert
            Assert.That(result.Any(), Is.False);
        }
        public void Get_HasVirtualMachines_ReturnsList()
        {
            // Arrange
            var machineList = new[]
            {
                new VirtualMachine {Name = "Machine1"},
                new VirtualMachine {Name = "Machine2"},
                new VirtualMachine {Name = "Machine3"}
            };

            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(machineList.AsQueryable());

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            var result = controller.Get();

            // Assert
            Assert.That(result.Any(), Is.True);
            repository.VerifyAllExpectations();
        }
        public void Get_HasManyVirtualMachines_ReturnsPartialList()
        {
            // Arrange
            var machineList = new[]
            {
                new VirtualMachine {Name = "Machine1"},
                new VirtualMachine {Name = "Machine2"},
                new VirtualMachine {Name = "Machine3"},
                new VirtualMachine {Name = "Machine4"},
                new VirtualMachine {Name = "Machine5"},
                new VirtualMachine {Name = "Machine6"},
                new VirtualMachine {Name = "Machine7"},
                new VirtualMachine {Name = "Machine8"},
                new VirtualMachine {Name = "Machine9"},
                new VirtualMachine {Name = "Machine10"},
                new VirtualMachine {Name = "Machine11"},
                new VirtualMachine {Name = "Machine12"},
                new VirtualMachine {Name = "Machine13"},
                new VirtualMachine {Name = "Machine14"},
                new VirtualMachine {Name = "Machine15"},
                new VirtualMachine {Name = "Machine16"},
                new VirtualMachine {Name = "Machine17"},
                new VirtualMachine {Name = "Machine18"},
                new VirtualMachine {Name = "Machine19"},
                new VirtualMachine {Name = "Machine20"},
                new VirtualMachine {Name = "Machine21"},
                new VirtualMachine {Name = "Machine22"},
                new VirtualMachine {Name = "Machine23"},
                new VirtualMachine {Name = "Machine24"},
                new VirtualMachine {Name = "Machine25"},
                new VirtualMachine {Name = "Machine26"},
                new VirtualMachine {Name = "Machine27"}
            };

            var repository = MockRepository.GenerateMock<IVirtualMachineRepository>();
            repository.Expect(x => x.Read())
                .Repeat.Once()
                .Return(machineList.AsQueryable());

            var messenger = MockRepository.GenerateStub<IMessenger>();

            var controller = new VirtualMachinesController(repository, messenger);

            // Act
            var result = controller.Get();

            // Assert
            Assert.That(result.Count(), Is.EqualTo(25));
            repository.VerifyAllExpectations();
        }