| 1006 | } |
| 1007 | |
| 1008 | func TestChat_FileMetadataConversion(t *testing.T) { |
| 1009 | t.Parallel() |
| 1010 | |
| 1011 | ownerID := uuid.New() |
| 1012 | orgID := uuid.New() |
| 1013 | fileID := uuid.New() |
| 1014 | now := dbtime.Now() |
| 1015 | |
| 1016 | chat := database.Chat{ |
| 1017 | ID: uuid.New(), |
| 1018 | OwnerID: ownerID, |
| 1019 | LastModelConfigID: uuid.New(), |
| 1020 | Title: "file metadata test", |
| 1021 | Status: database.ChatStatusWaiting, |
| 1022 | CreatedAt: now, |
| 1023 | UpdatedAt: now, |
| 1024 | } |
| 1025 | |
| 1026 | rows := []database.GetChatFileMetadataByChatIDRow{ |
| 1027 | { |
| 1028 | ID: fileID, |
| 1029 | OwnerID: ownerID, |
| 1030 | OrganizationID: orgID, |
| 1031 | Name: "screenshot.png", |
| 1032 | Mimetype: "image/png", |
| 1033 | CreatedAt: now, |
| 1034 | }, |
| 1035 | } |
| 1036 | |
| 1037 | result := db2sdk.Chat(chat, nil, rows) |
| 1038 | |
| 1039 | require.Len(t, result.Files, 1) |
| 1040 | f := result.Files[0] |
| 1041 | require.Equal(t, fileID, f.ID) |
| 1042 | require.Equal(t, ownerID, f.OwnerID, "OwnerID must be mapped from DB row") |
| 1043 | require.Equal(t, orgID, f.OrganizationID, "OrganizationID must be mapped from DB row") |
| 1044 | require.Equal(t, "screenshot.png", f.Name) |
| 1045 | require.Equal(t, "image/png", f.MimeType) |
| 1046 | require.Equal(t, now, f.CreatedAt) |
| 1047 | |
| 1048 | // Verify JSON serialization uses snake_case for mime_type. |
| 1049 | data, err := json.Marshal(f) |
| 1050 | require.NoError(t, err) |
| 1051 | require.Contains(t, string(data), `"mime_type"`) |
| 1052 | require.NotContains(t, string(data), `"mimetype"`) |
| 1053 | } |
| 1054 | |
| 1055 | func TestChat_NilFilesOmitted(t *testing.T) { |
| 1056 | t.Parallel() |