-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathApiTest.cs
More file actions
104 lines (81 loc) · 3.05 KB
/
ApiTest.cs
File metadata and controls
104 lines (81 loc) · 3.05 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using Xunit;
using NSubstitute;
using FreeAwait;
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;
using Void = FreeAwait.Void;
using System.Linq;
namespace MinimalWebApi.Tests;
public class ApiTest
{
public ApiTest()
{
_runner = Substitute.For<MockRunner>();
_runner.Run(Arg.Any<Locate>()).Returns(args => Located(((Locate)args[0]).Item));
}
[Fact]
public async Task GetExisting()
{
_runner.Run(new Read(_specimen[0].Id)).Returns(_specimen[0]);
_runner.Run(new HttpSteps.Ok(Located(_specimen[0]))).Returns(_result);
Assert.Equal(_result, await Api.Get(_specimen[0].Id).Use(_runner));
}
[Fact]
public async Task GetAll()
{
_runner.Run(new ReadAll()).Returns(_specimen);
Assert.Equal(_specimen.Select(Located), (await Api.Get().Use(_runner)).ToEnumerable());
}
[Fact]
public async Task GetNonExisting()
{
_runner.Run(new Read(_specimen[0].Id)).Returns((Todo?)null);
_runner.Run(Arg.Any<HttpSteps.NotFound>()).Returns(_result);
Assert.Equal(_result, await Api.Get(_specimen[0].Id).Use(_runner));
}
[Fact]
public async Task PostNew()
{
_runner.Run(new Create(_specimen[0].Title, default)).Returns(_specimen[0]);
Assert.Equal(Located(_specimen[0]), await Api.Post(new Create(_specimen[0].Title, default)).Use(_runner));
}
[Fact]
public async Task DeleteOne()
{
_runner.Run(new Delete(_specimen[0].Id)).Returns(_specimen[0]);
_runner.Run(new HttpSteps.Ok(Located(_specimen[0]))).Returns(_result);
Assert.Equal(_result, await Api.Delete(_specimen[0].Id).Use(_runner));
}
[Fact]
public async Task DeleteAll()
{
_runner.Run(new DeleteAll()).Returns(default(Void));
_runner.Run(Arg.Any<HttpSteps.NoContent>()).Returns(_result);
Assert.Equal(_result, await Api.Delete().Use(_runner));
}
[Fact]
public async Task PatchExisting()
{
var patch = new Patch(_specimen[0].Title, _specimen[0].Completed, _specimen[0].Order);
_runner.Run(new Update(_specimen[0].Id, patch)).Returns(_specimen[0]);
_runner.Run(new HttpSteps.Ok(Located(_specimen[0]))).Returns(_result);
Assert.Equal(_result, await Api.Patch(_specimen[0].Id, patch).Use(_runner));
}
[Fact]
public async Task PatchNonExisting()
{
var patch = new Patch(_specimen[0].Title, _specimen[0].Completed, _specimen[0].Order);
_runner.Run(new Update(_specimen[0].Id, patch)).Returns((Todo?)null);
_runner.Run(Arg.Any<HttpSteps.NotFound>()).Returns(_result);
Assert.Equal(_result, await Api.Patch(_specimen[0].Id, patch).Use(_runner));
}
private readonly Todo[] _specimen =
{
new(42, "Foo", false),
new(123, "Bar", true),
new(321, "Baz", false, 5)
};
private Todo Located(Todo item) => item with { Url = item.Id.ToString() };
private readonly MockRunner _runner = Substitute.For<MockRunner>();
private readonly IResult _result = Substitute.For<IResult>();
}