Skip to content

Commit

Permalink
Merge pull request TechBowl-japan#11 from sivchari/fix/httptest
Browse files Browse the repository at this point in the history
Fix/httptest
  • Loading branch information
SuguruOoki authored Mar 24, 2022
2 parents b809ffc + 92f2948 commit 9295c9b
Show file tree
Hide file tree
Showing 22 changed files with 188 additions and 374 deletions.
4 changes: 2 additions & 2 deletions _test/sta10/sta10_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func TestStation10(t *testing.T) {

f, err := parser.ParseFile(fset, "../../model/error.go", nil, 0)
if err != nil {
t.Error("エラーが発生しました", err)
t.Error("パースに失敗しました", err)
return
}

Expand All @@ -26,7 +26,7 @@ func TestStation10(t *testing.T) {

pkg, err := config.Check("model", fset, []*ast.File{f}, nil)
if err != nil {
t.Error("エラーが発生しました", err)
t.Error("パッケージチェックに失敗しました", err)
return
}

Expand Down
1 change: 1 addition & 0 deletions _test/sta11/sta11_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ func TestStation11(t *testing.T) {
}

for name, tc := range testcases {
name := name
tc := tc
t.Run(name, func(t *testing.T) {
t.Parallel()
Expand Down
18 changes: 8 additions & 10 deletions _test/sta12/sta12_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,39 +22,36 @@ func TestStation12(t *testing.T) {
dbpath := "./temp_test.db"
d, err := db.NewDB(dbpath)
if err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("データベースの作成に失敗しました: %v", err)
return
}

t.Cleanup(func() {
if err := d.Close(); err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("データベースのクローズに失敗しました: %v", err)
return
}
})

t.Cleanup(func() {
if err := os.Remove(dbpath); err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("テスト用のDBファイルの削除に失敗しました: %v", err)
return
}
})

stmt, err := d.Prepare(`INSERT INTO todos(subject) VALUES(?)`)
if err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("ステートメントの作成に失敗しました: %v", err)
return
}
t.Cleanup(func() {
if err := stmt.Close(); err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("ステートメントのクローズに失敗しました: %v", err)
return
}
})

_, err = stmt.Exec("todo subject")
if err != nil {
t.Error(err)
t.Errorf("todoの追加に失敗しました: %v", err)
return
}

Expand Down Expand Up @@ -83,14 +80,15 @@ func TestStation12(t *testing.T) {
}

for name, tc := range testcases {
name := name
tc := tc
t.Run(name, func(t *testing.T) {
svc := service.NewTODOService(d)
got, err := svc.UpdateTODO(context.Background(), tc.ID, tc.Subject, tc.Description)
switch tc.WantError {
case nil:
if err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("予期しないエラーが発生しました: %v", err)
return
}
default:
Expand Down
71 changes: 20 additions & 51 deletions _test/sta13/sta13_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ import (
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"os"
"os/exec"
"syscall"
"testing"
"time"

"github.com/TechBowl-japan/go-stations/db"
"github.com/TechBowl-japan/go-stations/handler/router"

"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
Expand All @@ -20,54 +20,45 @@ import (
func TestStation13(t *testing.T) {
dbPath := "./temp_test.db"
if err := os.Setenv("DB_PATH", dbPath); err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("dbPathのセットに失敗しました。%v", err)
return
}

t.Cleanup(func() {
if err := os.Remove(dbPath); err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("テスト用のDBファイルの削除に失敗しました: %v", err)
return
}
})

d, err := db.NewDB(dbPath)
todoDB, err := db.NewDB(dbPath)
if err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("データベースの作成に失敗しました: %v", err)
return
}

stmt, err := d.Prepare(`INSERT INTO todos(subject) VALUES(?)`)
stmt, err := todoDB.Prepare(`INSERT INTO todos(subject) VALUES(?)`)
if err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("ステートメントの作成に失敗しました: %v", err)
return
}

t.Cleanup(func() {
if err := stmt.Close(); err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("ステートメントのクローズに失敗しました: %v", err)
return
}
})

_, err = stmt.Exec("todo subject")
if err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("todoの追加に失敗しました: %v", err)
return
}

stop, err := procStart(t)
if err != nil {
t.Error("エラーが発生しました", err)
return
}

t.Cleanup(func() {
if err := stop(); err != nil {
t.Error("エラーが発生しました", err)
return
}
})
r := router.NewRouter(todoDB)
srv := httptest.NewServer(r)
defer srv.Close()

testcases := map[string]struct {
ID float64
Expand Down Expand Up @@ -96,23 +87,24 @@ func TestStation13(t *testing.T) {
}

for name, tc := range testcases {
name := name
tc := tc
t.Run(name, func(t *testing.T) {
req, err := http.NewRequest(http.MethodPut, "http://localhost:8080/todos",
req, err := http.NewRequest(http.MethodPut, srv.URL+"/todos",
bytes.NewBufferString(fmt.Sprintf(`{"id":%d,"subject":"%s","description":"%s"}`, int64(tc.ID), tc.Subject, tc.Description)))
if err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("リクエストの作成に失敗しました: %v", err)
return
}
req.Header.Add("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("リクエストの送信に失敗しました: %v", err)
return
}
defer func() {
if err := resp.Body.Close(); err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("レスポンスのクローズに失敗しました: %v", err)
return
}
}()
Expand All @@ -128,13 +120,13 @@ func TestStation13(t *testing.T) {

var m map[string]interface{}
if err := json.NewDecoder(resp.Body).Decode(&m); err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("レスポンスのデコードに失敗しました: %v", err)
return
}

v, ok := m["todo"]
if !ok {
t.Error("todo field がみつかりません")
t.Errorf("レスポンスにtodoが含まれていません")
return
}

Expand Down Expand Up @@ -176,26 +168,3 @@ func TestStation13(t *testing.T) {
})
}
}

func procStart(t *testing.T) (func() error, error) {
t.Helper()

cmd := exec.Command("go", "run", "../../main.go")
cmd.SysProcAttr = &syscall.SysProcAttr{
Setpgid: true,
}
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

if err := cmd.Start(); err != nil {
return nil, err
}

time.Sleep(2 * time.Second)

stop := func() error {
return syscall.Kill(-cmd.Process.Pid, syscall.SIGKILL)
}

return stop, nil
}
1 change: 1 addition & 0 deletions _test/sta14/sta14_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ func TestStation14(t *testing.T) {
}

for name, tc := range testcases {
name := name
tc := tc
t.Run(name, func(t *testing.T) {
t.Parallel()
Expand Down
19 changes: 8 additions & 11 deletions _test/sta15/sta15_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,40 +34,37 @@ func TestStation15(t *testing.T) {
dbpath := "./temp_test.db"
d, err := db.NewDB(dbpath)
if err != nil {
t.Error(" エラーが発生しました", err)
t.Errorf("データベースの作成に失敗しました: %v", err)
return
}

t.Cleanup(func() {
if err := d.Close(); err != nil {
t.Error(" エラーが発生しました", err)
t.Errorf("データベースのクローズに失敗しました: %v", err)
return
}
})
t.Cleanup(func() {
if err := os.Remove(dbpath); err != nil {
t.Error(" エラーが発生しました", err)
t.Errorf("テスト用のデータベースの削除に失敗しました: %v", err)
return
}
})

stmt, err := d.Prepare(`INSERT INTO todos(subject, description) VALUES(?, ?)`)
if err != nil {
t.Error(err)
t.Errorf("データベースのステートメントの作成に失敗しました: %v", err)
return
}

t.Cleanup(func() {
if err := stmt.Close(); err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("データベースのステートメントのクローズに失敗しました: %v", err)
return
}
})

for _, todo := range []*model.TODO{todos[2], todos[1], todos[0]} {
_, err = stmt.Exec(todo.Subject, todo.Description)
if err != nil {
t.Error("エラーが発生しました", err)
if _, err := stmt.Exec(todo.Subject, todo.Description); err != nil {
t.Errorf("データベースのステートメントの実行に失敗しました: %v", err)
return
}
}
Expand Down Expand Up @@ -120,7 +117,7 @@ func TestStation15(t *testing.T) {
svc := service.NewTODOService(d)
ret, err := svc.ReadTODO(context.Background(), tc.PrevID, tc.Size)
if err != nil {
t.Error("エラーが発生しました", err)
t.Errorf("ReadTODOに失敗しました: %v", err)
return
}
if diff := cmp.Diff(ret, tc.TODOs, cmpopts.IgnoreFields(model.TODO{}, "CreatedAt", "UpdatedAt")); diff != "" {
Expand Down
Loading

0 comments on commit 9295c9b

Please sign in to comment.