using System.ServiceProcess; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Test.Common; namespace NzbDrone.App.Test { [TestFixture] public class RouterTest : TestBase<Router> { [TestCase(null, ApplicationModes.Console)] [TestCase("", ApplicationModes.Console)] [TestCase("1", ApplicationModes.Help)] [TestCase("ii", ApplicationModes.Help)] [TestCase("uu", ApplicationModes.Help)] [TestCase("i", ApplicationModes.InstallService)] [TestCase("I", ApplicationModes.InstallService)] [TestCase("/I", ApplicationModes.InstallService)] [TestCase("/i", ApplicationModes.InstallService)] [TestCase("-I", ApplicationModes.InstallService)] [TestCase("-i", ApplicationModes.InstallService)] [TestCase("u", ApplicationModes.UninstallService)] [TestCase("U", ApplicationModes.UninstallService)] [TestCase("/U", ApplicationModes.UninstallService)] [TestCase("/u", ApplicationModes.UninstallService)] [TestCase("-U", ApplicationModes.UninstallService)] [TestCase("-u", ApplicationModes.UninstallService)] public void GetApplicationMode_single_arg(string arg, ApplicationModes modes) { Router.GetApplicationMode(new[] { arg }).Should().Be(modes); } [TestCase("", "", ApplicationModes.Console)] [TestCase("", null, ApplicationModes.Console)] [TestCase("i", "n", ApplicationModes.Help)] public void GetApplicationMode_two_args(string a, string b, ApplicationModes modes) { Router.GetApplicationMode(new[] { a, b }).Should().Be(modes); } [Test] public void Route_should_call_install_service_when_application_mode_is_install() { var serviceProviderMock = Mocker.GetMock<ServiceProvider>(MockBehavior.Strict); serviceProviderMock.Setup(c => c.Install(ServiceProvider.NZBDRONE_SERVICE_NAME)); serviceProviderMock.Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)).Returns(false); serviceProviderMock.Setup(c => c.Start(ServiceProvider.NZBDRONE_SERVICE_NAME)); Mocker.GetMock<EnvironmentProvider>().SetupGet(c => c.IsUserInteractive).Returns(true); Subject.Route(ApplicationModes.InstallService); serviceProviderMock.Verify(c => c.Install(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); } [Test] public void Route_should_call_uninstall_service_when_application_mode_is_uninstall() { var serviceProviderMock = Mocker.GetMock<ServiceProvider>(); serviceProviderMock.Setup(c => c.UnInstall(ServiceProvider.NZBDRONE_SERVICE_NAME)); Mocker.GetMock<EnvironmentProvider>().SetupGet(c => c.IsUserInteractive).Returns(true); serviceProviderMock.Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)).Returns(true); Subject.Route(ApplicationModes.UninstallService); serviceProviderMock.Verify(c => c.UnInstall(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); } [Test] public void Route_should_call_console_service_when_application_mode_is_console() { Mocker.GetMock<EnvironmentProvider>().SetupGet(c => c.IsUserInteractive).Returns(true); Mocker.GetMock<IConsoleService>().SetupGet(c => c.IsConsoleApplication).Returns(true); Subject.Route(ApplicationModes.Console); Mocker.GetMock<IConsoleService>().Verify(c => c.WaitForClose(), Times.Once()); Mocker.GetMock<INzbDroneServiceFactory>().Verify(c => c.Start(), Times.Once()); } [TestCase(ApplicationModes.Console)] [TestCase(ApplicationModes.InstallService)] [TestCase(ApplicationModes.UninstallService)] [TestCase(ApplicationModes.Help)] public void Route_should_call_service_start_when_run_in_service_more(ApplicationModes applicationModes) { var envMock = Mocker.GetMock<EnvironmentProvider>(); var serviceProvider = Mocker.GetMock<ServiceProvider>(); envMock.SetupGet(c => c.IsUserInteractive).Returns(false); serviceProvider.Setup(c => c.Run(It.IsAny<ServiceBase>())); Subject.Route(applicationModes); serviceProvider.Verify(c => c.Run(It.IsAny<ServiceBase>()), Times.Once()); } [Test] public void show_error_on_install_if_service_already_exist() { var consoleMock = Mocker.GetMock<IConsoleService>(); var serviceMock = Mocker.GetMock<ServiceProvider>(); Mocker.GetMock<EnvironmentProvider>().SetupGet(c => c.IsUserInteractive).Returns(true); consoleMock.Setup(c => c.PrintServiceAlreadyExist()); serviceMock.Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)).Returns(true); Subject.Route(ApplicationModes.InstallService); Mocker.VerifyAllMocks(); } [Test] public void show_error_on_uninstall_if_service_doesnt_exist() { var consoleMock = Mocker.GetMock<IConsoleService>(); var serviceMock = Mocker.GetMock<ServiceProvider>(); Mocker.GetMock<EnvironmentProvider>().SetupGet(c => c.IsUserInteractive).Returns(true); consoleMock.Setup(c => c.PrintServiceDoestExist()); serviceMock.Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)).Returns(false); Subject.Route(ApplicationModes.UninstallService); Mocker.VerifyAllMocks(); } } }