-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathapp_settings_schema_test.go
More file actions
60 lines (54 loc) · 1.88 KB
/
Copy pathapp_settings_schema_test.go
File metadata and controls
60 lines (54 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package main
import (
"os"
"reflect"
"strings"
"testing"
"windsurf-tools-wails/backend/models"
)
func TestFrontendSettingsModelCoversBackendSettingsFields(t *testing.T) {
data, err := os.ReadFile("frontend/src/utils/settingsModel.ts")
if err != nil {
t.Fatalf("read settingsModel.ts: %v", err)
}
src := string(data)
checks := map[string][2]string{
"createDefaultSettings": {"export function createDefaultSettings(): models.Settings", "export function normalizeSettings"},
"normalizeSettings": {"export function normalizeSettings(raw: unknown): models.Settings", "/** 规范化存储"},
"SettingsForm": {"export type SettingsForm = {", "export function settingsToForm"},
"settingsToForm": {"export function settingsToForm(s: models.Settings): SettingsForm", "export function formToSettings"},
"formToSettings": {"export function formToSettings(form: SettingsForm): models.Settings", "export const quotaPolicyOptions"},
}
sections := make(map[string]string, len(checks))
for name, bounds := range checks {
section, ok := sectionBetween(src, bounds[0], bounds[1])
if !ok {
t.Fatalf("section %s not found in settingsModel.ts", name)
}
sections[name] = section
}
settingsType := reflect.TypeOf(models.Settings{})
for i := 0; i < settingsType.NumField(); i++ {
field := settingsType.Field(i)
jsonName := strings.Split(field.Tag.Get("json"), ",")[0]
if jsonName == "" || jsonName == "-" {
continue
}
for sectionName, section := range sections {
if !strings.Contains(section, jsonName) {
t.Fatalf("settings field %q (%s) missing in frontend %s", jsonName, field.Name, sectionName)
}
}
}
}
func sectionBetween(src, start, end string) (string, bool) {
i := strings.Index(src, start)
if i < 0 {
return "", false
}
j := strings.Index(src[i+len(start):], end)
if j < 0 {
return "", false
}
return src[i : i+len(start)+j], true
}