👔 Created server use case module implementation
This commit is contained in:
parent
7d5b04e642
commit
dac36d3e71
|
@ -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
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue