// Copyright 2011 Google Inc. All rights reserved. // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. package mail import ( "testing" "github.com/golang/protobuf/proto" "google.golang.org/appengine/internal/aetesting" basepb "google.golang.org/appengine/internal/base" pb "google.golang.org/appengine/internal/mail" ) func TestMessageConstruction(t *testing.T) { var got *pb.MailMessage c := aetesting.FakeSingleContext(t, "mail", "Send", func(in *pb.MailMessage, out *basepb.VoidProto) error { got = in return nil }) msg := &Message{ Sender: "dsymonds@example.com", To: []string{"nigeltao@example.com"}, Body: "Hey, lunch time?", Attachments: []Attachment{ // Regression test for a prod bug. The address of a range variable was used when // constructing the outgoing proto, so multiple attachments used the same name. { Name: "att1.txt", Data: []byte("data1"), ContentID: "<att1>", }, { Name: "att2.txt", Data: []byte("data2"), }, }, } if err := Send(c, msg); err != nil { t.Fatalf("Send: %v", err) } want := &pb.MailMessage{ Sender: proto.String("dsymonds@example.com"), To: []string{"nigeltao@example.com"}, Subject: proto.String(""), TextBody: proto.String("Hey, lunch time?"), Attachment: []*pb.MailAttachment{ { FileName: proto.String("att1.txt"), Data: []byte("data1"), ContentID: proto.String("<att1>"), }, { FileName: proto.String("att2.txt"), Data: []byte("data2"), }, }, } if !proto.Equal(got, want) { t.Errorf("Bad proto for %+v\n got %v\nwant %v", msg, got, want) } }