Compare commits

..

3 Commits

Author SHA1 Message Date
170d075545
update tests 2024-09-30 13:25:38 +03:00
4aad23ab30
update tests 2024-09-30 13:21:17 +03:00
7d1db50294
update 2024-09-27 16:26:00 +03:00
4 changed files with 165 additions and 68 deletions

55
driver/testdata.go Normal file
View File

@ -0,0 +1,55 @@
package driver
import (
"encoding/json"
"log"
"os"
)
type Step struct {
Input string `json:"input"`
ExpectedContent string `json:"expectedContent"`
}
type Group struct {
Name string `json:"name"`
Steps []Step `json:"steps"`
}
type Session struct {
Name string `json:"name"`
Groups []Group `json:"groups"`
}
func ReadData() []Session {
data, err := os.ReadFile("test_data_two.json")
if err != nil {
log.Fatalf("Failed to read file: %v", err)
}
// Unmarshal JSON data
var sessions []Session
err = json.Unmarshal(data, &sessions)
if err != nil {
log.Fatalf("Failed to unmarshal JSON: %v", err)
}
return sessions
}
func FilterGroupsByName(groups []Group, name string) []Group {
var filteredGroups []Group
for _, group := range groups {
if group.Name == name {
filteredGroups = append(filteredGroups, group)
}
}
return filteredGroups
}
func Map[T any, U any](input []T, fn func(T) U) []U {
result := make([]U, len(input))
for i, v := range input {
result[i] = fn(v)
}
return result
}

View File

