-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathGetMissionsControllerTests.cs
More file actions
88 lines (76 loc) · 3.46 KB
/
GetMissionsControllerTests.cs
File metadata and controls
88 lines (76 loc) · 3.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ArmaForces.Boderator.BotService.Features.Missions.DTOs;
using ArmaForces.Boderator.BotService.Tests.TestUtilities.TestBases;
using ArmaForces.Boderator.BotService.Tests.TestUtilities.TestFixtures;
using ArmaForces.Boderator.Core.Tests.TestUtilities;
using AutoFixture;
using CSharpFunctionalExtensions;
using FluentAssertions;
using Xunit;
namespace ArmaForces.Boderator.BotService.Tests.Features.Missions;
[Trait("Category", "Integration")]
public class GetMissionsControllerTests : ApiTestBase
{
public GetMissionsControllerTests(TestApiServiceFixture testApi)
: base(testApi) { }
[Fact]
public async Task GetMission_MissionExists_ReturnsExistingMission()
{
var missionCreateRequest = new MissionCreateRequestDto
{
Title = Fixture.Create<string>(),
Owner = Fixture.Create<string>(),
Description = Fixture.Create<string>()
};
var missionCreateResult = await HttpPostAsync<MissionCreateRequestDto, MissionDto>("api/missions", missionCreateRequest);
var expectedMission = new MissionDto
{
Title = missionCreateResult.Value.Title,
Description = missionCreateRequest.Description,
Owner = missionCreateRequest.Owner,
MissionDate = missionCreateResult.Value.MissionDate,
MissionId = missionCreateResult.Value.MissionId
};
var result = await HttpGetAsync<MissionDto>($"api/missions/{expectedMission.MissionId}");
result.ShouldBeSuccess(expectedMission);
}
[Fact]
public async Task GetMissions_SomeMissionsExist_ReturnsAllMissions()
{
var createdMissions = await CreateSomeMissions(count: 5);
var creationResult = createdMissions.Combine();
creationResult.ShouldBeSuccess();
var expectedMissions = creationResult.Value
.Select(x => new MissionDto
{
Title = x.createdMission.Title,
Description = x.createdMission.Description,
Owner = x.createdMission.Owner,
MissionDate = x.createdMission.MissionDate,
MissionId = x.createdMission.MissionId
})
.ToList();
var result = await HttpGetAsync<List<MissionDto>>($"api/missions");
result.ShouldBeSuccess(x => x.Should().Contain(expectedMissions));
}
private async Task<List<Result<(MissionDto createdMission, MissionCreateRequestDto createRequest)>>> CreateSomeMissions(int count = 1)
{
return await AsyncEnumerable.Range(0, count)
.Select(x => new MissionCreateRequestDto
{
Title = Fixture.Create<string>(),
Owner = Fixture.Create<string>(),
Description = Fixture.Create<string>()
})
.SelectAwait(async createRequest => {
var createResult = await HttpPostAsync<MissionCreateRequestDto, MissionDto>("api/missions", createRequest);
return (createResult, createRequest);
})
.Select(x => x.createResult.IsSuccess
? Result.Success((x.createResult.Value, x.createRequest))
: x.createResult.ConvertFailure<(MissionDto, MissionCreateRequestDto)>())
.ToListAsync();
}
}