-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreator_test.go
154 lines (134 loc) · 4.14 KB
/
creator_test.go
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package gotten_test
import (
"crypto/md5"
"encoding/json"
"fmt"
"github.com/Hexilee/gotten"
"github.com/Hexilee/gotten/headers"
"github.com/stretchr/testify/assert"
"io"
"net/http"
"os"
"testing"
"time"
)
type (
SampleService struct {
GetPosts func(params *GetPostsParams) (gotten.Response, error) `path:"/post/{year}/{month}/{day}"`
AddPost func(params *AddPostParams) (gotten.Response, error) `method:"POST" path:"/post/{year}/{month}/{day}"`
AddPostByForm func(params *AddPostByFormParams) (gotten.Response, error) `method:"POST" path:"/post"`
UploadAvatar func(params *UploadAvatarParams) (gotten.Response, error) `method:"POST" path:"/avatar"`
}
GetPostsParams struct {
Year int `type:"path"`
Month int `type:"path"`
Day int `type:"path"`
Page int `type:"query" default:"1"`
Limit int `type:"query" default:"15"`
}
AddPostParams struct {
Year int `type:"path"`
Month int `type:"path"`
Day int `type:"path"`
Post *TestPost `type:"json"`
}
AddPostByFormParams struct {
Year int `type:"form"`
Month int `type:"form"`
Day int `type:"form"`
Post *TestPost `type:"json"`
}
AvatarDescription struct {
Creator string
CreatedAt time.Time
}
UploadAvatarParams struct {
Uid int `type:"part"`
Username string `type:"part"`
Avatar gotten.FilePath `type:"part"`
Description *AvatarDescription `type:"json"`
}
UploadedData struct {
Hash string
Uid int
Username string
Filename string
FileSize int64
Creator string
CreatedAt time.Time
}
)
func TestCreator_Impl(t *testing.T) {
creator, err := gotten.NewBuilder().
SetBaseUrl("https://mock.io").
SetClient(mockClient).
Build()
assert.Nil(t, err)
service := new(SampleService)
assert.Nil(t, creator.Impl(service))
assert.NotNil(t, service.GetPosts)
resp, err := service.GetPosts(&GetPostsParams{2018, 10, 1, 1, 10})
assert.Nil(t, err)
assert.Equal(t, http.StatusOK, resp.StatusCode())
results := make([]TestPost, 0)
assert.Nil(t, resp.Unmarshal(&results))
data, err := json.Marshal(&results)
assert.Nil(t, err)
assert.Equal(t, "[{\"author\":\"Hexilee\",\"title\":\"Start!\",\"content\":\"Hello world!\"}]", string(data))
resp, err = service.AddPost(&AddPostParams{
Year: 2018,
Month: 10,
Day: 1,
Post: &TestPost{"Hexilee", "AddPost Test", "Success!"},
})
assert.Nil(t, err)
assert.Equal(t, http.StatusCreated, resp.StatusCode())
var addedResult AddedData
assert.Nil(t, resp.Unmarshal(&addedResult))
assert.True(t, addedResult.Success)
assert.Equal(t, 2018, addedResult.Year)
assert.Equal(t, 10, addedResult.Month)
assert.Equal(t, 1, addedResult.Day)
assert.Equal(t, 2, addedResult.Order)
resp, err = service.AddPostByForm(&AddPostByFormParams{
Year: 2018,
Month: 10,
Day: 1,
Post: &TestPost{"Hexilee", "AddPostByForm Test", "Success!"},
})
assert.Nil(t, err)
assert.Equal(t, http.StatusCreated, resp.StatusCode())
assert.Nil(t, resp.Unmarshal(&addedResult))
assert.True(t, addedResult.Success)
assert.Equal(t, 2018, addedResult.Year)
assert.Equal(t, 10, addedResult.Month)
assert.Equal(t, 1, addedResult.Day)
assert.Equal(t, 3, addedResult.Order)
now := time.Now()
resp, err = service.UploadAvatar(&UploadAvatarParams{
Uid: 1,
Username: "Hexilee",
Avatar: "testAssets/avatar.jpg",
Description: &AvatarDescription{
Creator: "Hexilee",
CreatedAt: now,
},
})
var uploadedData UploadedData
assert.Nil(t, err)
assert.Equal(t, http.StatusCreated, resp.StatusCode())
assert.Equal(t, headers.MIMEApplicationJSONCharsetUTF8, resp.ContentType())
assert.Nil(t, resp.Unmarshal(&uploadedData))
assert.Equal(t, 1, uploadedData.Uid)
assert.Equal(t, "Hexilee", uploadedData.Username)
assert.Equal(t, "avatar.jpg", uploadedData.Filename)
assert.Equal(t, "Hexilee", uploadedData.Creator)
assert.True(t, now.Equal(uploadedData.CreatedAt))
file, err := os.Open("testAssets/avatar.jpg")
assert.Nil(t, err)
h := md5.New()
n, err := io.Copy(h, file)
assert.Nil(t, err)
assert.Equal(t, n, uploadedData.FileSize)
assert.Equal(t, fmt.Sprintf("%x", h.Sum(nil)), uploadedData.Hash)
}