Skip to content

Commit acc669b

Browse files
authored
Fix ListEmailMessages (#2)
1 parent 8d35ec1 commit acc669b

File tree

12 files changed

+221
-8
lines changed

12 files changed

+221
-8
lines changed

.codecov.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ignore:
2+
- "mock_*.go" # Ignore all generated mocks

.mockery.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
with-expecter: true
2+
packages:
3+
github.com/temp-mail-io/temp-mail-go:
4+
interfaces:
5+
doer:
6+
config:
7+
filename: mock_doer.go
8+
dir: .
9+
mockname: mockDoer
10+
inpackage: true

.pre-commit-config.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,14 @@ repos:
1414
- id: golangci-lint
1515
entry: golangci-lint run --fix
1616
pass_filenames: false
17+
18+
- repo: local
19+
hooks:
20+
- id: go-generate
21+
name: go generate
22+
entry: go generate ./...
23+
language: golang
24+
language_version: 1.23.4
25+
pass_filenames: false
26+
additional_dependencies:
27+
- github.com/vektra/mockery/[email protected]

README.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ package main
3838

3939
import (
4040
"context"
41-
"fmt"
4241
"log"
4342

4443
"github.com/temp-mail-io/temp-mail-go"
@@ -48,12 +47,23 @@ func main() {
4847
// Replace with your real API key
4948
client := tempmail.NewClient("YOUR_API_KEY", nil)
5049

51-
domains, _, err := client.ListDomains(context.Background())
50+
email, _, err := client.CreateEmail(context.Background(), tempmail.CreateEmailOptions{})
5251
if err != nil {
53-
log.Fatalf("Error listing domains: %v", err)
52+
log.Fatalf("Failed to create temporary email: %v", err)
5453
}
5554

56-
fmt.Println("Available domains:", domains)
55+
// Use the created temporary email on the website, service, etc...
56+
...
57+
58+
// Fetch messages for the created email
59+
data, _, err := client.ListEmailMessages(context.Background(), email.Email)
60+
if err != nil {
61+
log.Fatalf("Failed to fetch messages: %v", err)
62+
}
63+
64+
for _, m := range data.Messages {
65+
// Iterate over messages
66+
}
5767
}
5868
```
5969

client_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package tempmail
22

33
import (
4+
"bytes"
45
"context"
56
"io"
67
"net/http"
8+
"os"
79
"testing"
810

911
"github.com/stretchr/testify/assert"
@@ -55,3 +57,18 @@ func TestNewRequest(t *testing.T) {
5557
assert.JSONEq(t, `{"domain":"example.com"}`, string(b))
5658
})
5759
}
60+
61+
// readFile reads the file from the given path.
62+
func readFile(t *testing.T, path string) []byte {
63+
b, err := os.ReadFile(path)
64+
require.NoError(t, err)
65+
return b
66+
}
67+
68+
// newTestResponse creates a new test response with the given status code and body.
69+
func newTestResponse(statusCode int, body []byte) *http.Response {
70+
return &http.Response{
71+
StatusCode: statusCode,
72+
Body: io.NopCloser(bytes.NewReader(body)),
73+
}
74+
}

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ require github.com/stretchr/testify v1.10.0
77
require (
88
github.com/davecgh/go-spew v1.1.1 // indirect
99
github.com/pmezard/go-difflib v1.0.0 // indirect
10+
github.com/stretchr/objx v0.5.2 // indirect
1011
gopkg.in/yaml.v3 v3.0.1 // indirect
1112
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
22
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
33
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
44
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
5+
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
6+
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
57
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
68
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
79
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=

list_email_messages.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,16 @@ type ListEmailMessagesAttachmentResponse struct {
4646
}
4747

4848
// ListEmailMessages returns all messages for the email address.
49-
func (c *Client) ListEmailMessages(ctx context.Context, email string) ([]ListEmailMessagesResponse, *Response, error) {
49+
func (c *Client) ListEmailMessages(ctx context.Context, email string) (ListEmailMessagesResponse, *Response, error) {
5050
req, err := c.newRequest(ctx, http.MethodGet, fmt.Sprintf("/v1/emails/%s/messages", email), nil)
5151
if err != nil {
52-
return nil, nil, err
52+
return ListEmailMessagesResponse{}, nil, err
5353
}
5454

55-
var resp []ListEmailMessagesResponse
55+
var resp ListEmailMessagesResponse
5656
r, err := c.do(req, &resp)
5757
if err != nil {
58-
return nil, nil, err
58+
return ListEmailMessagesResponse{}, nil, err
5959
}
6060

6161
return resp, r, nil

list_email_messages_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package tempmail
2+
3+
import (
4+
"context"
5+
"testing"
6+
"time"
7+
8+
"github.com/stretchr/testify/assert"
9+
"github.com/stretchr/testify/mock"
10+
"github.com/stretchr/testify/require"
11+
)
12+
13+
func TestClient_ListEmailMessages(t *testing.T) {
14+
mDoer := newMockDoer(t)
15+
mDoer.EXPECT().Do(mock.Anything).Return(newTestResponse(200, readFile(t, "testdata/list_email_messages.json")), nil)
16+
17+
c := newClient()
18+
c.doer = mDoer
19+
r, resp, err := c.ListEmailMessages(context.Background(), "[email protected]")
20+
require.NoError(t, err)
21+
assert.Equal(t, 200, resp.StatusCode)
22+
require.Len(t, r.Messages, 1)
23+
assert.Equal(t, ListEmailMessagesMessageResponse{
24+
ID: "01JE97FT950QRPDYGDXJ4R43QR",
25+
26+
27+
CC: []string{"[email protected]"},
28+
Subject: "Your account has been created",
29+
BodyText: "Welcome to our service! Your account has been created successfully.",
30+
BodyHTML: "<p>Welcome to our service! Your account has been created successfully.</p>",
31+
CreatedAt: time.Date(2022, 1, 31, 22, 0, 0, 0, time.UTC),
32+
Attachments: []ListEmailMessagesAttachmentResponse{
33+
{
34+
ID: "01JE97K1PBYVGKY0PVE3KXSBF9",
35+
Name: "invoice.pdf",
36+
Size: 5120,
37+
},
38+
},
39+
}, r.Messages[0])
40+
}

mock_doer.go

Lines changed: 94 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)