delivery: follow the code standards883ec1c13 days ago73 lines · 2.3 KB | 1 | package main |
| 2 | |
| 3 | import ( |
| 4 | "encoding/json" |
| 5 | "net/http" |
| 6 | "net/http/httptest" |
| 7 | "strings" |
| 8 | "testing" |
| 9 | ) |
| 10 | |
| 11 | func TestRelaySenderPostsTheProxyTransportBody(t * |
| 12 | var got map[string |
| 13 | relay := httptest. |
| 14 | if ct := r |
| 15 | t.Errorf("Content-Type = |
| 16 | } |
| 17 | if err := json |
| 18 | t.Error(err |
| 19 | } |
| 20 | })) |
| 21 | defer relay.Close() |
| 22 | |
| 23 | s := relaySender |
| 24 | job := Job |
| 25 | if err := s |
| 26 | t.Fatal(err |
| 27 | } |
| 28 | |
| 29 | want := map[string |
| 30 | "to": "bob@example.com", |
| 31 | "htmlBody": "<p>Hi</p>", |
| 32 | } |
| 33 | for k, v |
| 34 | if got[k] |
| 35 | t.Errorf("%s |
| 36 | } |
| 37 | } |
| 38 | } |
| 39 | |
| 40 | func TestRelaySenderFailsOnErrorStatus(t * |
| 41 | relay := httptest. |
| 42 | http.Error(w |
| 43 | })) |
| 44 | defer relay.Close() |
| 45 | |
| 46 | s := relaySender |
| 47 | err := s. |
| 48 | if err == nil |
| 49 | t.Errorf("err = |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | func TestRelaySenderRefusesWithoutAUsableJob(t * |
| 54 | tests := []struct |
| 55 | name string |
| 56 | url string |
| 57 | payload string |
| 58 | want string |
| 59 | }{ |
| 60 | {"no relay configured", "", |
| 61 | {"payload is not an email", "http://relay.invalid" |
| 62 | {"relay unreachable", "http://127.0.0.1:1" |
| 63 | } |
| 64 | for _, tt |
| 65 | t.Run(tt |
| 66 | s := relaySender |
| 67 | err := s. |
| 68 | if err == nil |
| 69 | t.Errorf("err = |
| 70 | } |
| 71 | }) |
| 72 | } |
| 73 | } |
testing
.
T
)
{
]
string
NewServer
(
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
.
Header
.
Get
(
"
Content-Type
"
)
;
ct
!=
"
application/json
"
{
%q
"
,
ct
)
.
NewDecoder
(
r
.
Body
)
.
Decode
(
&
got
)
;
err
!=
nil
{
)
{
url
:
relay
.
URL
,
secret
:
"
s3cret
"
,
from
:
"
Ghost <noreply@ghost.local>
"
,
client
:
relay
.
Client
()}
{
Kind
:
"
email
"
,
Payload
:
json
.
RawMessage
(
`
{"to":"bob@example.com","subject":"Hi","html":"<p>Hi</p>","text":"Hi"}
`
)}
.
send
(
t
.
Context
()
,
job
)
;
err
!=
nil
{
)
]
string
{
"
from
"
:
"
Ghost <noreply@ghost.local>
"
,
"
subject
"
:
"
Hi
"
,
"
textBody
"
:
"
Hi
"
,
"
secret
"
:
"
s3cret
"
,
:=
range
want
{
!=
v
{
=
%q
, want
%q
"
,
k
,
got
[
k
]
,
v
)
testing
.
T
)
{
NewServer
(
http
.
HandlerFunc
(
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
,
"
relay down
"
,
http
.
StatusBadGateway
)
{
url
:
relay
.
URL
,
client
:
relay
.
Client
()}
send
(
t
.
Context
()
,
Job
{
Payload
:
json
.
RawMessage
(
`
{}
`
)})
||
!
strings
.
Contains
(
err
.
Error
()
,
"
502
"
)
||
!
strings
.
Contains
(
err
.
Error
()
,
"
relay down
"
)
{
%v
, want it to name the 502 and the relay's message
"
,
err
)
testing
.
T
)
{
{
`
{}
`
,
"
EMAIL_PROXY is not set
"
}
,
,
`
[]
`
,
"
decode email payload
"
}
,
,
`
{}
`
,
"
connect
"
}
,
:=
range
tests
{
.
name
,
func
(
t
*
testing
.
T
)
{
{
url
:
tt
.
url
,
client
:
&
http
.
Client
{}}
send
(
t
.
Context
()
,
Job
{
Payload
:
json
.
RawMessage
(
tt
.
payload
)})
||
!
strings
.
Contains
(
err
.
Error
()
,
tt
.
want
)
{
%v
, want it to mention
%q
"
,
err
,
tt
.
want
)