Skip to content

Commit bc3d9dd

Browse files
committed
refactor
1 parent 446a029 commit bc3d9dd

File tree

4 files changed

+51
-17
lines changed

4 files changed

+51
-17
lines changed

kadai4/main.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,13 @@ package main
33
import (
44
"encoding/json"
55
"log"
6-
"math/rand"
76
"net/http"
87
"time"
98

109
"github.com/gopherdojo/dojo6/kadai4/omikuji"
1110
)
1211

1312
func main() {
14-
rand.Seed(time.Now().UnixNano())
15-
1613
http.HandleFunc("/", handler)
1714
http.ListenAndServe(":8080", nil)
1815
}
@@ -24,9 +21,16 @@ type Response struct {
2421
func handler(w http.ResponseWriter, r *http.Request) {
2522
w.Header().Set("Content-Type", "application/json; charset=utf-8")
2623

27-
_, m, d := time.Now().Date()
28-
ret := omikuji.Do(int(m), d)
29-
res := Response{Msg: ret}
24+
omikuji := omikuji.Omikuji{time.Now()}
25+
ret, err := omikuji.Do()
26+
res := Response{}
27+
28+
if err != nil {
29+
res.Msg = err.Error()
30+
log.Println("Error:", err)
31+
} else {
32+
res.Msg = ret
33+
}
3034

3135
if err := json.NewEncoder(w).Encode(res); err != nil {
3236
log.Println("Error:", err)

kadai4/main_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ func TestHandler(t *testing.T) {
2626
}
2727

2828
res := &Response{}
29-
// TODO: 実行時のseeder設定により、大吉しか返ってないので、テストが通る
3029
const expected = "大吉"
3130
if err := json.Unmarshal(b, res); err != nil {
3231
t.Fatalf("JSON unmarshall error: %v", err)

kadai4/omikuji/omikuji.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package omikuji
22

33
import (
4+
"fmt"
45
"math/rand"
6+
"time"
57
)
68

79
var omikuji = map[int]string{
@@ -13,19 +15,37 @@ var omikuji = map[int]string{
1315
5: "大吉",
1416
}
1517

16-
func Do(month, day int) string {
18+
type Omikuji struct {
19+
Time time.Time
20+
}
21+
22+
func (o *Omikuji) SetSeed(seed int64) {
23+
rand.Seed(seed)
24+
}
25+
26+
type OmikujiError struct {
27+
Msg string
28+
}
29+
30+
func (err *OmikujiError) Error() string {
31+
return fmt.Sprintf(err.Msg)
32+
}
33+
34+
func (o *Omikuji) Do() (string, error) {
1735
var i int
36+
37+
_, m, d := o.Time.Date()
1838
// 1/1 ~ 1/3のみ大吉を出す
19-
if month == 1 && day >= 1 && day <= 3 {
39+
if int(m) == 1 && d >= 1 && d <= 3 {
2040
i = 5
2141
} else {
2242
i = rand.Intn(len(omikuji))
2343
}
2444

2545
s, ok := omikuji[i]
2646
if !ok {
27-
panic("omikuji panic.")
47+
return "", &OmikujiError{"おみくじが引けませんでした。"}
2848
}
2949

30-
return s
50+
return s, nil
3151
}

kadai4/omikuji/omikuji_test.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,22 @@ package omikuji_test
22

33
import (
44
"testing"
5+
"time"
56

67
"github.com/gopherdojo/dojo6/kadai4/omikuji"
78
)
89

9-
func Test_SpecificPeriodLottery(t *testing.T) {
10+
func Test_NormalTime(t *testing.T) {
11+
time := time.Date(2019, time.Month(8), 16, 0, 0, 0, 0, time.Local)
12+
omikuji := omikuji.Omikuji{time}
13+
expect := "大吉"
14+
actual, _ := omikuji.Do()
15+
if expect != actual {
16+
t.Errorf(`Omikuji error: expect="%s" actual="%s"`, expect, actual)
17+
}
18+
}
19+
20+
func Test_SpecificPeriod(t *testing.T) {
1021
periods := map[int][]int{
1122
1: {1, 2, 3},
1223
}
@@ -15,11 +26,11 @@ func Test_SpecificPeriodLottery(t *testing.T) {
1526

1627
for m, days := range periods {
1728
for _, d := range days {
18-
for i := 0; i < 20; i++ {
19-
actual := omikuji.Do(m, d)
20-
if expect != actual {
21-
t.Errorf(`Omikuji error: expect="%s" actual="%s"`, expect, actual)
22-
}
29+
time := time.Date(2019, time.Month(m), d, 0, 0, 0, 0, time.Local)
30+
omikuji := omikuji.Omikuji{time}
31+
actual, _ := omikuji.Do()
32+
if expect != actual {
33+
t.Errorf(`Omikuji error: expect="%s" actual="%s"`, expect, actual)
2334
}
2435
}
2536
}

0 commit comments

Comments
 (0)