Skip to content

Commit 1b43e8a

Browse files
committed
remove HTML rendering interface
1 parent 6f3006c commit 1b43e8a

File tree

5 files changed

+27
-63
lines changed

5 files changed

+27
-63
lines changed

internal/server/services/core/core.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package core
22

3-
import "github.com/TuanKiri/weather-mcp-server/internal/server/services"
3+
import (
4+
"html/template"
5+
6+
"github.com/TuanKiri/weather-mcp-server/internal/server/services"
7+
)
48

59
type CoreServices struct {
6-
renderer services.TemplateRenderer
10+
renderer *template.Template
711
weatherAPI services.WeatherAPIProvider
812

913
weatherService *WeatherService
1014
}
1115

12-
func New(renderer services.TemplateRenderer, weatherAPI services.WeatherAPIProvider) *CoreServices {
16+
func New(renderer *template.Template, weatherAPI services.WeatherAPIProvider) *CoreServices {
1317
return &CoreServices{
1418
renderer: renderer,
1519
weatherAPI: weatherAPI,

internal/server/services/core/weather.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ package core
33
import (
44
"bytes"
55
"context"
6-
7-
"github.com/TuanKiri/weather-mcp-server/internal/server/view/models"
6+
"fmt"
87
)
98

109
type WeatherService struct {
@@ -17,11 +16,16 @@ func (ws *WeatherService) Current(ctx context.Context, city string) (string, err
1716
return "", err
1817
}
1918

20-
var current models.CurrentWeather
21-
current.FromWeatherAPI(data)
22-
2319
var buf bytes.Buffer
24-
if err := ws.renderer.ExecuteTemplate(&buf, "weather.html", current); err != nil {
20+
21+
if err := ws.renderer.ExecuteTemplate(&buf, "weather.html", map[string]string{
22+
"Location": fmt.Sprintf("%s, %s", data.Location.Name, data.Location.Country),
23+
"Icon": "https:" + data.Current.Condition.Icon,
24+
"Condition": data.Current.Condition.Text,
25+
"Temperature": fmt.Sprintf("%.0f", data.Current.TempC),
26+
"Humidity": fmt.Sprintf("%d", data.Current.Humidity),
27+
"WindSpeed": fmt.Sprintf("%.0f", data.Current.WindKph),
28+
}); err != nil {
2529
return "", err
2630
}
2731

internal/server/services/core/weather_test.go

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package core
33
import (
44
"context"
55
"errors"
6-
"fmt"
7-
"io"
6+
"html/template"
87
"testing"
98

109
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/require"
1111
"go.uber.org/mock/gomock"
1212

1313
"github.com/TuanKiri/weather-mcp-server/internal/server/services/mock"
@@ -20,7 +20,6 @@ func TestCurrentWeather(t *testing.T) {
2020
errString string
2121
wait string
2222
setupWeatherAPI func(weatherAPI *mock.MockWeatherAPIProvider)
23-
setupRenderer func(renderer *mock.MockTemplateRenderer)
2423
}{
2524
"city_not_found": {
2625
city: "Tokyo",
@@ -33,12 +32,8 @@ func TestCurrentWeather(t *testing.T) {
3332
},
3433
"successful_result": {
3534
city: "London",
36-
wait: "{Location:London, United Kingdom " +
37-
"Icon:https://cdn.weatherapi.com/weather/64x64/day/113.png " +
38-
"Condition:Sunny " +
39-
"Temperature:18 " +
40-
"Humidity:45 " +
41-
"WindSpeed:4}",
35+
wait: "London, United Kingdom Sunny 18 45 4 " +
36+
"https://cdn.weatherapi.com/weather/64x64/day/113.png",
4237
setupWeatherAPI: func(weatherAPI *mock.MockWeatherAPIProvider) {
4338
weatherAPI.EXPECT().
4439
Current(context.Background(), "London").
@@ -49,7 +44,7 @@ func TestCurrentWeather(t *testing.T) {
4944
},
5045
Current: models.Current{
5146
TempC: 18.4,
52-
WindKph: 4,
47+
WindKph: 4.2,
5348
Humidity: 45,
5449
Condition: models.Condition{
5550
Text: "Sunny",
@@ -58,22 +53,17 @@ func TestCurrentWeather(t *testing.T) {
5853
},
5954
}, nil)
6055
},
61-
setupRenderer: func(renderer *mock.MockTemplateRenderer) {
62-
renderer.EXPECT().
63-
ExecuteTemplate(gomock.Any(), "weather.html", gomock.Any()).
64-
Do(func(wr io.Writer, _ string, data any) {
65-
if wr != nil {
66-
wr.Write(fmt.Appendf([]byte{}, "%+v", data))
67-
}
68-
})
69-
},
7056
},
7157
}
7258

59+
renderer, err := template.New("weather.html").Parse(
60+
"{{ .Location }} {{ .Condition }} {{ .Temperature }} " +
61+
"{{ .Humidity }} {{ .WindSpeed }} {{ .Icon }}")
62+
require.NoError(t, err)
63+
7364
ctrl := gomock.NewController(t)
7465
defer ctrl.Finish()
7566

76-
renderer := mock.NewMockTemplateRenderer(ctrl)
7767
weatherAPI := mock.NewMockWeatherAPIProvider(ctrl)
7868

7969
svc := New(renderer, weatherAPI)
@@ -84,10 +74,6 @@ func TestCurrentWeather(t *testing.T) {
8474
tc.setupWeatherAPI(weatherAPI)
8575
}
8676

87-
if tc.setupRenderer != nil {
88-
tc.setupRenderer(renderer)
89-
}
90-
9177
data, err := svc.Weather().Current(context.Background(), tc.city)
9278
if err != nil {
9379
assert.EqualError(t, err, tc.errString)

internal/server/services/services.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,10 @@ package services
22

33
import (
44
"context"
5-
"io"
65

76
"github.com/TuanKiri/weather-mcp-server/pkg/weatherapi/models"
87
)
98

10-
type TemplateRenderer interface {
11-
ExecuteTemplate(wr io.Writer, name string, data any) error
12-
}
13-
149
type WeatherAPIProvider interface {
1510
Current(ctx context.Context, city string) (*models.CurrentResponse, error)
1611
}

internal/server/view/models/weather.go

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)