package mapping

import (
	"bytes"
	"testing"

	semantic "github.com/pingcap-inc/nexuscrm-contract/pkg/runtime/outboundintentv1"
)

func TestOutboundMailAttachmentChunkMappingValidatesSemanticFrame(t *testing.T) {
	receipts := semantic.Receipts{
		ProtocolVersion: "1.0", CapabilityVersion: semantic.CapabilityName,
		CatalogRevision: 41, SchemaGeneration: 2, EngineGeneration: 3, SecurityEpoch: 4,
	}
	chunk := semantic.MailAttachmentChunk{
		FileName: "attachment.pdf", ContentType: "application/pdf", ContentLength: 1,
		ContentDigest: "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
		Data:          []byte("a"), Receipts: &receipts,
	}
	wire, err := ToWireOpenOutboundMailAttachmentChunk(chunk)
	if err != nil {
		t.Fatal(err)
	}
	roundTrip, err := FromWireOpenOutboundMailAttachmentChunk(wire)
	if err != nil || !bytes.Equal(roundTrip.Data, chunk.Data) || roundTrip.Receipts == nil {
		t.Fatalf("round trip = %#v, err = %v", roundTrip, err)
	}

	chunk.Data = nil
	if _, err := ToWireOpenOutboundMailAttachmentChunk(chunk); err == nil {
		t.Fatal("mapper accepted a zero-byte attachment frame")
	}
	wire.Data = nil
	if _, err := FromWireOpenOutboundMailAttachmentChunk(wire); err == nil {
		t.Fatal("mapper accepted malformed wire attachment frame")
	}
}
