-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproblem_test.go
More file actions
70 lines (60 loc) · 2.31 KB
/
problem_test.go
File metadata and controls
70 lines (60 loc) · 2.31 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
package problem_test
import (
"net/http"
"testing"
"github.com/kodeart/go-problem/v2"
"github.com/stretchr/testify/assert"
)
func TestProblem(t *testing.T) {
t.Run("should construct the empty instance", func(t *testing.T) {
p := problem.Problem{}
assert.Empty(t, p.Status)
assert.Empty(t, p.Instance)
assert.Empty(t, p.Detail)
assert.Empty(t, p.Title)
assert.Empty(t, p.Type)
assert.Empty(t, p.Extensions)
})
t.Run("should populate the instance with helper methods", func(t *testing.T) {
p := problem.New().
WithStatus(http.StatusForbidden).
WithType("https://example.com/probs/out-of-credit").
WithTitle("You do not have enough credit.").
WithDetail("Your current balance is 30, but that costs 50.").
WithInstance("/account/12345/msgs/abc").
WithExtension("balance", 30).
WithExtension("accounts", []string{"/account/12345", "/account/67890"})
assert.Equal(t, http.StatusForbidden, p.Status)
assert.Equal(t, "You do not have enough credit.", p.Title)
assert.Equal(t, "Your current balance is 30, but that costs 50.", p.Detail)
assert.Equal(t, "https://example.com/probs/out-of-credit", p.Type)
assert.Equal(t, "/account/12345/msgs/abc", p.Instance)
assert.Equal(t, 30, p.GetExtension("balance"))
assert.Equal(t, []string{"/account/12345", "/account/67890"}, p.GetExtension("accounts"))
})
t.Run("should not read the standard fields", func(t *testing.T) {
p := problem.New().
WithStatus(http.StatusForbidden).
WithType("https://example.com/probs/out-of-credit").
WithTitle("You do not have enough credit.").
WithDetail("Your current balance is 30, but that costs 50.").
WithInstance("/account/12345/msgs/abc")
assert.Nil(t, p.GetExtension("status"))
assert.Nil(t, p.GetExtension("type"))
assert.Nil(t, p.GetExtension("title"))
assert.Nil(t, p.GetExtension("detail"))
assert.Nil(t, p.GetExtension("instance"))
})
t.Run("should return nil for non-existing extension", func(t *testing.T) {
p := problem.Problem{}
assert.Nil(t, p.GetExtension("non-existing-key"))
})
t.Run("should add and remove extensions to instance", func(t *testing.T) {
p := problem.New().
WithExtension("customField", "customValue").
WithExtension("balance", 42).
WithoutExtension("customField")
assert.Nil(t, p.GetExtension("customField"))
assert.Len(t, p.Extensions, 1)
})
}