Skip to content

Commit

Permalink
Add test case
Browse files Browse the repository at this point in the history
  • Loading branch information
osamingo committed May 5, 2021
1 parent 4b9ca2e commit 9cc30f6
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 26 deletions.
1 change: 1 addition & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ issues:
- exhaustivestruct
- cyclop
- gochecknoglobals
- dupl
2 changes: 1 addition & 1 deletion kenall.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ func (cli *Client) GetAddress(ctx context.Context, postalCode string) (*GetAddre
return nil, ErrInvalidArgument
}

const path = "/postalcode/"
const path = "/postalCode/"

req, err := http.NewRequestWithContext(ctx, http.MethodGet, cli.Endpoint+path+postalCode, nil)
if err != nil {
Expand Down
105 changes: 80 additions & 25 deletions kenall_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,23 +80,23 @@ func TestClient_GetAddress(t *testing.T) {
endpoint string
token string
ctx context.Context
postalcode string
postalCode string
checkAsError bool
wantError error
wantJISX0402 string
}{
"Normal case": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalcode: "1008105", checkAsError: false, wantError: nil, wantJISX0402: "13101"},
"Invalid postalcode": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalcode: "alphabet", checkAsError: false, wantError: kenall.ErrInvalidArgument, wantJISX0402: ""},
"Not found": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalcode: "0000000", checkAsError: false, wantError: kenall.ErrNotFound, wantJISX0402: ""},
"Unauthorized": {endpoint: srv.URL, token: "bad_token", ctx: context.Background(), postalcode: "0000000", checkAsError: false, wantError: kenall.ErrUnauthorized, wantJISX0402: ""},
"Payment Required": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalcode: "4020000", checkAsError: false, wantError: kenall.ErrPaymentRequired, wantJISX0402: ""},
"Forbidden": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalcode: "4030000", checkAsError: false, wantError: kenall.ErrForbidden, wantJISX0402: ""},
"Internal server error": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalcode: "5000000", checkAsError: false, wantError: kenall.ErrInternalServerError, wantJISX0402: ""},
"Bad gateway": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalcode: "5020000", checkAsError: false, wantError: kenall.ErrBadGateway, wantJISX0402: ""},
"Unknown status code": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalcode: "5030000", checkAsError: true, wantError: fmt.Errorf(""), wantJISX0402: ""},
"Wrong endpoint": {endpoint: "", token: "opencollector", ctx: context.Background(), postalcode: "0000000", checkAsError: true, wantError: &url.Error{}, wantJISX0402: ""},
"Wrong response": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalcode: "0000001", checkAsError: true, wantError: &json.MarshalerError{}, wantJISX0402: ""},
"Nil context": {endpoint: srv.URL, token: "opencollector", ctx: nil, postalcode: "0000000", checkAsError: true, wantError: errors.New("net/http: nil Context"), wantJISX0402: ""},
"Normal case": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalCode: "1008105", checkAsError: false, wantError: nil, wantJISX0402: "13101"},
"Invalid postal code": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalCode: "alphabet", checkAsError: false, wantError: kenall.ErrInvalidArgument, wantJISX0402: ""},
"Not found": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalCode: "0000000", checkAsError: false, wantError: kenall.ErrNotFound, wantJISX0402: ""},
"Unauthorized": {endpoint: srv.URL, token: "bad_token", ctx: context.Background(), postalCode: "0000000", checkAsError: false, wantError: kenall.ErrUnauthorized, wantJISX0402: ""},
"Payment Required": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalCode: "4020000", checkAsError: false, wantError: kenall.ErrPaymentRequired, wantJISX0402: ""},
"Forbidden": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalCode: "4030000", checkAsError: false, wantError: kenall.ErrForbidden, wantJISX0402: ""},
"Internal server error": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalCode: "5000000", checkAsError: false, wantError: kenall.ErrInternalServerError, wantJISX0402: ""},
"Bad gateway": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalCode: "5020000", checkAsError: false, wantError: kenall.ErrBadGateway, wantJISX0402: ""},
"Unknown status code": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalCode: "5030000", checkAsError: true, wantError: fmt.Errorf(""), wantJISX0402: ""},
"Wrong endpoint": {endpoint: "", token: "opencollector", ctx: context.Background(), postalCode: "0000000", checkAsError: true, wantError: &url.Error{}, wantJISX0402: ""},
"Wrong response": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), postalCode: "0000001", checkAsError: true, wantError: &json.MarshalerError{}, wantJISX0402: ""},
"Nil context": {endpoint: srv.URL, token: "opencollector", ctx: nil, postalCode: "0000000", checkAsError: true, wantError: errors.New("net/http: nil Context"), wantJISX0402: ""},
}

