using System.ServiceProcess; using AutoMoq; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Model; using NzbDrone.Providers; namespace NzbDrone.App.Test { [TestFixture] public class RouterTest { [TestCase(null, ApplicationMode.Console)] [TestCase("", ApplicationMode.Console)] [TestCase("1", ApplicationMode.Help)] [TestCase("ii", ApplicationMode.Help)] [TestCase("uu", ApplicationMode.Help)] [TestCase("i", ApplicationMode.InstallService)] [TestCase("I", ApplicationMode.InstallService)] [TestCase("/I", ApplicationMode.InstallService)] [TestCase("/i", ApplicationMode.InstallService)] [TestCase("-I", ApplicationMode.InstallService)] [TestCase("-i", ApplicationMode.InstallService)] [TestCase("u", ApplicationMode.UninstallService)] [TestCase("U", ApplicationMode.UninstallService)] [TestCase("/U", ApplicationMode.UninstallService)] [TestCase("/u", ApplicationMode.UninstallService)] [TestCase("-U", ApplicationMode.UninstallService)] [TestCase("-u", ApplicationMode.UninstallService)] public void GetApplicationMode_single_arg(string arg, ApplicationMode mode) { Router.GetApplicationMode(new[] { arg }).Should().Be(mode); } [TestCase("", "", ApplicationMode.Console)] [TestCase("", null, ApplicationMode.Console)] [TestCase("i", "n", ApplicationMode.Help)] public void GetApplicationMode_two_args(string a, string b, ApplicationMode mode) { Router.GetApplicationMode(new[] { a, b }).Should().Be(mode); } [Test] public void Route_should_call_install_service_when_application_mode_is_install() { var mocker = new AutoMoqer(MockBehavior.Strict); var serviceProviderMock = mocker.GetMock(); serviceProviderMock.Setup(c => c.Install()); serviceProviderMock.Setup(c => c.ServiceExist(ServiceProvider.NzbDroneServiceName)).Returns(false); mocker.GetMock().SetupGet(c => c.IsUserInteractive).Returns(true); mocker.Resolve().Route(ApplicationMode.InstallService); serviceProviderMock.Verify(c => c.Install(), Times.Once()); } [Test] public void Route_should_call_uninstall_service_when_application_mode_is_uninstall() { var mocker = new AutoMoqer(MockBehavior.Strict); var serviceProviderMock = mocker.GetMock(); serviceProviderMock.Setup(c => c.UnInstall()); mocker.GetMock().SetupGet(c => c.IsUserInteractive).Returns(true); serviceProviderMock.Setup(c => c.ServiceExist(ServiceProvider.NzbDroneServiceName)).Returns(true); mocker.Resolve().Route(ApplicationMode.UninstallService); serviceProviderMock.Verify(c => c.UnInstall(), Times.Once()); } [Test] public void Route_should_call_console_service_when_application_mode_is_console() { var mocker = new AutoMoqer(MockBehavior.Strict); var consoleProvider = mocker.GetMock(); var appServerProvider = mocker.GetMock(); consoleProvider.Setup(c => c.WaitForClose()); appServerProvider.Setup(c => c.Start()); mocker.GetMock().SetupGet(c => c.IsUserInteractive).Returns(true); mocker.Resolve().Route(ApplicationMode.Console); consoleProvider.Verify(c => c.WaitForClose(), Times.Once()); appServerProvider.Verify(c => c.Start(), Times.Once()); } [TestCase(ApplicationMode.Console)] [TestCase(ApplicationMode.InstallService)] [TestCase(ApplicationMode.UninstallService)] [TestCase(ApplicationMode.Help)] public void Route_should_call_service_start_when_run_in_service_more(ApplicationMode applicationMode) { var mocker = new AutoMoqer(MockBehavior.Strict); var envMock = mocker.GetMock(); var serviceProvider = mocker.GetMock(); envMock.SetupGet(c => c.IsUserInteractive).Returns(false); serviceProvider.Setup(c => c.Run(It.IsAny())); mocker.Resolve().Route(applicationMode); serviceProvider.Verify(c => c.Run(It.IsAny()), Times.Once()); } [Test] public void show_error_on_install_if_service_already_exist() { var mocker = new AutoMoqer(MockBehavior.Strict); var consoleMock = mocker.GetMock(); var serviceMock = mocker.GetMock(); mocker.GetMock().SetupGet(c => c.IsUserInteractive).Returns(true); consoleMock.Setup(c => c.PrintServiceAlreadyExist()); serviceMock.Setup(c => c.ServiceExist(ServiceProvider.NzbDroneServiceName)).Returns(true); mocker.Resolve().Route(ApplicationMode.InstallService); mocker.VerifyAllMocks(); } [Test] public void show_error_on_uninstall_if_service_doesnt_exist() { var mocker = new AutoMoqer(MockBehavior.Strict); var consoleMock = mocker.GetMock(); var serviceMock = mocker.GetMock(); mocker.GetMock().SetupGet(c => c.IsUserInteractive).Returns(true); consoleMock.Setup(c => c.PrintServiceDoestExist()); serviceMock.Setup(c => c.ServiceExist(ServiceProvider.NzbDroneServiceName)).Returns(false); mocker.Resolve().Route(ApplicationMode.UninstallService); mocker.VerifyAllMocks(); } } }