Files
gitea-tea/internal/services/comments_test.go
T

77 lines
2.9 KiB
Go

// Copyright 2026 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package services
import (
"context"
"encoding/json"
"net/http"
"testing"
gitea "gitea.dev/sdk"
"github.com/stretchr/testify/require"
)
func TestCommentFromMapsServerFields(t *testing.T) {
require.Equal(t, Comment{ID: 2, Body: "text", Author: "alice", CreatedAt: "2026-10-01T12:00:00Z", UpdatedAt: "2026-10-02T12:00:00+02:00"},
commentFrom(decode[gitea.Comment](t, `{"id":2,"body":"text","user":{"login":"alice"},"created_at":"2026-10-01T12:00:00Z","updated_at":"2026-10-02T12:00:00+02:00"}`)))
}
func TestCommentPaginationIsLocal(t *testing.T) {
client := newTestClient(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodGet {
require.Equal(t, "0", r.URL.Query().Get("limit"))
_, _ = w.Write([]byte(`[{"id":1},{"id":2},{"id":3}]`))
return
}
var body map[string]string
require.NoError(t, json.NewDecoder(r.Body).Decode(&body))
require.Equal(t, "text", body["body"])
require.Equal(t, "/api/v1/repos/alice/project/issues/7/comments", r.URL.Path)
_, _ = w.Write([]byte(`{"id":8,"body":"text","html_url":"https://example.test/comment","user":{"login":"alice"}}`))
}))
service := Comments{Client: client, Repository: "alice/project"}
items, err := service.Page(context.Background(), 7, 2, 2)
require.NoError(t, err)
require.Len(t, items.Items, 1)
require.Equal(t, int64(3), items.Items[0].ID)
require.False(t, items.More)
first, err := service.Page(context.Background(), 7, 2, 1)
require.NoError(t, err)
require.True(t, first.More)
require.Equal(t, 3, first.Total)
items, err = service.Page(context.Background(), 7, 2, 3)
require.NoError(t, err)
require.Empty(t, items.Items)
require.NotNil(t, items.Items)
item, err := service.Create(context.Background(), 7, "text")
require.NoError(t, err)
require.Equal(t, "alice", item.Author)
require.Equal(t, "https://example.test/comment", item.URL)
}
func TestRemoveMilestoneRejectsDifferentMembership(t *testing.T) {
mutations := 0
client := newTestClient(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
mutations++
w.WriteHeader(http.StatusNoContent)
return
}
_, _ = w.Write([]byte(`{"milestone":{"id":9}}`))
}))
service := Issues{Client: client, Repository: "alice/project"}
_, err := service.RemoveMilestone(context.Background(), 7, Milestone{ID: 8, Title: "v1.0"})
require.EqualError(t, err, `#7 is not in milestone "v1.0"`)
require.Zero(t, mutations)
}
func TestCommentViewExplainsAnEmptyAnswerForReviewComments(t *testing.T) {
client := newTestClient(t, http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusNoContent)
}))
_, err := Comments{Client: client, Repository: "alice/project"}.View(context.Background(), 9)
require.EqualError(t, err, "comment 9 in alice/project is not a plain comment, such as an inline review comment, which this command cannot show")
}