(t *testing.T)
| 152 | } |
| 153 | |
| 154 | func TestFileFieldDriverValue(t *testing.T) { |
| 155 | app, _ := tests.NewTestApp() |
| 156 | defer app.Cleanup() |
| 157 | |
| 158 | f1, err := filesystem.NewFileFromBytes([]byte("test"), "test.txt") |
| 159 | if err != nil { |
| 160 | t.Fatal(err) |
| 161 | } |
| 162 | |
| 163 | scenarios := []struct { |
| 164 | raw any |
| 165 | field *core.FileField |
| 166 | expected string |
| 167 | }{ |
| 168 | // single |
| 169 | {nil, &core.FileField{MaxSelect: 1}, `""`}, |
| 170 | {"", &core.FileField{MaxSelect: 1}, `""`}, |
| 171 | {123, &core.FileField{MaxSelect: 1}, `"123"`}, |
| 172 | {"a", &core.FileField{MaxSelect: 1}, `"a"`}, |
| 173 | {`["a"]`, &core.FileField{MaxSelect: 1}, `"a"`}, |
| 174 | {f1, &core.FileField{MaxSelect: 1}, `"` + f1.Name + `"`}, |
| 175 | {[]string{}, &core.FileField{MaxSelect: 1}, `""`}, |
| 176 | {[]string{"a", "b"}, &core.FileField{MaxSelect: 1}, `"b"`}, |
| 177 | |
| 178 | // multiple |
| 179 | {nil, &core.FileField{MaxSelect: 2}, `[]`}, |
| 180 | {"", &core.FileField{MaxSelect: 2}, `[]`}, |
| 181 | {123, &core.FileField{MaxSelect: 2}, `["123"]`}, |
| 182 | {"a", &core.FileField{MaxSelect: 2}, `["a"]`}, |
| 183 | {`["a"]`, &core.FileField{MaxSelect: 2}, `["a"]`}, |
| 184 | {[]any{"a", f1}, &core.FileField{MaxSelect: 2}, `["a","` + f1.Name + `"]`}, |
| 185 | {[]string{}, &core.FileField{MaxSelect: 2}, `[]`}, |
| 186 | {[]string{"a", "b", "c"}, &core.FileField{MaxSelect: 2}, `["a","b","c"]`}, |
| 187 | } |
| 188 | |
| 189 | for i, s := range scenarios { |
| 190 | t.Run(fmt.Sprintf("%d_%#v_%v", i, s.raw, s.field.IsMultiple()), func(t *testing.T) { |
| 191 | record := core.NewRecord(core.NewBaseCollection("test")) |
| 192 | record.SetRaw(s.field.GetName(), s.raw) |
| 193 | |
| 194 | v, err := s.field.DriverValue(record) |
| 195 | if err != nil { |
| 196 | t.Fatal(err) |
| 197 | } |
| 198 | |
| 199 | if s.field.IsMultiple() { |
| 200 | _, ok := v.(types.JSONArray[string]) |
| 201 | if !ok { |
| 202 | t.Fatalf("Expected types.JSONArray value, got %T", v) |
| 203 | } |
| 204 | } else { |
| 205 | _, ok := v.(string) |
| 206 | if !ok { |
| 207 | t.Fatalf("Expected string value, got %T", v) |
| 208 | } |
| 209 | } |
| 210 | |
| 211 | vRaw, err := json.Marshal(v) |
nothing calls this directly
no test coverage detected
searching dependent graphs…