Skip to content

Commit 70e8741

Browse files
committed
Backfill and DRY out trigger conrtoller tests
1 parent 5d7f1e1 commit 70e8741

File tree

8 files changed

+158
-115
lines changed

8 files changed

+158
-115
lines changed

IntegrationEngine.Tests/Api/Controllers/CronTriggerControllerTest.cs

Lines changed: 0 additions & 55 deletions
This file was deleted.

IntegrationEngine.Tests/Api/Controllers/JobTypeControllerTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
using System.Collections;
1010
using System.Collections.Generic;
1111

12-
namespace IntegrationEngine.Tests
12+
namespace IntegrationEngine.Tests.Api.Controllers
1313
{
1414
public class JobTypeControllerTest : TestBase<JobTypeController>
1515
{

IntegrationEngine.Tests/Api/Controllers/SimpleTriggerControllerTest.cs

Lines changed: 0 additions & 51 deletions
This file was deleted.

IntegrationEngine.Tests/Api/Controllers/TimeZoneControllerTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
using System.Collections;
1010
using System.Collections.Generic;
1111

12-
namespace IntegrationEngine.Tests
12+
namespace IntegrationEngine.Tests.Api.Controllers
1313
{
1414
public class TimeZoneControllerTest : TestBase<TimeZoneController>
1515
{
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
using BeekmanLabs.UnitTesting;
2+
using IntegrationEngine.Api;
3+
using IntegrationEngine.Core.Storage;
4+
using IntegrationEngine.Scheduler;
5+
using Moq;
6+
using NUnit.Framework;
7+
using System.Collections.Generic;
8+
using System.Linq;
9+
using System.Web.Http.Results;
10+
11+
namespace IntegrationEngine.Tests.Api
12+
{
13+
public class TriggerControllerBaseTest : TestBase<TriggerControllerBase<TriggerStub>>
14+
{
15+
public Mock<IElasticsearchRepository> MockElasticRepo { get; set; }
16+
public Mock<IEngineScheduler> MockEngineScheduler { get; set; }
17+
public string TriggerDocumentId = "foo";
18+
19+
[SetUp]
20+
public void Setup()
21+
{
22+
MockElasticRepo = new Mock<IElasticsearchRepository>();
23+
Subject.Repository = MockElasticRepo.Object;
24+
MockEngineScheduler = new Mock<IEngineScheduler>();
25+
Subject.EngineScheduler = MockEngineScheduler.Object;
26+
}
27+
28+
[Test]
29+
public void ShouldGetListOfTriggers()
30+
{
31+
var expected = new List<TriggerStub>() { new TriggerStub(), new TriggerStub() };
32+
var expectedCount = expected.Count();
33+
MockElasticRepo.Setup(x => x.SelectAll<TriggerStub>()).Returns(expected);
34+
35+
var actual = Subject.GetCollection();
36+
37+
Assert.That(actual.Count(), Is.EqualTo(expectedCount));
38+
Assert.That(actual, Is.EquivalentTo(expected));
39+
MockElasticRepo.Verify(x => x.SelectAll<TriggerStub>(), Times.Once);
40+
}
41+
42+
[Test]
43+
public void ShouldGetTriggerById()
44+
{
45+
var expected = new TriggerStub() { Id = TriggerDocumentId };
46+
MockElasticRepo.Setup(x => x.SelectById<TriggerStub>(TriggerDocumentId)).Returns(expected);
47+
48+
var actual = Subject.Get(TriggerDocumentId);
49+
50+
Assert.That(actual, Is.TypeOf(typeof(OkNegotiatedContentResult<TriggerStub>)));
51+
MockElasticRepo.Verify(x => x.SelectById<TriggerStub>(TriggerDocumentId), Times.Once);
52+
}
53+
54+
[Test]
55+
public void ShouldReturnNotFoundIfTriggerDoesNotExist()
56+
{
57+
MockElasticRepo.Setup(x => x.SelectById<TriggerStub>(TriggerDocumentId));
58+
59+
var actual = Subject.Get(TriggerDocumentId);
60+
61+
Assert.That(actual, Is.TypeOf(typeof(NotFoundResult)));
62+
}
63+
64+
[Test]
65+
public void ShouldUpdateAndReturnTrigger()
66+
{
67+
var expected = new TriggerStub() { Id = TriggerDocumentId };
68+
MockElasticRepo.Setup(x => x.Update(expected)).Returns(expected);
69+
MockEngineScheduler.Setup(x => x.ScheduleJobWithTrigger(expected));
70+
71+
var actual = Subject.Put(TriggerDocumentId, expected);
72+
73+
Assert.That(actual, Is.TypeOf(typeof(OkNegotiatedContentResult<TriggerStub>)));
74+
MockElasticRepo.Verify(x => x.Update(expected), Times.Once);
75+
MockEngineScheduler.Verify(x => x.ScheduleJobWithTrigger(expected), Times.Once);
76+
}
77+
78+
[Test]
79+
public void ShouldReturnBadRequestIfIdsDoNotMatchWhenUpdatingTrigger()
80+
{
81+
var actual = Subject.Put("1", new TriggerStub() { Id = "2" });
82+
83+
Assert.That(actual, Is.TypeOf(typeof(BadRequestResult)));
84+
}
85+
86+
[Test]
87+
public void ShouldScheduleJobWhenTriggerIsCreated()
88+
{
89+
var jobType = "MyProject.MyIntegrationJob";
90+
var expected = new TriggerStub() {
91+
JobType = jobType
92+
};
93+
MockEngineScheduler.Setup(x => x.ScheduleJobWithTrigger(expected));
94+
MockElasticRepo.Setup(x => x.Insert(expected)).Returns(expected);
95+
96+
Subject.Post(expected);
97+
98+
MockEngineScheduler.Verify(x => x
99+
.ScheduleJobWithTrigger(It.Is<TriggerStub>(y => y.JobType == jobType)), Times.Once);
100+
}
101+
102+
[Test]
103+
public void ShouldDeleteTrigger()
104+
{
105+
var expected = new TriggerStub() { Id = TriggerDocumentId };
106+
MockEngineScheduler.Setup(x => x.DeleteTrigger(expected));
107+
MockElasticRepo.Setup(x => x.SelectById<TriggerStub>(TriggerDocumentId)).Returns(expected);
108+
MockElasticRepo.Setup(x => x.Delete<TriggerStub>(TriggerDocumentId));
109+
110+
Subject.Delete(TriggerDocumentId);
111+
112+
MockElasticRepo.Verify(x => x.SelectById<TriggerStub>(TriggerDocumentId), Times.Once);
113+
MockElasticRepo.Verify(x => x.Delete<TriggerStub>(TriggerDocumentId), Times.Once);
114+
MockEngineScheduler.Verify(x => x.DeleteTrigger(expected), Times.Once);
115+
}
116+
117+
[Test]
118+
public void ShouldReturnNotFoundAndNotAttemptToDeleteTriggerIfItDoesNotExist()
119+
{
120+
MockElasticRepo.Setup(x => x.SelectById<TriggerStub>(TriggerDocumentId));
121+
122+
var actual = Subject.Delete(TriggerDocumentId);
123+
124+
Assert.That(actual, Is.TypeOf(typeof(NotFoundResult)));
125+
MockElasticRepo.Verify(x => x.Delete<TriggerStub>(TriggerDocumentId), Times.Never);
126+
MockEngineScheduler.Verify(x => x.DeleteTrigger(It.IsAny<TriggerStub>()), Times.Never);
127+
}
128+
}
129+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using IntegrationEngine.Model;
2+
using System;
3+
using System.Collections.Generic;
4+
5+
namespace IntegrationEngine.Tests.Api
6+
{
7+
public class TriggerStub : IIntegrationJobTrigger
8+
{
9+
public string JobType { get; set; }
10+
public int StateId { get; set; }
11+
public string StateDescription { get { return StateId.ToString(); } }
12+
public IDictionary<string, string> Parameters { get; set; }
13+
public string Id { get; set; }
14+
15+
public TriggerStub()
16+
{
17+
}
18+
}
19+
}
20+

IntegrationEngine.Tests/IntegrationEngine.Tests.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,14 @@
8585
</Reference>
8686
</ItemGroup>
8787
<ItemGroup>
88-
<Compile Include="Api\Controllers\CronTriggerControllerTest.cs" />
8988
<Compile Include="EngineHostConfigurationTest.cs" />
9089
<Compile Include="Properties\AssemblyInfo.cs" />
9190
<Compile Include="Scheduler\EngineSchedulerTest.cs" />
9291
<Compile Include="Api\Controllers\JobTypeControllerTest.cs" />
9392
<Compile Include="Api\Controllers\TimeZoneControllerTest.cs" />
94-
<Compile Include="Api\Controllers\SimpleTriggerControllerTest.cs" />
9593
<Compile Include="IntegrationJobStub.cs" />
94+
<Compile Include="Api\TriggerControllerBaseTest.cs" />
95+
<Compile Include="Api\TriggerStub.cs" />
9696
</ItemGroup>
9797
<ItemGroup>
9898
<None Include="..\configuration\IntegrationEngine.json">

IntegrationEngine/Api/TriggerControllerBase.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
using System.Web.Http.Cors;
99
using System.Web.Http.Description;
1010

11-
namespace IntegrationEngine.Api.Controllers
11+
namespace IntegrationEngine.Api
1212
{
1313
public class TriggerControllerBase<T> : ApiController where T: class, IIntegrationJobTrigger
1414
{
@@ -20,7 +20,7 @@ public TriggerControllerBase()
2020

2121

2222
// GET api/T
23-
public IEnumerable<T> GetList()
23+
public IEnumerable<T> GetCollection()
2424
{
2525
return Repository.SelectAll<T>();
2626
}
@@ -43,9 +43,9 @@ public IHttpActionResult Put(string id, T trigger)
4343
return BadRequest();
4444
if (!ModelState.IsValid)
4545
BadRequest(ModelState);
46-
Repository.Update(trigger);
47-
EngineScheduler.ScheduleJobWithTrigger(trigger);
48-
return Ok(Repository.SelectById<T>(trigger.Id));
46+
var updatedTrigger = Repository.Update(trigger);
47+
EngineScheduler.ScheduleJobWithTrigger(updatedTrigger);
48+
return Ok(updatedTrigger);
4949
}
5050

5151
// POST api/T

0 commit comments

Comments
 (0)