88 lines
2.6 KiB
C#
88 lines
2.6 KiB
C#
using FastEndpoints;
|
|
using Microsoft.AspNetCore.Http;
|
|
using MissionControl.Domain.Entities;
|
|
using MissionControl.Server.Endpoints.Missions.MissionLaunches;
|
|
using Shouldly;
|
|
|
|
namespace MissionControl.Server.Tests.Endpoints.Missions.MissionLaunches;
|
|
|
|
public class CreateMissionLaunchTests
|
|
{
|
|
[Fact]
|
|
public async Task Returns_not_found_when_requested_mission_does_not_exist()
|
|
{
|
|
using var database = new TestDatabase();
|
|
var endpoint = Factory.Create<CreateMissionLaunch>(database.Context);
|
|
var request = new CreateMissionLaunchRequest
|
|
{
|
|
MissionId = Guid.NewGuid(),
|
|
ScheduledFor = DateTimeOffset.UtcNow,
|
|
Status = MissionLaunchStatus.Pending,
|
|
};
|
|
|
|
await endpoint.HandleAsync(request, CancellationToken.None);
|
|
|
|
endpoint.HttpContext.Response.StatusCode.ShouldBe(StatusCodes.Status404NotFound);
|
|
}
|
|
|
|
[Fact]
|
|
public void Rejects_empty_mission_id_guid()
|
|
{
|
|
var validator = new CreateMissionLaunchRequestValidator();
|
|
|
|
var result = validator.Validate(
|
|
new CreateMissionLaunchRequest
|
|
{
|
|
MissionId = Guid.Empty,
|
|
ScheduledFor = default,
|
|
Status = MissionLaunchStatus.Pending,
|
|
}
|
|
);
|
|
|
|
result.IsValid.ShouldBeFalse();
|
|
result.Errors.ShouldContain(e =>
|
|
e.PropertyName == nameof(CreateMissionLaunchRequest.MissionId)
|
|
);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Creates_mission_launch_when_request_is_valid_and_mission_exists()
|
|
{
|
|
var utcNow = DateTimeOffset.UtcNow;
|
|
|
|
using var database = new TestDatabase();
|
|
var mission = await createMission(database);
|
|
|
|
var endpoint = Factory.Create<CreateMissionLaunch>(database.Context);
|
|
var request = new CreateMissionLaunchRequest
|
|
{
|
|
MissionId = mission.Id,
|
|
ScheduledFor = utcNow,
|
|
Status = MissionLaunchStatus.Cancelled,
|
|
};
|
|
|
|
await endpoint.HandleAsync(request, CancellationToken.None);
|
|
|
|
var response = endpoint.Response;
|
|
|
|
endpoint.HttpContext.Response.StatusCode.ShouldBe(StatusCodes.Status200OK);
|
|
response.Id.ShouldNotBe(Guid.Empty);
|
|
response.ScheduledFor.ShouldBe(utcNow);
|
|
response.Status.ShouldBe(MissionLaunchStatus.Cancelled);
|
|
}
|
|
|
|
private static async Task<Mission> createMission(TestDatabase database)
|
|
{
|
|
var mission = new Mission
|
|
{
|
|
Name = "new mission",
|
|
Description = "mission description",
|
|
};
|
|
|
|
database.Context.Missions.Add(mission);
|
|
await database.Context.SaveChangesAsync();
|
|
|
|
return mission;
|
|
}
|
|
}
|