shithub: furgit

ref: 627258d8a515397d65d0d7c086d12783c684fcd3
dir: /ident_test.go/

View raw version
package furgit

import (
	"bytes"
	"testing"
)

func TestIdentSerialize(t *testing.T) {
	tests := []struct {
		name  string
		ident Ident
	}{
		{
			name: "positive offset",
			ident: Ident{
				Name:          []byte("John Doe"),
				Email:         []byte("john@example.org"),
				WhenUnix:      1234567890,
				OffsetMinutes: 120,
			},
		},
		{
			name: "negative offset",
			ident: Ident{
				Name:          []byte("Jane Smith"),
				Email:         []byte("jane@example.org"),
				WhenUnix:      9876543210,
				OffsetMinutes: -300,
			},
		},
		{
			name: "zero offset",
			ident: Ident{
				Name:          []byte("UTC User"),
				Email:         []byte("utc@example.org"),
				WhenUnix:      1000000000,
				OffsetMinutes: 0,
			},
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			serialized, err := tt.ident.Serialize()
			if err != nil {
				t.Fatalf("Serialize failed: %v", err)
			}

			parsed, err := parseIdent(serialized)
			if err != nil {
				t.Fatalf("parseIdent failed: %v", err)
			}

			if !bytes.HasPrefix(parsed.Name, tt.ident.Name) {
				t.Errorf("name: got %q, want prefix %q", parsed.Name, tt.ident.Name)
			}
			if !bytes.Equal(parsed.Email, tt.ident.Email) {
				t.Errorf("email: got %q, want %q", parsed.Email, tt.ident.Email)
			}
			if parsed.WhenUnix != tt.ident.WhenUnix {
				t.Errorf("whenUnix: got %d, want %d", parsed.WhenUnix, tt.ident.WhenUnix)
			}
			if parsed.OffsetMinutes != tt.ident.OffsetMinutes {
				t.Errorf("offsetMinutes: got %d, want %d", parsed.OffsetMinutes, tt.ident.OffsetMinutes)
			}

			when := tt.ident.When()
			if when.Unix() != tt.ident.WhenUnix {
				t.Errorf("When().Unix(): got %d, want %d", when.Unix(), tt.ident.WhenUnix)
			}
		})
	}
}