mirror of
https://github.com/Sonarr/Sonarr.git
synced 2024-12-31 03:11:07 +02:00
added tests for basic config set/get to db
This commit is contained in:
parent
1620721efe
commit
772452aa8b
59
NzbDrone.Core.Test/DbConfigControllerTest.cs
Normal file
59
NzbDrone.Core.Test/DbConfigControllerTest.cs
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using Gallio.Framework;
|
||||||
|
using log4net;
|
||||||
|
using MbUnit.Framework;
|
||||||
|
using MbUnit.Framework.ContractVerifiers;
|
||||||
|
using Moq;
|
||||||
|
using NzbDrone.Core.Controllers;
|
||||||
|
using NzbDrone.Core.Repository;
|
||||||
|
using SubSonic.Repository;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Test
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class DbConfigControllerTest
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void Overwrite_existing_value()
|
||||||
|
{
|
||||||
|
String key = "MY_KEY";
|
||||||
|
String value = "MY_VALUE";
|
||||||
|
|
||||||
|
//setup
|
||||||
|
var repo = new Mock<IRepository>();
|
||||||
|
var config = new Config() { Key = key, Value = value };
|
||||||
|
repo.Setup(r => r.Single<Config>(key)).Returns(config);
|
||||||
|
var target = new DbConfigController(new Mock<ILog>().Object, repo.Object);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
target.SetValue(key, value);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
repo.Verify(c => c.Update(config));
|
||||||
|
repo.Verify(c => c.Add(It.IsAny<Config>()), Times.Never());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Add_new_value()
|
||||||
|
{
|
||||||
|
String key = "MY_KEY";
|
||||||
|
String value = "MY_VALUE";
|
||||||
|
|
||||||
|
//setup
|
||||||
|
var repo = new Mock<IRepository>();
|
||||||
|
var config = new Config() { Key = key, Value = value };
|
||||||
|
repo.Setup(r => r.Single<Config>(It.IsAny<string>())).Returns<Config>(null).Verifiable();
|
||||||
|
var target = new DbConfigController(new Mock<ILog>().Object, repo.Object);
|
||||||
|
|
||||||
|
//Act
|
||||||
|
target.SetValue(key, value);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
repo.Verify();
|
||||||
|
repo.Verify(r => r.Update(It.IsAny<Config>()), Times.Never());
|
||||||
|
repo.Verify(r => r.Add(It.Is<Config>(c => c.Key == key && c.Value == value)), Times.Once());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
NzbDrone.Core.Test/Moq/Moq.dll
Normal file
BIN
NzbDrone.Core.Test/Moq/Moq.dll
Normal file
Binary file not shown.
5768
NzbDrone.Core.Test/Moq/Moq.xml
Normal file
5768
NzbDrone.Core.Test/Moq/Moq.xml
Normal file
File diff suppressed because it is too large
Load Diff
@ -32,8 +32,20 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Gallio, Version=3.2.0.0, Culture=neutral, PublicKeyToken=eb9cfa67ee6ab36e, processorArchitecture=MSIL" />
|
<Reference Include="Gallio, Version=3.2.0.0, Culture=neutral, PublicKeyToken=eb9cfa67ee6ab36e, processorArchitecture=MSIL" />
|
||||||
|
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\NzbDrone.Core\Libraries\log4net.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="MbUnit, Version=3.2.0.0, Culture=neutral, PublicKeyToken=eb9cfa67ee6ab36e, processorArchitecture=MSIL" />
|
<Reference Include="MbUnit, Version=3.2.0.0, Culture=neutral, PublicKeyToken=eb9cfa67ee6ab36e, processorArchitecture=MSIL" />
|
||||||
<Reference Include="MbUnit35, Version=3.2.0.0, Culture=neutral, PublicKeyToken=eb9cfa67ee6ab36e, processorArchitecture=MSIL" />
|
<Reference Include="MbUnit35, Version=3.2.0.0, Culture=neutral, PublicKeyToken=eb9cfa67ee6ab36e, processorArchitecture=MSIL" />
|
||||||
|
<Reference Include="Moq, Version=4.0.10827.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>Moq\Moq.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SubSonic.Core, Version=3.0.0.3, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
<HintPath>..\NzbDrone.Core\Libraries\SubSonic.Core.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
@ -46,6 +58,7 @@
|
|||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="DbConfigControllerTest.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="TvDbControllerTest.cs" />
|
<Compile Include="TvDbControllerTest.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -55,6 +68,10 @@
|
|||||||
<Name>NzbDrone.Core</Name>
|
<Name>NzbDrone.Core</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="Moq\Moq.dll" />
|
||||||
|
<Content Include="Moq\Moq.xml" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
@ -10,15 +10,14 @@ namespace NzbDrone.Core.Controllers
|
|||||||
public class DbConfigController : IConfigController
|
public class DbConfigController : IConfigController
|
||||||
{
|
{
|
||||||
private const string _seriesroots = "SeriesRoots";
|
private const string _seriesroots = "SeriesRoots";
|
||||||
private readonly IDiskController _diskController;
|
|
||||||
private readonly ILog _logger;
|
private readonly ILog _logger;
|
||||||
private readonly IRepository _sonicRepo;
|
private readonly IRepository _sonicRepo;
|
||||||
|
|
||||||
|
|
||||||
public DbConfigController(ILog logger, IDiskController diskController, IRepository dataRepository)
|
public DbConfigController(ILog logger, IRepository dataRepository)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_diskController = diskController;
|
|
||||||
_sonicRepo = dataRepository;
|
_sonicRepo = dataRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,7 +42,7 @@ public String SeriesRoot
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private string GetValue(string key, object defaultValue, bool makePermanent)
|
public string GetValue(string key, object defaultValue, bool makePermanent)
|
||||||
{
|
{
|
||||||
string value;
|
string value;
|
||||||
|
|
||||||
@ -66,14 +65,24 @@ private string GetValue(string key, object defaultValue, bool makePermanent)
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetValue(string key, string value)
|
public void SetValue(string key, string value)
|
||||||
{
|
{
|
||||||
if (String.IsNullOrEmpty(key)) throw new ArgumentOutOfRangeException("key");
|
if (String.IsNullOrEmpty(key)) throw new ArgumentOutOfRangeException("key");
|
||||||
if (value== null) throw new ArgumentNullException("key");
|
if (value == null) throw new ArgumentNullException("key");
|
||||||
|
|
||||||
_logger.DebugFormat("Writing Setting to file. Key:'{0}' Value:'{1}'", key, value);
|
_logger.DebugFormat("Writing Setting to file. Key:'{0}' Value:'{1}'", key, value);
|
||||||
|
|
||||||
_sonicRepo.Add(new Config { Key = key, Value = value });
|
var dbValue = _sonicRepo.Single<Config>(key);
|
||||||
|
|
||||||
|
if (dbValue == null)
|
||||||
|
{
|
||||||
|
_sonicRepo.Add(new Config { Key = key, Value = value });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dbValue.Value = value;
|
||||||
|
_sonicRepo.Update(dbValue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -11,5 +11,8 @@ String SeriesRoot
|
|||||||
|
|
||||||
set;
|
set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string GetValue(string key, object defaultValue, bool makePermanent);
|
||||||
|
void SetValue(string key, string value);
|
||||||
}
|
}
|
||||||
}
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -21,7 +21,7 @@ public SettingsController(IConfigController configController)
|
|||||||
|
|
||||||
public ActionResult Index()
|
public ActionResult Index()
|
||||||
{
|
{
|
||||||
return View(new SettingsModel() { RootPath = _configController.SeriesRoot });
|
return View(new SettingsModel() { TvFolder = _configController.SeriesRoot });
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
@ -29,7 +29,7 @@ public ActionResult Index(SettingsModel model)
|
|||||||
{
|
{
|
||||||
if (ModelState.IsValid)
|
if (ModelState.IsValid)
|
||||||
{
|
{
|
||||||
_configController.SeriesRoot = model.RootPath;
|
_configController.SeriesRoot = model.TvFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
return RedirectToAction("index");
|
return RedirectToAction("index");
|
||||||
|
@ -13,7 +13,11 @@ namespace NzbDrone.Web.Models
|
|||||||
|
|
||||||
public class SettingsModel
|
public class SettingsModel
|
||||||
{
|
{
|
||||||
public String RootPath
|
|
||||||
|
[Required]
|
||||||
|
[DataType(DataType.Text)]
|
||||||
|
[DisplayName("TV Folder")]
|
||||||
|
public String TvFolder
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
|
@ -9,15 +9,16 @@
|
|||||||
Settings</h2>
|
Settings</h2>
|
||||||
<% using (Html.BeginForm())
|
<% using (Html.BeginForm())
|
||||||
{ %>
|
{ %>
|
||||||
<%: Html.ValidationSummary(true, "Account creation was unsuccessful. Please correct the errors and try again.") %>
|
<%: Html.ValidationSummary(true, "Unable to save you settings. Please correct the errors and try again.") %>
|
||||||
<div>
|
<div>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>General</legend>
|
<legend>General</legend>
|
||||||
<div class="editor-label">
|
<div class="editor-label">
|
||||||
<%: Html.LabelFor(m => m.RootPath) %>
|
<%: Html.LabelFor(m => m.TvFolder) %>
|
||||||
</div>
|
</div>
|
||||||
<div class="editor-field">
|
<div class="editor-field">
|
||||||
<%: Html.TextBoxFor(m => m.RootPath) %>
|
<%: Html.TextBoxFor(m => m.TvFolder) %>
|
||||||
|
<%: Html.ValidationMessageFor(m => m.TvFolder) %>
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
<input type="submit" value="Save" />
|
<input type="submit" value="Save" />
|
||||||
|
Loading…
Reference in New Issue
Block a user