Skip to content

Commit

Permalink
Initial import
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremydmiller committed Aug 2, 2023
1 parent 14b53b8 commit 84ad082
Show file tree
Hide file tree
Showing 44 changed files with 2,079 additions and 2 deletions.
13 changes: 13 additions & 0 deletions .idea/.idea.Helpdesk/.idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .idea/.idea.Helpdesk/.idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions .idea/.idea.Helpdesk/.idea/aws.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/.idea.Helpdesk/.idea/indexLayout.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/.idea.Helpdesk/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Helpdesk.Api.Tests/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
global using System.Threading.Tasks;
global using System;
27 changes: 27 additions & 0 deletions Helpdesk.Api.Tests/Helpdesk.Api.Tests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.11.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.3" />
<PackageReference Include="NSubstitute" Version="5.0.0" />
<PackageReference Include="xunit" Version="2.5.0" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="7.0.9" />
<PackageReference Include="Ogooreck" Version="0.6.0" />
<PackageReference Include="Bogus" Version="34.0.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\Helpdesk.Api\Helpdesk.Api.csproj" />
</ItemGroup>
</Project>
40 changes: 40 additions & 0 deletions Helpdesk.Api.Tests/Incidents/AcknowledgeResolutionIncidentTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using Helpdesk.Api.Incidents;
using Helpdesk.Api.Tests.Incidents.Fixtures;
using Xunit;
using static Ogooreck.API.ApiSpecification;

namespace Helpdesk.Api.Tests.Incidents;

public class AcknowledgeResolutionIncidentTests: IClassFixture<ApiWithResolvedIncident>
{
[Fact]
[Trait("Category", "Acceptance")]
public async Task ResolveCommand_Succeeds()
{
await API
.Given(
URI($"/api/customers/{API.Incident.CustomerId}/incidents/{API.Incident.Id}/acknowledge"),
HEADERS(IF_MATCH(2))
)
.When(POST)
.Then(OK);

await API
.Given(URI($"/api/incidents/{API.Incident.Id}"))
.When(GET)
.Then(
OK,
RESPONSE_BODY(
API.Incident with
{
Status = IncidentStatus.ResolutionAcknowledgedByCustomer,
Version = 3
}
)
);
}

private readonly ApiWithResolvedIncident API;

public AcknowledgeResolutionIncidentTests(ApiWithResolvedIncident api) => API = api;
}
40 changes: 40 additions & 0 deletions Helpdesk.Api.Tests/Incidents/AssignAgentTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using Helpdesk.Api.Tests.Incidents.Fixtures;
using Xunit;
using static Ogooreck.API.ApiSpecification;

namespace Helpdesk.Api.Tests.Incidents;

public class AssignAgentToIncidentTests: IClassFixture<ApiWithLoggedIncident>
{
[Fact]
[Trait("Category", "Acceptance")]
public async Task AssignAgentCommand_ChangesIncidentCategory()
{
await API
.Given(
URI($"/api/agents/{agentId}/incidents/{API.Incident.Id}/assign"),
HEADERS(IF_MATCH(1))
)
.When(POST)
.Then(OK);

await API
.Given(URI($"/api/incidents/{API.Incident.Id}"))
.When(GET)
.Then(
OK,
RESPONSE_BODY(
API.Incident with
{
AgentId = agentId,
Version = 2
}
)
);
}

private readonly Guid agentId = Guid.NewGuid();
private readonly ApiWithLoggedIncident API;

public AssignAgentToIncidentTests(ApiWithLoggedIncident api) => API = api;
}
45 changes: 45 additions & 0 deletions Helpdesk.Api.Tests/Incidents/CategoriseIncidentTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using Bogus;
using Helpdesk.Api.Incidents;
using Helpdesk.Api.Tests.Incidents.Fixtures;
using Xunit;
using static Ogooreck.API.ApiSpecification;

namespace Helpdesk.Api.Tests.Incidents;

