Ctrl K
ComunidadGuías…

changes_store_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package main

import (
	"encoding/json"
	"slices"
	"testing"
)

func TestKeepAlbumPreservesOriginalPartsAndNumericOrder(t *testing.T) {
	db := testStore(t)
	ctx := t.Context()
	source := channelKey{telegramPlatform, -100}
	first := []byte(`{"message_id":10,"caption":"first version"}`)
	second := []byte(`{"message_id":2,"caption":"second"}`)
	if err := db.keepAlbum(ctx, source, "album:a", [][]byte{first, second}); err != nil {
		t.Fatal(err)
	}
	if err := db.keepAlbum(ctx, source, "album:a", [][]byte{[]byte(`{"message_id":10,"caption":"replacement"}`)}); err != nil {
		t.Fatal(err)
	}
	payloads, err := db.albumPayloads(ctx, source, "album:a")
	if err != nil || len(payloads) != 2 || string(payloads[0]) != string(second) || string(payloads[1]) != string(first) {
		t.Fatalf("album snapshot changed or reordered: %q, %v", payloads, err)
	}
}

func TestReviseAlbumKeepsOtherPartsAndSeparatesLateFragments(t *testing.T) {
	db := testStore(t)
	ctx := t.Context()
	source := channelKey{telegramPlatform, -100}
	other := channelKey{telegramPlatform, -200}
	for _, seed := range []struct {
		source channelKey
		post   string
		parts  []string
	}{
		{source, "album:a", []string{`{"message_id":10,"caption":"ten"}`, `{"message_id":2,"caption":"two"}`}},
		{source, "album:a#3", []string{`{"message_id":3,"caption":"late"}`}},
		{other, "album:a", []string{`{"message_id":2,"caption":"other channel"}`}},
	} {
		var payloads [][]byte
		for _, part := range seed.parts {
			payloads = append(payloads, []byte(part))
		}
		if err := db.keepAlbum(ctx, seed.source, seed.post, payloads); err != nil {
			t.Fatal(err)
		}
	}
	for _, update := range []struct {
		mid, root, message string
		want               []string
	}{
		{"2", "album:a", `{"message_id":2,"caption":"edited two"}`, []string{"edited two", "ten"}},
		{"3", "album:a#3", `{"message_id":3,"caption":"edited late"}`, []string{"edited late"}},
		{"99", "", `{"message_id":99,"caption":"unknown"}`, nil},
	} {
		root, payloads, err := db.reviseAlbum(ctx, source, change{Group: "album:a", Mid: update.mid, Message: json.RawMessage(update.message)})
		if err != nil || root != update.root {
			t.Fatalf("revision root=%q, want %q, err=%v", root, update.root, err)
		}
		var captions []string
		for _, payload := range payloads {
			var part struct{ Caption string }
			if err := json.Unmarshal(payload, &part); err != nil {
				t.Fatal(err)
			}
			captions = append(captions, part.Caption)
		}
		if !slices.Equal(captions, update.want) {
			t.Fatalf("revision %s: captions=%q, want %q", update.mid, captions, update.want)
		}
	}
	payloads, err := db.albumPayloads(ctx, other, "album:a")
	if err != nil || len(payloads) != 1 || string(payloads[0]) != `{"message_id":2,"caption":"other channel"}` {
		t.Fatalf("another channel changed: %q, %v", payloads, err)
	}
}