for name, c := range cases {
Expand All @@ -110,7 +110,7 @@ func TestClient_GetAddress(t *testing.T) {
t.Error(err)
}

res, err := cli.GetAddress(c.ctx, c.postalcode)
res, err := cli.GetAddress(c.ctx, c.postalCode)
if c.checkAsError && !errors.As(err, &c.wantError) {
t.Errorf("give: %v, want: %v", err, c.wantError)
} else if !errors.Is(err, c.wantError) {
Expand All @@ -123,6 +123,61 @@ func TestClient_GetAddress(t *testing.T) {
}
}

func TestClient_GetCity(t *testing.T) {
t.Parallel()

srv := runTestingServer(t)
t.Cleanup(func() {
srv.Close()
})

cases := map[string]struct {
endpoint string
token string
ctx context.Context
prefectureCode string
checkAsError bool
wantError error
wantJISX0402 string
}{
"Normal case": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), prefectureCode: "13", checkAsError: false, wantError: nil, wantJISX0402: "13101"},
"Invalid prefecture code": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), prefectureCode: "alphabet", checkAsError: false, wantError: kenall.ErrInvalidArgument, wantJISX0402: ""},
"Not found": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), prefectureCode: "48", checkAsError: false, wantError: kenall.ErrNotFound, wantJISX0402: ""},
"Unauthorized": {endpoint: srv.URL, token: "bad_token", ctx: context.Background(), prefectureCode: "00", checkAsError: false, wantError: kenall.ErrUnauthorized, wantJISX0402: ""},
"Payment Required": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), prefectureCode: "90", checkAsError: false, wantError: kenall.ErrPaymentRequired, wantJISX0402: ""},
"Forbidden": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), prefectureCode: "91", checkAsError: false, wantError: kenall.ErrForbidden, wantJISX0402: ""},
"Internal server error": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), prefectureCode: "92", checkAsError: false, wantError: kenall.ErrInternalServerError, wantJISX0402: ""},
"Bad gateway": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), prefectureCode: "93", checkAsError: false, wantError: kenall.ErrBadGateway, wantJISX0402: ""},
"Unknown status code": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), prefectureCode: "94", checkAsError: true, wantError: fmt.Errorf(""), wantJISX0402: ""},
"Wrong endpoint": {endpoint: "", token: "opencollector", ctx: context.Background(), prefectureCode: "00", checkAsError: true, wantError: &url.Error{}, wantJISX0402: ""},
"Wrong response": {endpoint: srv.URL, token: "opencollector", ctx: context.Background(), prefectureCode: "95", checkAsError: true, wantError: &json.MarshalerError{}, wantJISX0402: ""},
"Nil context": {endpoint: srv.URL, token: "opencollector", ctx: nil, prefectureCode: "00", checkAsError: true, wantError: errors.New("net/http: nil Context"), wantJISX0402: ""},
}

for name, c := range cases {
c := c

t.Run(name, func(t *testing.T) {
t.Parallel()

cli, err := kenall.NewClient(c.token, kenall.WithEndpoint(c.endpoint))
if err != nil {
t.Error(err)
}

res, err := cli.GetCity(c.ctx, c.prefectureCode)
if c.checkAsError && !errors.As(err, &c.wantError) {
t.Errorf("give: %v, want: %v", err, c.wantError)
} else if !errors.Is(err, c.wantError) {
t.Errorf("give: %v, want: %v", err, c.wantError)
}
if res != nil && res.Cities[0].JISX0402 != c.wantJISX0402 {
t.Errorf("give: %v, want: %v", res.Cities[0].JISX0402, c.wantJISX0402)
}
})
}
}

func TestVersion_UnmarshalJSON(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -221,7 +276,7 @@ func runTestingServer(t *testing.T) *httptest.Server {
}

switch path := r.URL.Path; {
case strings.HasPrefix(path, "/postalcode/"):
case strings.HasPrefix(path, "/postalCode/"):
handlePostalAPI(t, w, path)
case strings.HasPrefix(path, "/cities/"):
handleCityAPI(t, w, path)
Expand All @@ -235,21 +290,21 @@ func handlePostalAPI(t *testing.T, w http.ResponseWriter, path string) {
t.Helper()

switch path {
case "/postalcode/1008105":
case "/postalCode/1008105":
if _, err := w.Write(addressResponse); err != nil {
w.WriteHeader(http.StatusInternalServerError)
}
case "/postalcode/4030000":
w.WriteHeader(http.StatusForbidden)
case "/postalcode/4020000":
case "/postalCode/4020000":
w.WriteHeader(http.StatusPaymentRequired)
case "/postalcode/5000000":
case "/postalCode/4030000":
w.WriteHeader(http.StatusForbidden)
case "/postalCode/5000000":
w.WriteHeader(http.StatusInternalServerError)
case "/postalcode/5020000":
case "/postalCode/5020000":
w.WriteHeader(http.StatusBadGateway)
case "/postalcode/5030000":
case "/postalCode/5030000":
w.WriteHeader(http.StatusServiceUnavailable)
case "/postalcode/0000001":
case "/postalCode/0000001":
if _, err := w.Write([]byte("wrong")); err != nil {
w.WriteHeader(http.StatusInternalServerError)
}
Expand All @@ -267,9 +322,9 @@ func handleCityAPI(t *testing.T, w http.ResponseWriter, path string) {
w.WriteHeader(http.StatusInternalServerError)
}
case "/cities/90":
w.WriteHeader(http.StatusForbidden)
case "/cities/91":
w.WriteHeader(http.StatusPaymentRequired)
case "/cities/91":
w.WriteHeader(http.StatusForbidden)
case "/cities/92":
w.WriteHeader(http.StatusInternalServerError)
case "/cities/93":
Expand Down

0 comments on commit 9cc30f6

Please sign in to comment.