public class CategoriseIncidentTests: IClassFixture<ApiWithLoggedIncident>
{
[Fact]
[Trait("Category", "Acceptance")]
public async Task CategoriseCommand_ChangesIncidentCategory()
{
await API
.Given(
URI($"/api/agents/{agentId}/incidents/{API.Incident.Id}/category"),
BODY(new CategoriseIncidentRequest(category)),
HEADERS(IF_MATCH(1))
)
.When(POST)
.Then(OK);

await API
.Given(URI($"/api/incidents/{API.Incident.Id}"))
.When(GET)
.Then(
OK,
RESPONSE_BODY(
API.Incident with
{
Category = category,
Version = 2
}
)
);
}

private readonly Guid agentId = Guid.NewGuid();
private readonly IncidentCategory category = new Faker().PickRandom<IncidentCategory>();
private readonly ApiWithLoggedIncident API;

public CategoriseIncidentTests(ApiWithLoggedIncident api) => API = api;

}
41 changes: 41 additions & 0 deletions Helpdesk.Api.Tests/Incidents/CloseIncidentTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using Helpdesk.Api.Incidents;
using Helpdesk.Api.Tests.Incidents.Fixtures;
using Xunit;
using static Ogooreck.API.ApiSpecification;

namespace Helpdesk.Api.Tests.Incidents;

public class CloseIncidentTests: IClassFixture<ApiWithAcknowledgedIncident>
{
[Fact]
[Trait("Category", "Acceptance")]
public async Task ResolveCommand_Succeeds()
{
await API
.Given(
URI($"/api/agents/{agentId}/incidents/{API.Incident.Id}/close"),
HEADERS(IF_MATCH(3))
)
.When(POST)
.Then(OK);

await API
.Given(URI($"/api/incidents/{API.Incident.Id}"))
.When(GET)
.Then(
OK,
RESPONSE_BODY(
API.Incident with
{
Status = IncidentStatus.Closed,
Version = 4
}
)
);
}

private readonly ApiWithAcknowledgedIncident API;
private Guid agentId = Guid.NewGuid();

public CloseIncidentTests(ApiWithAcknowledgedIncident api) => API = api;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Helpdesk.Api.Incidents.GetIncidentDetails;
using Ogooreck.API;
using Xunit;

namespace Helpdesk.Api.Tests.Incidents.Fixtures;

public class ApiWithAcknowledgedIncident: ApiSpecification<Program>, IAsyncLifetime
{
public async Task InitializeAsync()
{
Incident = await this.AcknowledgedIncident();
}

public IncidentDetails Incident { get; set; } = default!;

public Task DisposeAsync() => Task.CompletedTask;
}

15 changes: 15 additions & 0 deletions Helpdesk.Api.Tests/Incidents/Fixtures/ApiWithLoggedIncident.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Helpdesk.Api.Incidents.GetIncidentDetails;
using Ogooreck.API;
using Xunit;

namespace Helpdesk.Api.Tests.Incidents.Fixtures;

public class ApiWithLoggedIncident: ApiSpecification<Program>, IAsyncLifetime
{
public async Task InitializeAsync()
{
Incident = await this.LoggedIncident();
}
public IncidentDetails Incident { get; protected set; } = default!;
public Task DisposeAsync() => Task.CompletedTask;
}
18 changes: 18 additions & 0 deletions Helpdesk.Api.Tests/Incidents/Fixtures/ApiWithResolvedIncident.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using Helpdesk.Api.Incidents.GetIncidentDetails;
using Ogooreck.API;
using Xunit;

namespace Helpdesk.Api.Tests.Incidents.Fixtures;

public class ApiWithResolvedIncident: ApiSpecification<Program>, IAsyncLifetime
{
public async Task InitializeAsync()
{
Incident = await this.ResolvedIncident();
}

public IncidentDetails Incident { get; set; } = default!;

public Task DisposeAsync() => Task.CompletedTask;
}

Loading

0 comments on commit 84ad082

Please sign in to comment.