@ -13,12 +13,13 @@ import (
"git.grassecon.net/urdt/ussd/internal/handlers" "git.grassecon.net/urdt/ussd/internal/handlers"
"git.grassecon.net/urdt/ussd/internal/storage" "git.grassecon.net/urdt/ussd/internal/storage"
) )
var ( var (
logg = logging.NewVanilla() logg = logging.NewVanilla()
scriptDir = path.Join("services", "registration") scriptDir = path.Join("services", "registration")
) )
func TestEngine(sessionId string) (engine.Engine,*persist.Persister){ func TestEngine(sessionId string) (engine.Engine, *persist.Persister) {
ctx := context.Background() ctx := context.Background()
ctx = context.WithValue(ctx, "SessionId", sessionId) ctx = context.WithValue(ctx, "SessionId", sessionId)
pfp := path.Join(scriptDir, "pp.csv") pfp := path.Join(scriptDir, "pp.csv")
@ -26,7 +27,7 @@ func TestEngine(sessionId string) (engine.Engine,*persist.Persister){
cfg := engine.Config{ cfg := engine.Config{
Root: "root", Root: "root",
SessionId: sessionId, SessionId: sessionId,
OutputSize: uint32(106), OutputSize: uint32(160),
FlagCount: uint32(16), FlagCount: uint32(16),
} }
@ -83,6 +84,6 @@ func TestEngine(sessionId string) (engine.Engine,*persist.Persister){
en = en.WithFirst(hl.Init) en = en.WithFirst(hl.Init)
//en = en.WithDebug(nil) //en = en.WithDebug(nil)
return en,pe return en, pe
} }

View File

@ -1,61 +1,70 @@
package main package main
import ( import (
"bufio"
"bytes" "bytes"
"context" "context"
"encoding/json"
"fmt"
"os"
"strings"
"testing" "testing"
"git.defalsify.org/vise.git/engine" "git.grassecon.net/urdt/ussd/driver"
"git.grassecon.net/urdt/ussd/engine"
"git.grassecon.net/urdt/ussd/enginetest"
) )
type TestCase struct { var (
Input []string `json:"input"` testData = driver.ReadData()
Expected string `json:"expected"` )
}
type UserRegistration struct {
UserRegistration []TestCase `json:"user_registration"`
}
type TestData struct {
UserRegistration []TestCase `json:"user_registration"`
PinCheck []TestCase `json:"pincheck"`
}
func TestUserRegistration(t *testing.T) { func TestUserRegistration(t *testing.T) {
en, pe := enginetest.TestEngine("session1234112") en, _ := enginetest.TestEngine("session1234112")
var err error
ctx := context.Background()
sessions := testData
for _, session := range sessions {
groups := driver.FilterGroupsByName(session.Groups, "account_creation_successful")
for _, group := range groups {
for _, step := range group.Steps {
cont, _ := en.Exec(ctx, []byte(step.Input))
if cont {
w := bytes.NewBuffer(nil) w := bytes.NewBuffer(nil)
file, err := os.Open("test_data.json") _, err = en.Flush(ctx, w)
if err != nil { if err != nil {
fmt.Println("Error opening file:", err) t.Fatal(err)
return
} }
defer file.Close()
var testData TestData
decoder := json.NewDecoder(file)
if err := decoder.Decode(&testData); err != nil {
fmt.Println("Error decoding JSON:", err)
return
}
var inputBuilder strings.Builder
for _, testCase := range testData.UserRegistration {
inputBuilder.WriteString(strings.Join(testCase.Input, "\n") + "\n")
}
readers := bufio.NewReader(strings.NewReader(inputBuilder.String()))
engine.Loop(context.Background(), en, readers, w, nil)
st := pe.GetState()
sym, _ := st.Where()
b := w.Bytes() b := w.Bytes()
fmt.Println("Menu:",string(b)) if !bytes.Equal(b, []byte(step.ExpectedContent)) {
fmt.Println("Rendering symbol:", sym) t.Fatalf("expected:\n\t%s\ngot:\n\t%s\n", step.ExpectedContent, b)
}
}
}
}
}
}
func TestAcceptTerms(t *testing.T) {
en, _ := enginetest.TestEngine("session12341123")
var err error
ctx := context.Background()
sessions := testData
for _, session := range sessions {
groups := driver.FilterGroupsByName(session.Groups, "account_creation_accept_terms")
for _, group := range groups {
for _, step := range group.Steps {
cont, _ := en.Exec(ctx, []byte(step.Input))
if cont {
w := bytes.NewBuffer(nil)
_, err = en.Flush(ctx, w)
if err != nil {
t.Fatal(err)
}
b := w.Bytes()
if !bytes.Equal(b, []byte(step.ExpectedContent)) {
t.Fatalf("expected:\n\t%s\ngot:\n\t%s\n", step.ExpectedContent, b)
}
}
}
}
}
} }

View File

@ -1,18 +1,50 @@
{ [
"user_registration": [
{ {
"input": ["0", "0","1234","1234"], "name": "session one",
"expected": "Registration successful" "groups": [
}
],
"pincheck": [
{ {
"input": ["1234"], "name": "account_creation_successful",
"expected": "PIN valid" "steps": [
{
"input": "",
"expectedContent": "Welcome to Sarafu Network\nPlease select a language\n0:english\n1:kiswahili"
}, },
{ {
"input": ["5678"], "input": "0",
"expected": "PIN invalid" "expectedContent": "Do you agree to terms and conditions?\n0:yes\n1:no"
},
{
"input": "0",
"expectedContent": "Please enter a new four number PIN for your account:\n0:Exit"
},
{
"input": "1234",
"expectedContent": "Enter your four number PIN again:"
},
{
"input": "1234",
"expectedContent": "Enter your four number PIN again:"
} }
] ]
} },
{
"name": "account_creation_accept_terms",
"steps": [
{
"input": "",
"expectedContent": "Welcome to Sarafu Network\nPlease select a language\n0:english\n1:kiswahili"
},
{
"input": "0",
"expectedContent": "Do you agree to terms and conditions?\n0:yes\n1:no"
},
{
"input": "0",
"expectedContent": "Please enter a new four number PIN for your account:\n0:Exit"
}
]
}
]
}
]