mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-13 08:25:10 +08:00
121 lines
3.3 KiB
Go
121 lines
3.3 KiB
Go
package app
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"GoNavi-Wails/internal/connection"
|
|
"GoNavi-Wails/internal/resultdiff"
|
|
)
|
|
|
|
func TestResultDiffStartWithEmbeddedRows(t *testing.T) {
|
|
a := NewApp()
|
|
req := ResultDiffStartRequest{
|
|
Database: "db",
|
|
Left: resultdiff.DatasetSpec{
|
|
Mode: resultdiff.DatasetModeRows,
|
|
Columns: []string{"id", "name"},
|
|
Rows: []map[string]interface{}{
|
|
{"id": 1, "name": "a"},
|
|
{"id": 2, "name": "b"},
|
|
},
|
|
},
|
|
Right: resultdiff.DatasetSpec{
|
|
Mode: resultdiff.DatasetModeRows,
|
|
Columns: []string{"id", "name"},
|
|
Rows: []map[string]interface{}{
|
|
{"id": 2, "name": "b2"},
|
|
{"id": 3, "name": "c"},
|
|
},
|
|
},
|
|
KeyColumns: []string{"id"},
|
|
}
|
|
res := a.ResultDiffStart(req)
|
|
if !res.Success {
|
|
t.Fatalf("ResultDiffStart failed: %s", res.Message)
|
|
}
|
|
start, ok := res.Data.(resultdiff.StartResult)
|
|
if !ok {
|
|
t.Fatalf("unexpected data type %T", res.Data)
|
|
}
|
|
if start.Summary.Added != 1 || start.Summary.Removed != 1 || start.Summary.Changed != 1 {
|
|
t.Fatalf("summary=%+v", start.Summary)
|
|
}
|
|
|
|
page := a.ResultDiffPage(resultdiff.PageRequest{JobID: start.JobID, Limit: 10})
|
|
if !page.Success {
|
|
t.Fatalf("page failed: %s", page.Message)
|
|
}
|
|
pageData, ok := page.Data.(resultdiff.PageResult)
|
|
if !ok {
|
|
t.Fatalf("page data type %T", page.Data)
|
|
}
|
|
if pageData.Total != 3 {
|
|
t.Fatalf("expected 3 diff rows, got %d", pageData.Total)
|
|
}
|
|
|
|
closeRes := a.ResultDiffClose(start.JobID)
|
|
if !closeRes.Success {
|
|
t.Fatalf("close failed: %s", closeRes.Message)
|
|
}
|
|
}
|
|
|
|
func TestResultDiffStartRequiresKeys(t *testing.T) {
|
|
a := NewApp()
|
|
res := a.ResultDiffStart(ResultDiffStartRequest{
|
|
Left: resultdiff.DatasetSpec{Mode: resultdiff.DatasetModeRows},
|
|
Right: resultdiff.DatasetSpec{Mode: resultdiff.DatasetModeRows},
|
|
})
|
|
if res.Success {
|
|
t.Fatal("expected failure without keys")
|
|
}
|
|
}
|
|
|
|
func TestResultDiffUploadThenCompute(t *testing.T) {
|
|
a := NewApp()
|
|
start := a.ResultDiffStart(ResultDiffStartRequest{
|
|
KeyColumns: []string{"id"},
|
|
Left: resultdiff.DatasetSpec{Mode: resultdiff.DatasetModeRows, Columns: []string{"id", "v"}},
|
|
Right: resultdiff.DatasetSpec{Mode: resultdiff.DatasetModeRows, Columns: []string{"id", "v"}},
|
|
})
|
|
if !start.Success {
|
|
t.Fatalf("start: %s", start.Message)
|
|
}
|
|
startData := start.Data.(resultdiff.StartResult)
|
|
jobID := startData.JobID
|
|
|
|
upL := a.ResultDiffUploadChunk(resultdiff.UploadChunkRequest{
|
|
JobID: jobID, Side: "left", Columns: []string{"id", "v"},
|
|
Rows: []map[string]interface{}{{"id": 1, "v": 1}}, Done: true,
|
|
})
|
|
if !upL.Success {
|
|
t.Fatalf("upload left: %s", upL.Message)
|
|
}
|
|
upR := a.ResultDiffUploadChunk(resultdiff.UploadChunkRequest{
|
|
JobID: jobID, Side: "right", Columns: []string{"id", "v"},
|
|
Rows: []map[string]interface{}{{"id": 1, "v": 2}}, Done: true,
|
|
})
|
|
if !upR.Success {
|
|
t.Fatalf("upload right: %s", upR.Message)
|
|
}
|
|
comp := a.ResultDiffCompute(jobID)
|
|
if !comp.Success {
|
|
t.Fatalf("compute: %s", comp.Message)
|
|
}
|
|
result := comp.Data.(resultdiff.StartResult)
|
|
if result.Summary.Changed != 1 {
|
|
t.Fatalf("summary=%+v", result.Summary)
|
|
}
|
|
_ = a.ResultDiffClose(jobID)
|
|
}
|
|
|
|
func TestExtractQueryRows(t *testing.T) {
|
|
rows, cols, err := extractQueryRows(connection.QueryResult{
|
|
Success: true,
|
|
Data: []map[string]interface{}{{"a": 1}},
|
|
Fields: []string{"a"},
|
|
})
|
|
if err != nil || len(rows) != 1 || cols[0] != "a" {
|
|
t.Fatalf("rows=%v cols=%v err=%v", rows, cols, err)
|
|
}
|
|
}
|