mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-11 07:46:05 -07:00
parent
6d40d3b891
commit
c57f33151b
9 changed files with 38 additions and 453 deletions
|
@ -39,9 +39,6 @@ using PlexRequests.Helpers.Exceptions;
|
||||||
using PlexRequests.Services.Interfaces;
|
using PlexRequests.Services.Interfaces;
|
||||||
using PlexRequests.Store;
|
using PlexRequests.Store;
|
||||||
using PlexRequests.Helpers;
|
using PlexRequests.Helpers;
|
||||||
using PlexRequests.Services.Jobs;
|
|
||||||
using PlexRequests.Store.Models;
|
|
||||||
using PlexRequests.Store.Repository;
|
|
||||||
|
|
||||||
namespace PlexRequests.Services.Tests
|
namespace PlexRequests.Services.Tests
|
||||||
{
|
{
|
||||||
|
@ -49,40 +46,19 @@ namespace PlexRequests.Services.Tests
|
||||||
public class PlexAvailabilityCheckerTests
|
public class PlexAvailabilityCheckerTests
|
||||||
{
|
{
|
||||||
public IAvailabilityChecker Checker { get; set; }
|
public IAvailabilityChecker Checker { get; set; }
|
||||||
private Mock<ISettingsService<PlexSettings>> SettingsMock { get; set; }
|
|
||||||
private Mock<ISettingsService<AuthenticationSettings>> AuthMock { get; set; }
|
|
||||||
private Mock<IRequestService> RequestMock { get; set; }
|
|
||||||
private Mock<IPlexApi> PlexMock { get; set; }
|
|
||||||
private Mock<ICacheProvider> CacheMock { get; set; }
|
|
||||||
private Mock<INotificationService> NotificationMock { get; set; }
|
|
||||||
private Mock<IJobRecord> JobRec { get; set; }
|
|
||||||
private Mock<IRepository<UsersToNotify>> NotifyUsers { get; set; }
|
|
||||||
|
|
||||||
[SetUp]
|
//[Test]
|
||||||
public void Setup()
|
//public void IsAvailableWithEmptySettingsTest()
|
||||||
{
|
//{
|
||||||
SettingsMock = new Mock<ISettingsService<PlexSettings>>();
|
// var settingsMock = new Mock<ISettingsService<PlexSettings>>();
|
||||||
AuthMock = new Mock<ISettingsService<AuthenticationSettings>>();
|
// var authMock = new Mock<ISettingsService<AuthenticationSettings>>();
|
||||||
RequestMock = new Mock<IRequestService>();
|
// var requestMock = new Mock<IRequestService>();
|
||||||
PlexMock = new Mock<IPlexApi>();
|
// var plexMock = new Mock<IPlexApi>();
|
||||||
NotificationMock = new Mock<INotificationService>();
|
// var cacheMock = new Mock<ICacheProvider>();
|
||||||
CacheMock = new Mock<ICacheProvider>();
|
// Checker = new PlexAvailabilityChecker(settingsMock.Object, authMock.Object, requestMock.Object, plexMock.Object, cacheMock.Object);
|
||||||
NotifyUsers = new Mock<IRepository<UsersToNotify>>();
|
|
||||||
JobRec = new Mock<IJobRecord>();
|
|
||||||
Checker = new PlexAvailabilityChecker(SettingsMock.Object, AuthMock.Object, RequestMock.Object, PlexMock.Object, CacheMock.Object, NotificationMock.Object, JobRec.Object, NotifyUsers.Object);
|
|
||||||
|
|
||||||
}
|
// Assert.Throws<ApplicationSettingsException>(() => Checker.IsAvailable("title", "2013", null, PlexType.TvShow), "We should be throwing an exception since we cannot talk to the services.");
|
||||||
|
//}
|
||||||
[Test]
|
|
||||||
public void InvalidSettings()
|
|
||||||
{
|
|
||||||
Checker.CheckAndUpdateAll();
|
|
||||||
PlexMock.Verify(x => x.GetLibrary(It.IsAny<string>(), It.IsAny<Uri>(), It.IsAny<string>()), Times.Never);
|
|
||||||
PlexMock.Verify(x => x.GetAccount(It.IsAny<string>()), Times.Never);
|
|
||||||
PlexMock.Verify(x => x.GetLibrarySections(It.IsAny<string>(), It.IsAny<Uri>()), Times.Never);
|
|
||||||
PlexMock.Verify(x => x.GetStatus(It.IsAny<string>(), It.IsAny<Uri>()), Times.Never);
|
|
||||||
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
|
||||||
}
|
|
||||||
|
|
||||||
//[Test]
|
//[Test]
|
||||||
//public void IsAvailableTest()
|
//public void IsAvailableTest()
|
||||||
|
|
|
@ -36,14 +36,6 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Common.Logging, Version=3.0.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Common.Logging.3.0.0\lib\net40\Common.Logging.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Common.Logging.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Common.Logging.Core.3.0.0\lib\net40\Common.Logging.Core.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Moq, Version=4.2.1510.2205, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
<Reference Include="Moq, Version=4.2.1510.2205, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll</HintPath>
|
<HintPath>..\packages\Moq.4.2.1510.2205\lib\net40\Moq.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
|
@ -52,10 +44,6 @@
|
||||||
<HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath>
|
<HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Quartz, Version=2.3.3.0, Culture=neutral, PublicKeyToken=f6b8c98a402cc8a4, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Quartz.2.3.3\lib\net40\Quartz.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Choose>
|
<Choose>
|
||||||
|
@ -75,12 +63,7 @@
|
||||||
<None Include="app.config">
|
<None Include="app.config">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</None>
|
</None>
|
||||||
<None Include="job_scheduling_data_2_0.xsd">
|
<None Include="packages.config" />
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</None>
|
|
||||||
<None Include="packages.config">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
</None>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\PlexRequests.Api.Interfaces\PlexRequests.Api.Interfaces.csproj">
|
<ProjectReference Include="..\PlexRequests.Api.Interfaces\PlexRequests.Api.Interfaces.csproj">
|
||||||
|
|
|
@ -1,361 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
|
||||||
xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
|
|
||||||
targetNamespace="http://quartznet.sourceforge.net/JobSchedulingData"
|
|
||||||
elementFormDefault="qualified"
|
|
||||||
version="2.0">
|
|
||||||
|
|
||||||
<xs:element name="job-scheduling-data">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Root level node</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:complexType>
|
|
||||||
<xs:sequence maxOccurs="unbounded">
|
|
||||||
<xs:element name="pre-processing-commands" type="pre-processing-commandsType" minOccurs="0" maxOccurs="1">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Commands to be executed before scheduling the jobs and triggers in this file.</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:element>
|
|
||||||
<xs:element name="processing-directives" type="processing-directivesType" minOccurs="0" maxOccurs="1">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Directives to be followed while scheduling the jobs and triggers in this file.</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:element>
|
|
||||||
<xs:element name="schedule" minOccurs="0" maxOccurs="unbounded">
|
|
||||||
<xs:complexType>
|
|
||||||
<xs:sequence maxOccurs="unbounded">
|
|
||||||
<xs:element name="job" type="job-detailType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
<xs:element name="trigger" type="triggerType" minOccurs="0" maxOccurs="unbounded" />
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
</xs:element>
|
|
||||||
</xs:sequence>
|
|
||||||
<xs:attribute name="version" type="xs:string">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Version of the XML Schema instance</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:attribute>
|
|
||||||
</xs:complexType>
|
|
||||||
</xs:element>
|
|
||||||
|
|
||||||
<xs:complexType name="pre-processing-commandsType">
|
|
||||||
<xs:sequence maxOccurs="unbounded">
|
|
||||||
<xs:element name="delete-jobs-in-group" type="xs:string" minOccurs="0" maxOccurs="unbounded">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Delete all jobs, if any, in the identified group. "*" can be used to identify all groups. Will also result in deleting all triggers related to the jobs.</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:element>
|
|
||||||
<xs:element name="delete-triggers-in-group" type="xs:string" minOccurs="0" maxOccurs="unbounded">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Delete all triggers, if any, in the identified group. "*" can be used to identify all groups. Will also result in deletion of related jobs that are non-durable.</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:element>
|
|
||||||
<xs:element name="delete-job" minOccurs="0" maxOccurs="unbounded">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Delete the identified job if it exists (will also result in deleting all triggers related to it).</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:complexType>
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="name" type="xs:string" />
|
|
||||||
<xs:element name="group" type="xs:string" minOccurs="0" />
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
</xs:element>
|
|
||||||
<xs:element name="delete-trigger" minOccurs="0" maxOccurs="unbounded">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Delete the identified trigger if it exists (will also result in deletion of related jobs that are non-durable).</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:complexType>
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="name" type="xs:string" />
|
|
||||||
<xs:element name="group" type="xs:string" minOccurs="0" />
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
</xs:element>
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
|
|
||||||
<xs:complexType name="processing-directivesType">
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="overwrite-existing-data" type="xs:boolean" minOccurs="0" default="true">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Whether the existing scheduling data (with same identifiers) will be overwritten. If false, and ignore-duplicates is not false, and jobs or triggers with the same names already exist as those in the file, an error will occur.</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:element>
|
|
||||||
<xs:element name="ignore-duplicates" type="xs:boolean" minOccurs="0" default="false">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>If true (and overwrite-existing-data is false) then any job/triggers encountered in this file that have names that already exist in the scheduler will be ignored, and no error will be produced.</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:element>
|
|
||||||
<xs:element name="schedule-trigger-relative-to-replaced-trigger" type="xs:boolean" minOccurs="0" default="false">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>If true trigger's start time is calculated based on earlier run time instead of fixed value. Trigger's start time must be undefined for this to work.</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
</xs:element>
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
|
|
||||||
<xs:complexType name="job-detailType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Define a JobDetail</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="name" type="xs:string" />
|
|
||||||
<xs:element name="group" type="xs:string" minOccurs="0" />
|
|
||||||
<xs:element name="description" type="xs:string" minOccurs="0" />
|
|
||||||
<xs:element name="job-type" type="xs:string" />
|
|
||||||
<xs:sequence minOccurs="0">
|
|
||||||
<xs:element name="durable" type="xs:boolean" />
|
|
||||||
<xs:element name="recover" type="xs:boolean" />
|
|
||||||
</xs:sequence>
|
|
||||||
<xs:element name="job-data-map" type="job-data-mapType" minOccurs="0" />
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
|
|
||||||
<xs:complexType name="job-data-mapType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Define a JobDataMap</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:sequence minOccurs="0" maxOccurs="unbounded">
|
|
||||||
<xs:element name="entry" type="entryType" />
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
|
|
||||||
<xs:complexType name="entryType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Define a JobDataMap entry</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="key" type="xs:string" />
|
|
||||||
<xs:element name="value" type="xs:string" />
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
|
|
||||||
<xs:complexType name="triggerType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Define a Trigger</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:choice>
|
|
||||||
<xs:element name="simple" type="simpleTriggerType" />
|
|
||||||
<xs:element name="cron" type="cronTriggerType" />
|
|
||||||
<xs:element name="calendar-interval" type="calendarIntervalTriggerType" />
|
|
||||||
</xs:choice>
|
|
||||||
</xs:complexType>
|
|
||||||
|
|
||||||
<xs:complexType name="abstractTriggerType" abstract="true">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Common Trigger definitions</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="name" type="xs:string" />
|
|
||||||
<xs:element name="group" type="xs:string" minOccurs="0" />
|
|
||||||
<xs:element name="description" type="xs:string" minOccurs="0" />
|
|
||||||
<xs:element name="job-name" type="xs:string" />
|
|
||||||
<xs:element name="job-group" type="xs:string" minOccurs="0" />
|
|
||||||
<xs:element name="priority" type="xs:nonNegativeInteger" minOccurs="0" />
|
|
||||||
<xs:element name="calendar-name" type="xs:string" minOccurs="0" />
|
|
||||||
<xs:element name="job-data-map" type="job-data-mapType" minOccurs="0" />
|
|
||||||
<xs:sequence minOccurs="0">
|
|
||||||
<xs:choice>
|
|
||||||
<xs:element name="start-time" type="xs:dateTime" />
|
|
||||||
<xs:element name="start-time-seconds-in-future" type="xs:nonNegativeInteger" />
|
|
||||||
</xs:choice>
|
|
||||||
<xs:element name="end-time" type="xs:dateTime" minOccurs="0" />
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:complexType>
|
|
||||||
|
|
||||||
<xs:complexType name="simpleTriggerType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Define a SimpleTrigger</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:complexContent>
|
|
||||||
<xs:extension base="abstractTriggerType">
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="misfire-instruction" type="simple-trigger-misfire-instructionType" minOccurs="0" />
|
|
||||||
<xs:sequence minOccurs="0">
|
|
||||||
<xs:element name="repeat-count" type="repeat-countType" />
|
|
||||||
<xs:element name="repeat-interval" type="xs:nonNegativeInteger" />
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:extension>
|
|
||||||
</xs:complexContent>
|
|
||||||
</xs:complexType>
|
|
||||||
|
|
||||||
<xs:complexType name="cronTriggerType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Define a CronTrigger</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:complexContent>
|
|
||||||
<xs:extension base="abstractTriggerType">
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="misfire-instruction" type="cron-trigger-misfire-instructionType" minOccurs="0" />
|
|
||||||
<xs:element name="cron-expression" type="cron-expressionType" />
|
|
||||||
<xs:element name="time-zone" type="xs:string" minOccurs="0" />
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:extension>
|
|
||||||
</xs:complexContent>
|
|
||||||
</xs:complexType>
|
|
||||||
|
|
||||||
<xs:complexType name="calendarIntervalTriggerType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Define a DateIntervalTrigger</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:complexContent>
|
|
||||||
<xs:extension base="abstractTriggerType">
|
|
||||||
<xs:sequence>
|
|
||||||
<xs:element name="misfire-instruction" type="date-interval-trigger-misfire-instructionType" minOccurs="0" />
|
|
||||||
<xs:element name="repeat-interval" type="xs:nonNegativeInteger" />
|
|
||||||
<xs:element name="repeat-interval-unit" type="interval-unitType" />
|
|
||||||
</xs:sequence>
|
|
||||||
</xs:extension>
|
|
||||||
</xs:complexContent>
|
|
||||||
</xs:complexType>
|
|
||||||
|
|
||||||
<xs:simpleType name="cron-expressionType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>
|
|
||||||
Cron expression (see JavaDoc for examples)
|
|
||||||
|
|
||||||
Special thanks to Chris Thatcher (thatcher@butterfly.net) for the regular expression!
|
|
||||||
|
|
||||||
Regular expressions are not my strong point but I believe this is complete,
|
|
||||||
with the caveat that order for expressions like 3-0 is not legal but will pass,
|
|
||||||
and month and day names must be capitalized.
|
|
||||||
If you want to examine the correctness look for the [\s] to denote the
|
|
||||||
seperation of individual regular expressions. This is how I break them up visually
|
|
||||||
to examine them:
|
|
||||||
|
|
||||||
SECONDS:
|
|
||||||
(
|
|
||||||
((([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?,)*([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?)
|
|
||||||
| (([\*]|[0-9]|[0-5][0-9])/([0-9]|[0-5][0-9]))
|
|
||||||
| ([\?])
|
|
||||||
| ([\*])
|
|
||||||
) [\s]
|
|
||||||
MINUTES:
|
|
||||||
(
|
|
||||||
((([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?,)*([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?)
|
|
||||||
| (([\*]|[0-9]|[0-5][0-9])/([0-9]|[0-5][0-9]))
|
|
||||||
| ([\?])
|
|
||||||
| ([\*])
|
|
||||||
) [\s]
|
|
||||||
HOURS:
|
|
||||||
(
|
|
||||||
((([0-9]|[0-1][0-9]|[2][0-3])(-([0-9]|[0-1][0-9]|[2][0-3]))?,)*([0-9]|[0-1][0-9]|[2][0-3])(-([0-9]|[0-1][0-9]|[2][0-3]))?)
|
|
||||||
| (([\*]|[0-9]|[0-1][0-9]|[2][0-3])/([0-9]|[0-1][0-9]|[2][0-3]))
|
|
||||||
| ([\?])
|
|
||||||
| ([\*])
|
|
||||||
) [\s]
|
|
||||||
DAY OF MONTH:
|
|
||||||
(
|
|
||||||
((([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(-([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1]))?,)*([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(-([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1]))?(C)?)
|
|
||||||
| (([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])/([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(C)?)
|
|
||||||
| (L(-[0-9])?)
|
|
||||||
| (L(-[1-2][0-9])?)
|
|
||||||
| (L(-[3][0-1])?)
|
|
||||||
| (LW)
|
|
||||||
| ([1-9]W)
|
|
||||||
| ([1-3][0-9]W)
|
|
||||||
| ([\?])
|
|
||||||
| ([\*])
|
|
||||||
)[\s]
|
|
||||||
MONTH:
|
|
||||||
(
|
|
||||||
((([1-9]|0[1-9]|1[0-2])(-([1-9]|0[1-9]|1[0-2]))?,)*([1-9]|0[1-9]|1[0-2])(-([1-9]|0[1-9]|1[0-2]))?)
|
|
||||||
| (([1-9]|0[1-9]|1[0-2])/([1-9]|0[1-9]|1[0-2]))
|
|
||||||
| (((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?,)*(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)
|
|
||||||
| ((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)/(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))
|
|
||||||
| ([\?])
|
|
||||||
| ([\*])
|
|
||||||
)[\s]
|
|
||||||
DAY OF WEEK:
|
|
||||||
(
|
|
||||||
(([1-7](-([1-7]))?,)*([1-7])(-([1-7]))?)
|
|
||||||
| ([1-7]/([1-7]))
|
|
||||||
| (((MON|TUE|WED|THU|FRI|SAT|SUN)(-(MON|TUE|WED|THU|FRI|SAT|SUN))?,)*(MON|TUE|WED|THU|FRI|SAT|SUN)(-(MON|TUE|WED|THU|FRI|SAT|SUN))?(C)?)
|
|
||||||
| ((MON|TUE|WED|THU|FRI|SAT|SUN)/(MON|TUE|WED|THU|FRI|SAT|SUN)(C)?)
|
|
||||||
| (([1-7]|(MON|TUE|WED|THU|FRI|SAT|SUN))(L|LW)?)
|
|
||||||
| (([1-7]|MON|TUE|WED|THU|FRI|SAT|SUN)#([1-7])?)
|
|
||||||
| ([\?])
|
|
||||||
| ([\*])
|
|
||||||
)
|
|
||||||
YEAR (OPTIONAL):
|
|
||||||
(
|
|
||||||
[\s]?
|
|
||||||
([\*])?
|
|
||||||
| ((19[7-9][0-9])|(20[0-9][0-9]))?
|
|
||||||
| (((19[7-9][0-9])|(20[0-9][0-9]))/((19[7-9][0-9])|(20[0-9][0-9])))?
|
|
||||||
| ((((19[7-9][0-9])|(20[0-9][0-9]))(-((19[7-9][0-9])|(20[0-9][0-9])))?,)*((19[7-9][0-9])|(20[0-9][0-9]))(-((19[7-9][0-9])|(20[0-9][0-9])))?)?
|
|
||||||
)
|
|
||||||
</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:restriction base="xs:string">
|
|
||||||
<xs:pattern
|
|
||||||
value="(((([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?,)*([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?)|(([\*]|[0-9]|[0-5][0-9])/([0-9]|[0-5][0-9]))|([\?])|([\*]))[\s](((([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?,)*([0-9]|[0-5][0-9])(-([0-9]|[0-5][0-9]))?)|(([\*]|[0-9]|[0-5][0-9])/([0-9]|[0-5][0-9]))|([\?])|([\*]))[\s](((([0-9]|[0-1][0-9]|[2][0-3])(-([0-9]|[0-1][0-9]|[2][0-3]))?,)*([0-9]|[0-1][0-9]|[2][0-3])(-([0-9]|[0-1][0-9]|[2][0-3]))?)|(([\*]|[0-9]|[0-1][0-9]|[2][0-3])/([0-9]|[0-1][0-9]|[2][0-3]))|([\?])|([\*]))[\s](((([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(-([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1]))?,)*([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(-([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1]))?(C)?)|(([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])/([1-9]|[0][1-9]|[1-2][0-9]|[3][0-1])(C)?)|(L(-[0-9])?)|(L(-[1-2][0-9])?)|(L(-[3][0-1])?)|(LW)|([1-9]W)|([1-3][0-9]W)|([\?])|([\*]))[\s](((([1-9]|0[1-9]|1[0-2])(-([1-9]|0[1-9]|1[0-2]))?,)*([1-9]|0[1-9]|1[0-2])(-([1-9]|0[1-9]|1[0-2]))?)|(([1-9]|0[1-9]|1[0-2])/([1-9]|0[1-9]|1[0-2]))|(((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?,)*(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(-(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?)|((JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)/(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))|([\?])|([\*]))[\s]((([1-7](-([1-7]))?,)*([1-7])(-([1-7]))?)|([1-7]/([1-7]))|(((MON|TUE|WED|THU|FRI|SAT|SUN)(-(MON|TUE|WED|THU|FRI|SAT|SUN))?,)*(MON|TUE|WED|THU|FRI|SAT|SUN)(-(MON|TUE|WED|THU|FRI|SAT|SUN))?(C)?)|((MON|TUE|WED|THU|FRI|SAT|SUN)/(MON|TUE|WED|THU|FRI|SAT|SUN)(C)?)|(([1-7]|(MON|TUE|WED|THU|FRI|SAT|SUN))?(L|LW)?)|(([1-7]|MON|TUE|WED|THU|FRI|SAT|SUN)#([1-7])?)|([\?])|([\*]))([\s]?(([\*])?|(19[7-9][0-9])|(20[0-9][0-9]))?| (((19[7-9][0-9])|(20[0-9][0-9]))/((19[7-9][0-9])|(20[0-9][0-9])))?| ((((19[7-9][0-9])|(20[0-9][0-9]))(-((19[7-9][0-9])|(20[0-9][0-9])))?,)*((19[7-9][0-9])|(20[0-9][0-9]))(-((19[7-9][0-9])|(20[0-9][0-9])))?)?)" />
|
|
||||||
</xs:restriction>
|
|
||||||
</xs:simpleType>
|
|
||||||
|
|
||||||
<xs:simpleType name="repeat-countType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Number of times to repeat the Trigger (-1 for indefinite)</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:restriction base="xs:integer">
|
|
||||||
<xs:minInclusive value="-1" />
|
|
||||||
</xs:restriction>
|
|
||||||
</xs:simpleType>
|
|
||||||
|
|
||||||
|
|
||||||
<xs:simpleType name="simple-trigger-misfire-instructionType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Simple Trigger Misfire Instructions</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:restriction base="xs:string">
|
|
||||||
<xs:pattern value="SmartPolicy" />
|
|
||||||
<xs:pattern value="RescheduleNextWithExistingCount" />
|
|
||||||
<xs:pattern value="RescheduleNextWithRemainingCount" />
|
|
||||||
<xs:pattern value="RescheduleNowWithExistingRepeatCount" />
|
|
||||||
<xs:pattern value="RescheduleNowWithRemainingRepeatCount" />
|
|
||||||
<xs:pattern value="FireNow" />
|
|
||||||
</xs:restriction>
|
|
||||||
</xs:simpleType>
|
|
||||||
|
|
||||||
<xs:simpleType name="cron-trigger-misfire-instructionType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Cron Trigger Misfire Instructions</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:restriction base="xs:string">
|
|
||||||
<xs:pattern value="SmartPolicy" />
|
|
||||||
<xs:pattern value="DoNothing" />
|
|
||||||
<xs:pattern value="FireOnceNow" />
|
|
||||||
</xs:restriction>
|
|
||||||
</xs:simpleType>
|
|
||||||
|
|
||||||
<xs:simpleType name="date-interval-trigger-misfire-instructionType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Date Interval Trigger Misfire Instructions</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:restriction base="xs:string">
|
|
||||||
<xs:pattern value="SmartPolicy" />
|
|
||||||
<xs:pattern value="DoNothing" />
|
|
||||||
<xs:pattern value="FireOnceNow" />
|
|
||||||
</xs:restriction>
|
|
||||||
</xs:simpleType>
|
|
||||||
|
|
||||||
<xs:simpleType name="interval-unitType">
|
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>Interval Units</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:restriction base="xs:string">
|
|
||||||
<xs:pattern value="Day" />
|
|
||||||
<xs:pattern value="Hour" />
|
|
||||||
<xs:pattern value="Minute" />
|
|
||||||
<xs:pattern value="Month" />
|
|
||||||
<xs:pattern value="Second" />
|
|
||||||
<xs:pattern value="Week" />
|
|
||||||
<xs:pattern value="Year" />
|
|
||||||
</xs:restriction>
|
|
||||||
</xs:simpleType>
|
|
||||||
|
|
||||||
</xs:schema>
|
|
|
@ -1,8 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Common.Logging" version="3.0.0" targetFramework="net452" />
|
|
||||||
<package id="Common.Logging.Core" version="3.0.0" targetFramework="net452" />
|
|
||||||
<package id="Moq" version="4.2.1510.2205" targetFramework="net46" />
|
<package id="Moq" version="4.2.1510.2205" targetFramework="net46" />
|
||||||
<package id="NUnit" version="3.2.0" targetFramework="net46" />
|
<package id="NUnit" version="3.2.0" targetFramework="net46" />
|
||||||
<package id="Quartz" version="2.3.3" targetFramework="net452" />
|
|
||||||
</packages>
|
</packages>
|
|
@ -31,7 +31,7 @@ using PlexRequests.Services.Interfaces;
|
||||||
using PlexRequests.Store.Models;
|
using PlexRequests.Store.Models;
|
||||||
using PlexRequests.Store.Repository;
|
using PlexRequests.Store.Repository;
|
||||||
|
|
||||||
namespace PlexRequests.Services.Jobs
|
namespace PlexRequests.Services
|
||||||
{
|
{
|
||||||
public class JobRecord : IJobRecord
|
public class JobRecord : IJobRecord
|
||||||
{
|
{
|
||||||
|
|
|
@ -35,6 +35,8 @@ using PlexRequests.Core;
|
||||||
using PlexRequests.Core.SettingModels;
|
using PlexRequests.Core.SettingModels;
|
||||||
using PlexRequests.Helpers;
|
using PlexRequests.Helpers;
|
||||||
using PlexRequests.Services.Interfaces;
|
using PlexRequests.Services.Interfaces;
|
||||||
|
using PlexRequests.Store.Models;
|
||||||
|
using PlexRequests.Store.Repository;
|
||||||
|
|
||||||
using Quartz;
|
using Quartz;
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#endregion
|
#endregion
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
using NLog;
|
using NLog;
|
||||||
|
|
||||||
|
@ -131,18 +130,7 @@ namespace PlexRequests.Services.Jobs
|
||||||
private bool DoWeNeedToBackup(string backupPath)
|
private bool DoWeNeedToBackup(string backupPath)
|
||||||
{
|
{
|
||||||
var files = Directory.GetFiles(backupPath);
|
var files = Directory.GetFiles(backupPath);
|
||||||
var last = files.LastOrDefault();
|
//TODO Get the latest file and if it's within an hour of DateTime.Now then don't bother backing up.
|
||||||
if (!string.IsNullOrEmpty(last))
|
|
||||||
{
|
|
||||||
var dt = ParseName(Path.GetFileName(last));
|
|
||||||
if (dt < DateTime.Now.AddHours(-1))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We don't have a backup
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
// ************************************************************************/
|
// ************************************************************************/
|
||||||
#endregion
|
#endregion
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
using Moq;
|
using Moq;
|
||||||
|
|
||||||
|
@ -60,7 +59,7 @@ namespace PlexRequests.UI.Tests
|
||||||
AuthMock = new Mock<ISettingsService<AuthenticationSettings>>();
|
AuthMock = new Mock<ISettingsService<AuthenticationSettings>>();
|
||||||
PlexMock = new Mock<IPlexApi>();
|
PlexMock = new Mock<IPlexApi>();
|
||||||
PlexRequestMock = new Mock<ISettingsService<PlexRequestSettings>>();
|
PlexRequestMock = new Mock<ISettingsService<PlexRequestSettings>>();
|
||||||
PlexRequestMock.Setup(x => x.GetSettingsAsync()).Returns(Task.FromResult(new PlexRequestSettings()));
|
PlexRequestMock.Setup(x => x.GetSettings()).Returns(new PlexRequestSettings());
|
||||||
Bootstrapper = new ConfigurableBootstrapper(with =>
|
Bootstrapper = new ConfigurableBootstrapper(with =>
|
||||||
{
|
{
|
||||||
with.Module<UserLoginModule>();
|
with.Module<UserLoginModule>();
|
||||||
|
@ -75,7 +74,7 @@ namespace PlexRequests.UI.Tests
|
||||||
public void LoginWithoutAuthentication()
|
public void LoginWithoutAuthentication()
|
||||||
{
|
{
|
||||||
var expectedSettings = new AuthenticationSettings { UserAuthentication = false, PlexAuthToken = "abc" };
|
var expectedSettings = new AuthenticationSettings { UserAuthentication = false, PlexAuthToken = "abc" };
|
||||||
AuthMock.Setup(x => x.GetSettingsAsync()).Returns(Task.FromResult(expectedSettings));
|
AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,7 +93,7 @@ namespace PlexRequests.UI.Tests
|
||||||
|
|
||||||
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
||||||
Assert.That(body.Result, Is.EqualTo(true));
|
Assert.That(body.Result, Is.EqualTo(true));
|
||||||
AuthMock.Verify(x => x.GetSettingsAsync(), Times.Once);
|
AuthMock.Verify(x => x.GetSettings(), Times.Once);
|
||||||
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
||||||
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
||||||
}
|
}
|
||||||
|
@ -103,7 +102,7 @@ namespace PlexRequests.UI.Tests
|
||||||
public void LoginWithoutAuthenticationWithEmptyUsername()
|
public void LoginWithoutAuthenticationWithEmptyUsername()
|
||||||
{
|
{
|
||||||
var expectedSettings = new AuthenticationSettings { UserAuthentication = false, PlexAuthToken = "abc" };
|
var expectedSettings = new AuthenticationSettings { UserAuthentication = false, PlexAuthToken = "abc" };
|
||||||
AuthMock.Setup(x => x.GetSettingsAsync()).Returns(Task.FromResult(expectedSettings));
|
AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings);
|
||||||
|
|
||||||
|
|
||||||
Bootstrapper.WithSession(new Dictionary<string, object>());
|
Bootstrapper.WithSession(new Dictionary<string, object>());
|
||||||
|
@ -120,7 +119,7 @@ namespace PlexRequests.UI.Tests
|
||||||
|
|
||||||
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
||||||
Assert.That(body.Result, Is.EqualTo(false));
|
Assert.That(body.Result, Is.EqualTo(false));
|
||||||
AuthMock.Verify(x => x.GetSettingsAsync(), Times.Never);
|
AuthMock.Verify(x => x.GetSettings(), Times.Never);
|
||||||
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
||||||
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
||||||
}
|
}
|
||||||
|
@ -140,7 +139,7 @@ namespace PlexRequests.UI.Tests
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
AuthMock.Setup(x => x.GetSettingsAsync()).Returns(Task.FromResult(expectedSettings));
|
AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings);
|
||||||
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
||||||
PlexMock.Setup(x => x.GetAccount(It.IsAny<string>())).Returns(new PlexAccount());
|
PlexMock.Setup(x => x.GetAccount(It.IsAny<string>())).Returns(new PlexAccount());
|
||||||
|
|
||||||
|
@ -159,7 +158,7 @@ namespace PlexRequests.UI.Tests
|
||||||
|
|
||||||
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
||||||
Assert.That(body.Result, Is.EqualTo(true));
|
Assert.That(body.Result, Is.EqualTo(true));
|
||||||
AuthMock.Verify(x => x.GetSettingsAsync(), Times.Once);
|
AuthMock.Verify(x => x.GetSettings(), Times.Once);
|
||||||
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
||||||
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Once);
|
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Once);
|
||||||
}
|
}
|
||||||
|
@ -179,7 +178,7 @@ namespace PlexRequests.UI.Tests
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
AuthMock.Setup(x => x.GetSettingsAsync()).Returns(Task.FromResult(expectedSettings));
|
AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings);
|
||||||
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
||||||
PlexMock.Setup(x => x.GetAccount(It.IsAny<string>())).Returns(new PlexAccount());
|
PlexMock.Setup(x => x.GetAccount(It.IsAny<string>())).Returns(new PlexAccount());
|
||||||
|
|
||||||
|
@ -201,7 +200,7 @@ namespace PlexRequests.UI.Tests
|
||||||
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
||||||
Assert.That(body.Result, Is.EqualTo(false));
|
Assert.That(body.Result, Is.EqualTo(false));
|
||||||
Assert.That(body.Message, Is.Not.Empty);
|
Assert.That(body.Message, Is.Not.Empty);
|
||||||
AuthMock.Verify(x => x.GetSettingsAsync(), Times.Once);
|
AuthMock.Verify(x => x.GetSettings(), Times.Once);
|
||||||
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
||||||
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Once);
|
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Once);
|
||||||
}
|
}
|
||||||
|
@ -228,7 +227,7 @@ namespace PlexRequests.UI.Tests
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
AuthMock.Setup(x => x.GetSettingsAsync()).Returns(Task.FromResult(expectedSettings));
|
AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings);
|
||||||
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
||||||
PlexMock.Setup(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>())).Returns(plexAuth);
|
PlexMock.Setup(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>())).Returns(plexAuth);
|
||||||
PlexMock.Setup(x => x.GetAccount(It.IsAny<string>())).Returns(new PlexAccount());
|
PlexMock.Setup(x => x.GetAccount(It.IsAny<string>())).Returns(new PlexAccount());
|
||||||
|
@ -250,7 +249,7 @@ namespace PlexRequests.UI.Tests
|
||||||
|
|
||||||
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
||||||
Assert.That(body.Result, Is.EqualTo(true));
|
Assert.That(body.Result, Is.EqualTo(true));
|
||||||
AuthMock.Verify(x => x.GetSettingsAsync(), Times.Once);
|
AuthMock.Verify(x => x.GetSettings(), Times.Once);
|
||||||
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
|
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
|
||||||
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Once);
|
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Once);
|
||||||
}
|
}
|
||||||
|
@ -274,7 +273,7 @@ namespace PlexRequests.UI.Tests
|
||||||
user = null
|
user = null
|
||||||
};
|
};
|
||||||
|
|
||||||
AuthMock.Setup(x => x.GetSettingsAsync()).Returns(Task.FromResult(expectedSettings));
|
AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings);
|
||||||
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
||||||
PlexMock.Setup(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>())).Returns(plexAuth);
|
PlexMock.Setup(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>())).Returns(plexAuth);
|
||||||
|
|
||||||
|
@ -297,7 +296,7 @@ namespace PlexRequests.UI.Tests
|
||||||
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
||||||
Assert.That(body.Result, Is.EqualTo(false));
|
Assert.That(body.Result, Is.EqualTo(false));
|
||||||
Assert.That(body.Message, Is.Not.Empty);
|
Assert.That(body.Message, Is.Not.Empty);
|
||||||
AuthMock.Verify(x => x.GetSettingsAsync(), Times.Once);
|
AuthMock.Verify(x => x.GetSettings(), Times.Once);
|
||||||
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
|
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
|
||||||
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
||||||
}
|
}
|
||||||
|
@ -306,7 +305,7 @@ namespace PlexRequests.UI.Tests
|
||||||
public void AttemptToLoginAsDeniedUser()
|
public void AttemptToLoginAsDeniedUser()
|
||||||
{
|
{
|
||||||
var expectedSettings = new AuthenticationSettings { UserAuthentication = false, DeniedUsers = "abc", PlexAuthToken = "abc" };
|
var expectedSettings = new AuthenticationSettings { UserAuthentication = false, DeniedUsers = "abc", PlexAuthToken = "abc" };
|
||||||
AuthMock.Setup(x => x.GetSettingsAsync()).Returns(Task.FromResult(expectedSettings));
|
AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings);
|
||||||
|
|
||||||
Bootstrapper.WithSession(new Dictionary<string, object>());
|
Bootstrapper.WithSession(new Dictionary<string, object>());
|
||||||
|
|
||||||
|
@ -324,7 +323,7 @@ namespace PlexRequests.UI.Tests
|
||||||
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
||||||
Assert.That(body.Result, Is.EqualTo(false));
|
Assert.That(body.Result, Is.EqualTo(false));
|
||||||
Assert.That(body.Message, Is.Not.Empty);
|
Assert.That(body.Message, Is.Not.Empty);
|
||||||
AuthMock.Verify(x => x.GetSettingsAsync(), Times.Once);
|
AuthMock.Verify(x => x.GetSettings(), Times.Once);
|
||||||
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
||||||
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
||||||
}
|
}
|
||||||
|
@ -358,7 +357,7 @@ namespace PlexRequests.UI.Tests
|
||||||
};
|
};
|
||||||
|
|
||||||
var account = new PlexAccount { Username = "Jamie" };
|
var account = new PlexAccount { Username = "Jamie" };
|
||||||
AuthMock.Setup(x => x.GetSettingsAsync()).Returns(Task.FromResult(expectedSettings));
|
AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings);
|
||||||
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
||||||
PlexMock.Setup(x => x.GetAccount(It.IsAny<string>())).Returns(account);
|
PlexMock.Setup(x => x.GetAccount(It.IsAny<string>())).Returns(account);
|
||||||
PlexMock.Setup(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>())).Returns(new PlexAuthentication { user = new User { username = "Jamie" } });
|
PlexMock.Setup(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>())).Returns(new PlexAuthentication { user = new User { username = "Jamie" } });
|
||||||
|
@ -378,7 +377,7 @@ namespace PlexRequests.UI.Tests
|
||||||
|
|
||||||
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
||||||
Assert.That(body.Result, Is.EqualTo(true));
|
Assert.That(body.Result, Is.EqualTo(true));
|
||||||
AuthMock.Verify(x => x.GetSettingsAsync(), Times.Once);
|
AuthMock.Verify(x => x.GetSettings(), Times.Once);
|
||||||
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Never);
|
||||||
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Once);
|
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Once);
|
||||||
}
|
}
|
||||||
|
@ -405,7 +404,7 @@ namespace PlexRequests.UI.Tests
|
||||||
|
|
||||||
var account = new PlexAccount { Username = "Jamie" };
|
var account = new PlexAccount { Username = "Jamie" };
|
||||||
|
|
||||||
AuthMock.Setup(x => x.GetSettingsAsync()).Returns(Task.FromResult(expectedSettings));
|
AuthMock.Setup(x => x.GetSettings()).Returns(expectedSettings);
|
||||||
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
PlexMock.Setup(x => x.GetUsers(It.IsAny<string>())).Returns(plexFriends);
|
||||||
PlexMock.Setup(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>())).Returns(plexAuth);
|
PlexMock.Setup(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>())).Returns(plexAuth);
|
||||||
PlexMock.Setup(x => x.GetAccount(It.IsAny<string>())).Returns(account);
|
PlexMock.Setup(x => x.GetAccount(It.IsAny<string>())).Returns(account);
|
||||||
|
@ -427,7 +426,7 @@ namespace PlexRequests.UI.Tests
|
||||||
|
|
||||||
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
var body = JsonConvert.DeserializeObject<JsonResponseModel>(result.Body.AsString());
|
||||||
Assert.That(body.Result, Is.EqualTo(true));
|
Assert.That(body.Result, Is.EqualTo(true));
|
||||||
AuthMock.Verify(x => x.GetSettingsAsync(), Times.Once);
|
AuthMock.Verify(x => x.GetSettings(), Times.Once);
|
||||||
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
|
PlexMock.Verify(x => x.SignIn(It.IsAny<string>(), It.IsAny<string>()), Times.Once);
|
||||||
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
PlexMock.Verify(x => x.GetUsers(It.IsAny<string>()), Times.Never);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,13 +27,14 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Linq.Expressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using Nancy;
|
using Nancy;
|
||||||
using Nancy.Security;
|
using Nancy.Security;
|
||||||
|
|
||||||
using NLog;
|
using NLog;
|
||||||
|
using PlexRequests.Api;
|
||||||
using PlexRequests.Api.Interfaces;
|
using PlexRequests.Api.Interfaces;
|
||||||
using PlexRequests.Core;
|
using PlexRequests.Core;
|
||||||
using PlexRequests.Core.SettingModels;
|
using PlexRequests.Core.SettingModels;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue