Rehabilitate builds and tests
This commit is contained in:
parent
430c88aa93
commit
cb9776cbbf
23
cmd/main.go
23
cmd/main.go
@ -13,14 +13,17 @@ import (
|
|||||||
|
|
||||||
"git.defalsify.org/vise.git/engine"
|
"git.defalsify.org/vise.git/engine"
|
||||||
"git.defalsify.org/vise.git/logging"
|
"git.defalsify.org/vise.git/logging"
|
||||||
|
"git.defalsify.org/vise.git/lang"
|
||||||
"git.defalsify.org/vise.git/resource"
|
"git.defalsify.org/vise.git/resource"
|
||||||
|
|
||||||
"git.grassecon.net/urdt/ussd/config"
|
"git.grassecon.net/urdt/ussd/config"
|
||||||
"git.grassecon.net/urdt/ussd/initializers"
|
"git.grassecon.net/urdt/ussd/initializers"
|
||||||
"git.grassecon.net/urdt/ussd/common"
|
|
||||||
"git.grassecon.net/urdt/ussd/remote"
|
"git.grassecon.net/urdt/ussd/remote"
|
||||||
|
"git.grassecon.net/urdt/ussd/common"
|
||||||
"git.grassecon.net/urdt/ussd/handlers"
|
"git.grassecon.net/urdt/ussd/handlers"
|
||||||
|
|
||||||
at "git.grassecon.net/grassrootseconomics/visedriver-africastalking/internal/africastalking"
|
at "git.grassecon.net/grassrootseconomics/visedriver-africastalking/internal/africastalking"
|
||||||
|
"git.grassecon.net/grassrootseconomics/visedriver-africastalking/internal/args"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -45,6 +48,9 @@ func main() {
|
|||||||
var host string
|
var host string
|
||||||
var port uint
|
var port uint
|
||||||
var err error
|
var err error
|
||||||
|
var gettextDir string
|
||||||
|
var langs args.LangVar
|
||||||
|
|
||||||
|
|
||||||
flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
|
flag.StringVar(&resourceDir, "resourcedir", path.Join("services", "registration"), "resource dir")
|
||||||
flag.StringVar(&connStr, "c", "", "connection string")
|
flag.StringVar(&connStr, "c", "", "connection string")
|
||||||
@ -52,9 +58,11 @@ func main() {
|
|||||||
flag.UintVar(&size, "s", 160, "max size of output")
|
flag.UintVar(&size, "s", 160, "max size of output")
|
||||||
flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
|
flag.StringVar(&host, "h", initializers.GetEnv("HOST", "127.0.0.1"), "http host")
|
||||||
flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
|
flag.UintVar(&port, "p", initializers.GetEnvUint("PORT", 7123), "http port")
|
||||||
|
flag.StringVar(&gettextDir, "gettext", "", "use gettext translations from given directory")
|
||||||
|
flag.Var(&langs, "language", "add symbol resolution for language")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
if connStr != "" {
|
if connStr == "" {
|
||||||
connStr = config.DbConn
|
connStr = config.DbConn
|
||||||
}
|
}
|
||||||
connData, err := common.ToConnData(config.DbConn)
|
connData, err := common.ToConnData(config.DbConn)
|
||||||
@ -67,6 +75,13 @@ func main() {
|
|||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
ctx = context.WithValue(ctx, "Database", database)
|
ctx = context.WithValue(ctx, "Database", database)
|
||||||
|
ln, err := lang.LanguageFromCode(config.DefaultLanguage)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "default language set error: %v", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
ctx = context.WithValue(ctx, "Language", ln)
|
||||||
|
|
||||||
pfp := path.Join(scriptDir, "pp.csv")
|
pfp := path.Join(scriptDir, "pp.csv")
|
||||||
|
|
||||||
cfg := engine.Config{
|
cfg := engine.Config{
|
||||||
@ -130,9 +145,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer stateStore.Close()
|
defer stateStore.Close()
|
||||||
|
|
||||||
rp := &at.ATRequestParser{
|
rp := &at.ATRequestParser{}
|
||||||
Context: ctx,
|
|
||||||
}
|
|
||||||
bsh := handlers.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl)
|
bsh := handlers.NewBaseSessionHandler(cfg, rs, stateStore, userdataStore, rp, hl)
|
||||||
sh := at.NewATSessionHandler(bsh)
|
sh := at.NewATSessionHandler(bsh)
|
||||||
|
|
||||||
|
2
go.mod
2
go.mod
@ -4,7 +4,7 @@ go 1.23.0
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
git.defalsify.org/vise.git v0.2.3-0.20250103172917-3e190a44568d
|
git.defalsify.org/vise.git v0.2.3-0.20250103172917-3e190a44568d
|
||||||
git.grassecon.net/urdt/ussd v0.8.0-beta.5.0.20250105111758-6789c4f550fa
|
git.grassecon.net/urdt/ussd v0.8.0-beta.11.0.20250109134950-b9712098eff5
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
4
go.sum
4
go.sum
@ -1,7 +1,7 @@
|
|||||||
git.defalsify.org/vise.git v0.2.3-0.20250103172917-3e190a44568d h1:bPAOVZOX4frSGhfOdcj7kc555f8dc9DmMd2YAyC2AMw=
|
git.defalsify.org/vise.git v0.2.3-0.20250103172917-3e190a44568d h1:bPAOVZOX4frSGhfOdcj7kc555f8dc9DmMd2YAyC2AMw=
|
||||||
git.defalsify.org/vise.git v0.2.3-0.20250103172917-3e190a44568d/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck=
|
git.defalsify.org/vise.git v0.2.3-0.20250103172917-3e190a44568d/go.mod h1:jyBMe1qTYUz3mmuoC9JQ/TvFeW0vTanCUcPu3H8p4Ck=
|
||||||
git.grassecon.net/urdt/ussd v0.8.0-beta.5.0.20250105111758-6789c4f550fa h1:aJaDujoO/zIci2ORGPYwo/Q9wM4tMWTSyRy5BVutm0g=
|
git.grassecon.net/urdt/ussd v0.8.0-beta.11.0.20250109134950-b9712098eff5 h1:xDmrSUzN2IdfHt4C0gKGidACqI7t7+bKakiS+Qrd+tA=
|
||||||
git.grassecon.net/urdt/ussd v0.8.0-beta.5.0.20250105111758-6789c4f550fa/go.mod h1:Xct45L7FUE4pYtLN4gmhkMCoafUNpcOJ7horP9kPDAc=
|
git.grassecon.net/urdt/ussd v0.8.0-beta.11.0.20250109134950-b9712098eff5/go.mod h1:Xct45L7FUE4pYtLN4gmhkMCoafUNpcOJ7horP9kPDAc=
|
||||||
github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk=
|
github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk=
|
||||||
github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
|
github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
|
||||||
github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g=
|
github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g=
|
||||||
|
@ -18,7 +18,7 @@ type ATRequestParser struct {
|
|||||||
Context context.Context
|
Context context.Context
|
||||||
}
|
}
|
||||||
|
|
||||||
func (arp *ATRequestParser) GetSessionId(rq any) (string, error) {
|
func (arp *ATRequestParser) GetSessionId(ctx context.Context, rq any) (string, error) {
|
||||||
rqv, ok := rq.(*http.Request)
|
rqv, ok := rq.(*http.Request)
|
||||||
if !ok {
|
if !ok {
|
||||||
logg.Warnf("got an invalid request", "req", rq)
|
logg.Warnf("got an invalid request", "req", rq)
|
||||||
|
@ -34,7 +34,7 @@ func (ash *ATSessionHandler) ServeHTTP(w http.ResponseWriter, req *http.Request)
|
|||||||
|
|
||||||
rp := ash.GetRequestParser()
|
rp := ash.GetRequestParser()
|
||||||
cfg := ash.GetConfig()
|
cfg := ash.GetConfig()
|
||||||
cfg.SessionId, err = rp.GetSessionId(req)
|
cfg.SessionId, err = rp.GetSessionId(req.Context(), req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logg.ErrorCtxf(rqs.Ctx, "", "header processing error", err)
|
logg.ErrorCtxf(rqs.Ctx, "", "header processing error", err)
|
||||||
ash.WriteError(w, 400, err)
|
ash.WriteError(w, 400, err)
|
||||||
|
@ -11,8 +11,9 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"git.defalsify.org/vise.git/engine"
|
"git.defalsify.org/vise.git/engine"
|
||||||
"git.grassecon.net/urdt/ussd/internal/handlers"
|
"git.grassecon.net/urdt/ussd/request"
|
||||||
"git.grassecon.net/urdt/ussd/internal/testutil/mocks/httpmocks"
|
verrors "git.grassecon.net/urdt/ussd/errors"
|
||||||
|
"git.grassecon.net/urdt/ussd/testutil/mocks/httpmocks"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNewATSessionHandler(t *testing.T) {
|
func TestNewATSessionHandler(t *testing.T) {
|
||||||
@ -49,15 +50,15 @@ func TestATSessionHandler_ServeHTTP(t *testing.T) {
|
|||||||
parts := strings.Split(text, "*")
|
parts := strings.Split(text, "*")
|
||||||
return []byte(parts[len(parts)-1]), nil
|
return []byte(parts[len(parts)-1]), nil
|
||||||
}
|
}
|
||||||
mh.ProcessFunc = func(rqs handlers.RequestSession) (handlers.RequestSession, error) {
|
mh.ProcessFunc = func(rqs request.RequestSession) (request.RequestSession, error) {
|
||||||
rqs.Continue = true
|
rqs.Continue = true
|
||||||
rqs.Engine = me
|
rqs.Engine = me
|
||||||
return rqs, nil
|
return rqs, nil
|
||||||
}
|
}
|
||||||
mh.GetConfigFunc = func() engine.Config { return engine.Config{} }
|
mh.GetConfigFunc = func() engine.Config { return engine.Config{} }
|
||||||
mh.GetRequestParserFunc = func() handlers.RequestParser { return mrp }
|
mh.GetRequestParserFunc = func() request.RequestParser { return mrp }
|
||||||
mh.OutputFunc = func(rs handlers.RequestSession) (handlers.RequestSession, error) { return rs, nil }
|
mh.OutputFunc = func(rs request.RequestSession) (request.RequestSession, error) { return rs, nil }
|
||||||
mh.ResetFunc = func(rs handlers.RequestSession) (handlers.RequestSession, error) { return rs, nil }
|
mh.ResetFunc = func(rs request.RequestSession) (request.RequestSession, error) { return rs, nil }
|
||||||
me.FlushFunc = func(context.Context, io.Writer) (int, error) { return 0, nil }
|
me.FlushFunc = func(context.Context, io.Writer) (int, error) { return 0, nil }
|
||||||
},
|
},
|
||||||
formData: url.Values{
|
formData: url.Values{
|
||||||
@ -74,7 +75,7 @@ func TestATSessionHandler_ServeHTTP(t *testing.T) {
|
|||||||
return "", errors.New("no phone number found")
|
return "", errors.New("no phone number found")
|
||||||
}
|
}
|
||||||
mh.GetConfigFunc = func() engine.Config { return engine.Config{} }
|
mh.GetConfigFunc = func() engine.Config { return engine.Config{} }
|
||||||
mh.GetRequestParserFunc = func() handlers.RequestParser { return mrp }
|
mh.GetRequestParserFunc = func() request.RequestParser { return mrp }
|
||||||
},
|
},
|
||||||
formData: url.Values{
|
formData: url.Values{
|
||||||
"text": []string{"1*2*3"},
|
"text": []string{"1*2*3"},
|
||||||
@ -93,7 +94,7 @@ func TestATSessionHandler_ServeHTTP(t *testing.T) {
|
|||||||
return nil, errors.New("no input found")
|
return nil, errors.New("no input found")
|
||||||
}
|
}
|
||||||
mh.GetConfigFunc = func() engine.Config { return engine.Config{} }
|
mh.GetConfigFunc = func() engine.Config { return engine.Config{} }
|
||||||
mh.GetRequestParserFunc = func() handlers.RequestParser { return mrp }
|
mh.GetRequestParserFunc = func() request.RequestParser { return mrp }
|
||||||
},
|
},
|
||||||
formData: url.Values{
|
formData: url.Values{
|
||||||
"phoneNumber": []string{"+1234567890"},
|
"phoneNumber": []string{"+1234567890"},
|
||||||
@ -114,11 +115,11 @@ func TestATSessionHandler_ServeHTTP(t *testing.T) {
|
|||||||
parts := strings.Split(text, "*")
|
parts := strings.Split(text, "*")
|
||||||
return []byte(parts[len(parts)-1]), nil
|
return []byte(parts[len(parts)-1]), nil
|
||||||
}
|
}
|
||||||
mh.ProcessFunc = func(rqs handlers.RequestSession) (handlers.RequestSession, error) {
|
mh.ProcessFunc = func(rqs request.RequestSession) (request.RequestSession, error) {
|
||||||
return rqs, handlers.ErrStorage
|
return rqs, verrors.ErrStorage
|
||||||
}
|
}
|
||||||
mh.GetConfigFunc = func() engine.Config { return engine.Config{} }
|
mh.GetConfigFunc = func() engine.Config { return engine.Config{} }
|
||||||
mh.GetRequestParserFunc = func() handlers.RequestParser { return mrp }
|
mh.GetRequestParserFunc = func() request.RequestParser { return mrp }
|
||||||
},
|
},
|
||||||
formData: url.Values{
|
formData: url.Values{
|
||||||
"phoneNumber": []string{"+1234567890"},
|
"phoneNumber": []string{"+1234567890"},
|
||||||
@ -158,13 +159,13 @@ func TestATSessionHandler_ServeHTTP(t *testing.T) {
|
|||||||
func TestATSessionHandler_Output(t *testing.T) {
|
func TestATSessionHandler_Output(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
input handlers.RequestSession
|
input request.RequestSession
|
||||||
expectedPrefix string
|
expectedPrefix string
|
||||||
expectedError bool
|
expectedError bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Continue true",
|
name: "Continue true",
|
||||||
input: handlers.RequestSession{
|
input: request.RequestSession{
|
||||||
Continue: true,
|
Continue: true,
|
||||||
Engine: &httpmocks.MockEngine{
|
Engine: &httpmocks.MockEngine{
|
||||||
FlushFunc: func(context.Context, io.Writer) (int, error) {
|
FlushFunc: func(context.Context, io.Writer) (int, error) {
|
||||||
@ -178,7 +179,7 @@ func TestATSessionHandler_Output(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Continue false",
|
name: "Continue false",
|
||||||
input: handlers.RequestSession{
|
input: request.RequestSession{
|
||||||
Continue: false,
|
Continue: false,
|
||||||
Engine: &httpmocks.MockEngine{
|
Engine: &httpmocks.MockEngine{
|
||||||
FlushFunc: func(context.Context, io.Writer) (int, error) {
|
FlushFunc: func(context.Context, io.Writer) (int, error) {
|
||||||
@ -192,7 +193,7 @@ func TestATSessionHandler_Output(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Flush error",
|
name: "Flush error",
|
||||||
input: handlers.RequestSession{
|
input: request.RequestSession{
|
||||||
Continue: true,
|
Continue: true,
|
||||||
Engine: &httpmocks.MockEngine{
|
Engine: &httpmocks.MockEngine{
|
||||||
FlushFunc: func(context.Context, io.Writer) (int, error) {
|
FlushFunc: func(context.Context, io.Writer) (int, error) {
|
||||||
|
34
internal/args/lang.go
Normal file
34
internal/args/lang.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package args
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.defalsify.org/vise.git/lang"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LangVar struct {
|
||||||
|
v []lang.Language
|
||||||
|
}
|
||||||
|
|
||||||
|
func(lv *LangVar) Set(s string) error {
|
||||||
|
v, err := lang.LanguageFromCode(s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
lv.v = append(lv.v, v)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func(lv *LangVar) String() string {
|
||||||
|
var s []string
|
||||||
|
for _, v := range(lv.v) {
|
||||||
|
s = append(s, v.Code)
|
||||||
|
}
|
||||||
|
return strings.Join(s, ",")
|
||||||
|
}
|
||||||
|
|
||||||
|
func(lv *LangVar) Langs() []lang.Language {
|
||||||
|
return lv.v
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user