func (s *EventSuite) TestFullEventMarshal(c *C) { now := time.Now().UTC() end := now.Add(time.Hour) oneDay := time.Hour * 24 oneWeek := oneDay * 7 event := NewEventWithEnd("1:2:3", now, end) uri, _ := url.Parse("http://taviti.com/some/attachment.ics") event.Attachment = values.NewUrl(*uri) event.Attendees = []*values.AttendeeContact{ values.NewAttendeeContact("Jon Azoff", "*****@*****.**"), values.NewAttendeeContact("Matthew Davie", "*****@*****.**"), } event.Categories = values.NewCSV("vinyasa", "level 1") event.Comments = values.NewComments("Great class, 5 stars!", "I love this class!") event.ContactInfo = values.NewCSV("Send us an email!", "<*****@*****.**>") event.Created = event.DateStart event.Description = "An all-levels class combining strength and flexibility with breath" ex1 := values.NewDateTime(now.Add(oneWeek)) ex2 := values.NewDateTime(now.Add(oneWeek * 2)) event.ExceptionDateTimes = values.NewExceptionDateTimes(ex1, ex2) event.Geo = values.NewGeo(37.747643, -122.445400) event.LastModified = event.DateStart event.Location = values.NewLocation("Dolores Park") event.Organizer = values.NewOrganizerContact("Jon Azoff", "*****@*****.**") event.Priority = 1 event.RecurrenceId = event.DateStart r1 := values.NewDateTime(now.Add(oneWeek + oneDay)) r2 := values.NewDateTime(now.Add(oneWeek*2 + oneDay)) event.RecurrenceDateTimes = values.NewRecurrenceDateTimes(r1, r2) event.AddRecurrenceRules(values.NewRecurrenceRule(values.WeekRecurrenceFrequency)) uri, _ = url.Parse("*****@*****.**") event.RelatedTo = values.NewUrl(*uri) event.Resources = values.NewCSV("yoga mat", "towel") event.Sequence = 1 event.Status = values.TentativeEventStatus event.Summary = "Jon's Super-Sweaty Vinyasa 1" event.TimeTransparency = values.OpaqueTimeTransparency uri, _ = url.Parse("http://student.taviti.com/san-francisco/jonathan-azoff/vinyasa-1") event.Url = values.NewUrl(*uri) enc, err := icalendar.Marshal(event) if err != nil { c.Fatal(err.Error()) } tmpl := "BEGIN:VEVENT\r\nUID:1:2:3\r\nDTSTAMP:%sZ\r\nDTSTART:%sZ\r\nDTEND:%sZ\r\nCREATED:%sZ\r\n" + "DESCRIPTION:An all-levels class combining strength and flexibility with breath\r\n" + "GEO:37.747643 -122.445400\r\nLAST-MODIFIED:%sZ\r\nLOCATION:Dolores Park\r\n" + "ORGANIZER;CN=\"Jon Azoff\":MAILTO:[email protected]\r\nPRIORITY:1\r\nSEQUENCE:1\r\nSTATUS:TENTATIVE\r\n" + "SUMMARY:Jon's Super-Sweaty Vinyasa 1\r\nTRANSP:OPAQUE\r\n" + "URL;VALUE=URI:http://student.taviti.com/san-francisco/jonathan-azoff/vinyasa-1\r\n" + "RECURRENCE-ID:%sZ\r\nRRULE:FREQ=WEEKLY\r\nATTACH;VALUE=URI:http://taviti.com/some/attachment.ics\r\n" + "ATTENDEE;CN=\"Jon Azoff\":MAILTO:[email protected]\r\nATTENDEE;CN=\"Matthew Davie\":MAILTO:[email protected]\r\n" + "CATEGORIES:vinyasa,level 1\r\nCOMMENT:Great class, 5 stars!\r\nCOMMENT:I love this class!\r\n" + "CONTACT:Send us an email!,<*****@*****.**>\r\nEXDATE:%s,%s\r\nRDATE:%s,%s\r\n" + "RELATED-TO;VALUE=URI:[email protected]\r\nRESOURCES:yoga mat,towel\r\nEND:VEVENT" sdate := now.Format(values.DateTimeFormatString) edate := end.Format(values.DateTimeFormatString) c.Assert(enc, Equals, fmt.Sprintf(tmpl, sdate, sdate, edate, sdate, sdate, sdate, ex1, ex2, r1, r2)) }
func NewDynamicTimeZone(location *time.Location) *TimeZone { t := new(TimeZone) t.Id = location.String() t.ExtLocationName = location.String() t.Url = values.NewUrl(url.URL{ Scheme: "http", Host: "tzurl.org", Path: fmt.Sprintf("/zoneinfo/%s", t.Id), }) return t }