Ctrl K
ComunidadGuías…

cmd/langpackfetch/main_test.go

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

Archivo original ↗Preguntar a KiBot
package main

import (
	"crypto/sha256"
	"encoding/hex"
	"os"
	"path/filepath"
	"strings"
	"testing"

	"github.com/iamxvbaba/td/tg"
)

func TestWritePack(t *testing.T) {
	root := t.TempDir()
	diff := &tg.LangPackDifference{
		LangCode: "pt-br",
		Version:  42,
		Strings: []tg.LangPackStringClass{
			&tg.LangPackString{Key: "plain", Value: "value"},
			&tg.LangPackStringPluralized{Key: "items", OneValue: "one", OtherValue: "many"},
			&tg.LangPackStringDeleted{Key: "removed"},
		},
	}
	written, err := writePack(root, "tdesktop", diff)
	if err != nil {
		t.Fatal(err)
	}
	wantPath := filepath.Join(root, "tdesktop", "tdesktop_pt-br_v42.strings")
	if written.Path != wantPath {
		t.Fatalf("path = %q, want %q", written.Path, wantPath)
	}
	data, err := os.ReadFile(wantPath)
	if err != nil {
		t.Fatal(err)
	}
	text := string(data)
	for _, want := range []string{`"plain" = "value";`, `"items#one" = "one";`, `"items#other" = "many";`} {
		if !strings.Contains(text, want) {
			t.Errorf("output does not contain %q: %s", want, text)
		}
	}
	if strings.Contains(text, "removed") {
		t.Errorf("deleted key was emitted: %s", text)
	}
	sum := sha256.Sum256(data)
	if written.SHA256 != hex.EncodeToString(sum[:]) {
		t.Fatalf("sha256 = %q, want %x", written.SHA256, sum)
	}
}

func TestWritePackRejectsPathComponents(t *testing.T) {
	_, err := writePack(t.TempDir(), "../android", &tg.LangPackDifference{LangCode: "en", Version: 1})
	if err == nil {
		t.Fatal("expected invalid pack error")
	}
	_, err = writePack(t.TempDir(), "android", &tg.LangPackDifference{LangCode: "../en", Version: 1})
	if err == nil {
		t.Fatal("expected invalid language code error")
	}
}

func TestWriteFileAtomicReplacesExisting(t *testing.T) {
	path := filepath.Join(t.TempDir(), "manifest.json")
	if err := writeFileAtomic(path, []byte("first")); err != nil {
		t.Fatal(err)
	}
	if err := writeFileAtomic(path, []byte("second")); err != nil {
		t.Fatal(err)
	}
	data, err := os.ReadFile(path)
	if err != nil {
		t.Fatal(err)
	}
	if string(data) != "second" {
		t.Fatalf("content = %q, want second", data)
	}
}