0904
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
// Copyright 2026 tamakyi. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestVoteFormFields(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
db, cleanup := newTestDB(t)
|
||||
ctx := context.Background()
|
||||
|
||||
store := NewVoteFormFieldsStore(db)
|
||||
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
test func(t *testing.T, ctx context.Context, db *voteFormFields)
|
||||
}{
|
||||
{"Create", testVoteFormFieldsCreate},
|
||||
{"BulkCreate", testVoteFormFieldsBulkCreate},
|
||||
{"ListByVoteID", testVoteFormFieldsListByVoteID},
|
||||
{"DeleteByID", testVoteFormFieldsDeleteByID},
|
||||
{"DeleteByVoteID", testVoteFormFieldsDeleteByVoteID},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Cleanup(func() {
|
||||
if err := cleanup("vote_form_fields"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
tc.test(t, ctx, store.(*voteFormFields))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func testVoteFormFieldsCreate(t *testing.T, ctx context.Context, db *voteFormFields) {
|
||||
got, err := db.Create(ctx, CreateVoteFormFieldOptions{
|
||||
VoteID: 1,
|
||||
FieldType: VoteFormFieldTypeText,
|
||||
Label: "你的昵称",
|
||||
Required: true,
|
||||
MaxLength: 50,
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, uint(1), got.ID)
|
||||
require.True(t, got.Required)
|
||||
require.Equal(t, 50, got.MaxLength)
|
||||
}
|
||||
|
||||
func testVoteFormFieldsBulkCreate(t *testing.T, ctx context.Context, db *voteFormFields) {
|
||||
got, err := db.BulkCreate(ctx, 1, []CreateVoteFormFieldOptions{
|
||||
{FieldType: VoteFormFieldTypeText, Label: "昵称", Required: true, MaxLength: 20, SortOrder: 0},
|
||||
{FieldType: VoteFormFieldTypeTextarea, Label: "建议", Required: false, MaxLength: 500, SortOrder: 1},
|
||||
{FieldType: VoteFormFieldTypeRadio, Label: "满意度", Options: `["满意","一般","不满意"]`, SortOrder: 2},
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.Len(t, got, 3)
|
||||
require.Equal(t, VoteFormFieldTypeTextarea, got[1].FieldType)
|
||||
require.Equal(t, `["满意","一般","不满意"]`, got[2].Options)
|
||||
}
|
||||
|
||||
func testVoteFormFieldsListByVoteID(t *testing.T, ctx context.Context, db *voteFormFields) {
|
||||
_, err := db.BulkCreate(ctx, 1, []CreateVoteFormFieldOptions{
|
||||
{FieldType: VoteFormFieldTypeText, Label: "B", SortOrder: 1},
|
||||
{FieldType: VoteFormFieldTypeText, Label: "A", SortOrder: 0},
|
||||
})
|
||||
require.Nil(t, err)
|
||||
|
||||
got, err := db.ListByVoteID(ctx, 1)
|
||||
require.Nil(t, err)
|
||||
require.Len(t, got, 2)
|
||||
require.Equal(t, "A", got[0].Label, "按 SortOrder 升序")
|
||||
}
|
||||
|
||||
func testVoteFormFieldsDeleteByID(t *testing.T, ctx context.Context, db *voteFormFields) {
|
||||
_, err := db.Create(ctx, CreateVoteFormFieldOptions{VoteID: 1, FieldType: VoteFormFieldTypeText, Label: "A"})
|
||||
require.Nil(t, err)
|
||||
|
||||
t.Run("normal", func(t *testing.T) {
|
||||
require.Nil(t, db.DeleteByID(ctx, 1))
|
||||
got, err := db.ListByVoteID(ctx, 1)
|
||||
require.Nil(t, err)
|
||||
require.Len(t, got, 0)
|
||||
})
|
||||
|
||||
t.Run("not found", func(t *testing.T) {
|
||||
require.Equal(t, ErrVoteFormFieldNotExist, db.DeleteByID(ctx, 404))
|
||||
})
|
||||
}
|
||||
|
||||
func testVoteFormFieldsDeleteByVoteID(t *testing.T, ctx context.Context, db *voteFormFields) {
|
||||
_, err := db.BulkCreate(ctx, 1, []CreateVoteFormFieldOptions{
|
||||
{FieldType: VoteFormFieldTypeText, Label: "A"},
|
||||
{FieldType: VoteFormFieldTypeText, Label: "B"},
|
||||
})
|
||||
require.Nil(t, err)
|
||||
|
||||
require.Nil(t, db.DeleteByVoteID(ctx, 1))
|
||||
got, err := db.ListByVoteID(ctx, 1)
|
||||
require.Nil(t, err)
|
||||
require.Len(t, got, 0)
|
||||
}
|
||||
Reference in New Issue
Block a user