package controlplane

import "testing"

func TestCanonicalL0PageLayoutPayloadHashPreservesNumericLexemes(t *testing.T) {
	tests := []struct {
		name  string
		left  string
		right string
	}{
		{
			name:  "integer above float64 exact range",
			left:  `9007199254740992`,
			right: `9007199254740993`,
		},
		{
			name:  "authored decimal scale",
			left:  `12.5`,
			right: `12.50`,
		},
	}
	for _, tc := range tests {
		t.Run(tc.name, func(t *testing.T) {
			layoutWith := func(number string) string {
				return `{"id":"layout-1","objectApiName":"Account","layoutName":"Default","headerActions":[{"name":"Run","config":{"value":` + number + `}}]}`
			}
			leftHash, err := canonicalL0PageLayoutPayloadHash(layoutWith(tc.left))
			if err != nil {
				t.Fatalf("canonicalL0PageLayoutPayloadHash(%s): %v", tc.left, err)
			}
			rightHash, err := canonicalL0PageLayoutPayloadHash(layoutWith(tc.right))
			if err != nil {
				t.Fatalf("canonicalL0PageLayoutPayloadHash(%s): %v", tc.right, err)
			}
			if leftHash == rightHash {
				t.Fatalf("distinct authored numbers %s and %s produced the same hash %s", tc.left, tc.right, leftHash)
			}
		})
	}
}
