👔 Created server use case module implementation

This commit is contained in:
Maxim Lebedev 2023-12-09 12:03:54 +06:00
parent 7d5b04e642
commit dac36d3e71
Signed by: toby3d
GPG Key ID: 1F14E25B7C119FC5
2 changed files with 107 additions and 0 deletions

View File

@ -0,0 +1,66 @@
package usecase
import (
"context"
"source.toby3d.me/toby3d/home/internal/domain"
"source.toby3d.me/toby3d/home/internal/server"
)
type serverUseCase struct{}
func NewServerUseCase() server.UseCase {
return serverUseCase{}
}
func (serverUseCase) Do(ctx context.Context, site domain.Site) (*domain.Server, error) {
if site.Params == nil {
return nil, server.ErrParams
}
serverMap, ok := site.Params["server"].(map[string]any)
if !ok {
return nil, server.ErrServer
}
serverHeaderValues, ok := serverMap["header"].([]any)
if !ok {
return nil, server.ErrServerHeader
}
out := domain.NewServer()
for i := range serverHeaderValues {
headerMap, ok := serverHeaderValues[i].(map[string]any)
if !ok {
continue
}
header := domain.Header{
Headers: make(map[string]string),
Path: "",
}
if header.Path, ok = headerMap["path"].(string); !ok {
continue
}
headers, ok := headerMap["headers"].(map[string]any)
if !ok {
continue
}
for name, value := range headers {
v, ok := value.(string)
if !ok {
continue
}
header.Headers[name] = v
}
out.Headers = append(out.Headers, header)
}
return out, nil
}

View File

@ -0,0 +1,41 @@
package usecase_test
import (
"context"
"testing"
"github.com/google/go-cmp/cmp"
"source.toby3d.me/toby3d/home/internal/domain"
"source.toby3d.me/toby3d/home/internal/server/usecase"
)
func TestDo(t *testing.T) {
t.Parallel()
site := domain.TestSite(t)
actual, err := usecase.NewServerUseCase().Do(context.Background(), *site)
if err != nil {
t.Fatal(err)
}
expect := &domain.Server{
Headers: []domain.Header{{
Path: "/**",
Headers: map[string]string{
"Link": `<https://auth.example.com/>; rel="indieauth-metadata", ` +
`<https://pub.example.com/>; rel="micropub"`,
},
}, {
Path: "/foo/bar",
Headers: map[string]string{
"X-Testing": `sample-text`,
},
}},
Redirects: make([]domain.Redirect, 0),
}
if diff := cmp.Diff(actual, expect); diff != "" {
t.Error(diff)
}
}