tilia-vobject 4.0.0.pre.alpha5 → 4.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.sabre.md +59 -2
- data/Gemfile +1 -8
- data/Gemfile.lock +18 -12
- data/LICENSE +1 -1
- data/LICENSE.sabre +1 -1
- data/lib/tilia/v_object.rb +1 -0
- data/lib/tilia/v_object/birthday_calendar_generator.rb +11 -11
- data/lib/tilia/v_object/cli.rb +39 -38
- data/lib/tilia/v_object/component.rb +47 -50
- data/lib/tilia/v_object/component/available.rb +4 -37
- data/lib/tilia/v_object/component/v_alarm.rb +6 -18
- data/lib/tilia/v_object/component/v_availability.rb +6 -39
- data/lib/tilia/v_object/component/v_calendar.rb +66 -98
- data/lib/tilia/v_object/component/v_card.rb +42 -69
- data/lib/tilia/v_object/component/v_event.rb +5 -17
- data/lib/tilia/v_object/component/v_free_busy.rb +4 -16
- data/lib/tilia/v_object/component/v_journal.rb +16 -16
- data/lib/tilia/v_object/component/v_time_zone.rb +2 -14
- data/lib/tilia/v_object/component/v_todo.rb +17 -36
- data/lib/tilia/v_object/date_time_parser.rb +24 -24
- data/lib/tilia/v_object/document.rb +25 -25
- data/lib/tilia/v_object/free_busy_data.rb +7 -7
- data/lib/tilia/v_object/free_busy_generator.rb +73 -75
- data/lib/tilia/v_object/i_tip.rb +1 -0
- data/lib/tilia/v_object/i_tip/broker.rb +134 -116
- data/lib/tilia/v_object/i_tip/i_tip_exception.rb +1 -1
- data/lib/tilia/v_object/i_tip/message.rb +13 -13
- data/lib/tilia/v_object/invalid_data_exception.rb +8 -0
- data/lib/tilia/v_object/node.rb +22 -27
- data/lib/tilia/v_object/parameter.rb +22 -22
- data/lib/tilia/v_object/parse_exception.rb +1 -1
- data/lib/tilia/v_object/parser.rb +1 -0
- data/lib/tilia/v_object/parser/json.rb +9 -19
- data/lib/tilia/v_object/parser/mime_dir.rb +73 -39
- data/lib/tilia/v_object/parser/parser.rb +9 -14
- data/lib/tilia/v_object/parser/xml.rb +33 -50
- data/lib/tilia/v_object/parser/xml/element.rb +1 -0
- data/lib/tilia/v_object/parser/xml/element/key_value.rb +2 -2
- data/lib/tilia/v_object/property.rb +52 -52
- data/lib/tilia/v_object/property/binary.rb +10 -10
- data/lib/tilia/v_object/property/boolean.rb +6 -6
- data/lib/tilia/v_object/property/flat_text.rb +3 -3
- data/lib/tilia/v_object/property/float_value.rb +10 -10
- data/lib/tilia/v_object/property/i_calendar.rb +1 -0
- data/lib/tilia/v_object/property/i_calendar/cal_address.rb +3 -3
- data/lib/tilia/v_object/property/i_calendar/date_time.rb +29 -57
- data/lib/tilia/v_object/property/i_calendar/duration.rb +6 -6
- data/lib/tilia/v_object/property/i_calendar/period.rb +10 -10
- data/lib/tilia/v_object/property/i_calendar/recur.rb +16 -24
- data/lib/tilia/v_object/property/integer_value.rb +8 -8
- data/lib/tilia/v_object/property/text.rb +21 -36
- data/lib/tilia/v_object/property/time.rb +29 -6
- data/lib/tilia/v_object/property/unknown.rb +2 -2
- data/lib/tilia/v_object/property/uri.rb +24 -5
- data/lib/tilia/v_object/property/utc_offset.rb +5 -5
- data/lib/tilia/v_object/property/v_card.rb +1 -0
- data/lib/tilia/v_object/property/v_card/date.rb +3 -3
- data/lib/tilia/v_object/property/v_card/date_and_or_time.rb +30 -42
- data/lib/tilia/v_object/property/v_card/date_time.rb +1 -1
- data/lib/tilia/v_object/property/v_card/language_tag.rb +4 -4
- data/lib/tilia/v_object/property/v_card/time_stamp.rb +5 -5
- data/lib/tilia/v_object/reader.rb +12 -11
- data/lib/tilia/v_object/recur.rb +2 -0
- data/lib/tilia/v_object/recur/event_iterator.rb +30 -27
- data/lib/tilia/v_object/recur/max_instances_exceeded_exception.rb +10 -0
- data/lib/tilia/v_object/recur/no_instances_exception.rb +1 -1
- data/lib/tilia/v_object/recur/r_date_iterator.rb +15 -41
- data/lib/tilia/v_object/recur/r_rule_iterator.rb +23 -156
- data/lib/tilia/v_object/settings.rb +16 -0
- data/lib/tilia/v_object/splitter.rb +1 -0
- data/lib/tilia/v_object/splitter/i_calendar.rb +5 -5
- data/lib/tilia/v_object/splitter/splitter_interface.rb +2 -2
- data/lib/tilia/v_object/splitter/v_card.rb +5 -5
- data/lib/tilia/v_object/string_util.rb +25 -9
- data/lib/tilia/v_object/time_zone_data.rb +1 -0
- data/lib/tilia/v_object/time_zone_util.rb +6 -6
- data/lib/tilia/v_object/uuid_util.rb +3 -3
- data/lib/tilia/v_object/v_card_converter.rb +24 -21
- data/lib/tilia/v_object/version.rb +1 -1
- data/lib/tilia/v_object/writer.rb +7 -7
- data/test/test_helper.rb +3 -3
- data/test/v_object/birthday_calendar_generator_test.rb +22 -0
- data/test/v_object/component/v_alarm_test.rb +3 -1
- data/test/v_object/component/v_calendar_test.rb +40 -4
- data/test/v_object/component/v_card_test.rb +1 -1
- data/test/v_object/component_test.rb +5 -3
- data/test/v_object/date_time_parser_test.rb +15 -5
- data/test/v_object/free_busy_generator_test.rb +5 -5
- data/test/v_object/i_tip/broker_attendee_reply_test.rb +19 -0
- data/test/v_object/i_tip/broker_delete_event_test.rb +146 -2
- data/test/v_object/i_tip/broker_new_event_test.rb +21 -0
- data/test/v_object/i_tip/broker_process_reply_test.rb +10 -0
- data/test/v_object/i_tip/broker_tester.rb +1 -1
- data/test/v_object/i_tip/broker_update_event_test.rb +36 -0
- data/test/v_object/issue259_test.rb +24 -0
- data/test/v_object/issue40_test.rb +3 -1
- data/test/v_object/j_cal_test.rb +15 -12
- data/test/v_object/parser/json_test.rb +5 -5
- data/test/v_object/parser/mime_dir_test.rb +109 -0
- data/test/v_object/property/binary_test.rb +4 -2
- data/test/v_object/property/i_calendar/date_time_test.rb +3 -1
- data/test/v_object/property/uri_test.rb +23 -0
- data/test/v_object/recur/event_iterator/by_month_in_daily_test.rb +1 -1
- data/test/v_object/recur/event_iterator/by_set_pos_hang_test.rb +1 -1
- data/test/v_object/recur/event_iterator/expand_floating_times_test.rb +9 -9
- data/test/v_object/recur/event_iterator/handle_r_date_expand_test.rb +51 -0
- data/test/v_object/recur/event_iterator/incorrect_expand_test.rb +3 -5
- data/test/v_object/recur/event_iterator/infinite_loop_problem_test.rb +3 -1
- data/test/v_object/{issue26_test.rb → recur/event_iterator/issue26_test.rb} +3 -1
- data/test/v_object/recur/event_iterator/main_test.rb +9 -3
- data/test/v_object/recur/event_iterator/max_instances_test.rb +38 -0
- data/test/v_object/recur/event_iterator/missing_overridden_test.rb +3 -5
- data/test/v_object/recur/event_iterator/no_instances_test.rb +5 -3
- data/test/v_object/recur/event_iterator/override_first_event_test.rb +9 -9
- data/test/v_object/recur/r_date_iterator_test.rb +18 -0
- data/test/v_object/recur/r_rule_iterator_test.rb +4 -4
- data/test/v_object/splitter/i_calendar_test.rb +27 -7
- data/test/v_object/splitter/v_card_test.rb +5 -3
- data/test/v_object/test_case.rb +14 -4
- data/tilia-vobject.gemspec +2 -2
- metadata +17 -11
@@ -13,11 +13,11 @@ module Tilia
|
|
13
13
|
# It only generates the freebusy report for the following time-range:
|
14
14
|
# 2011-01-01 11:00:00 until 2011-01-03 11:11:11
|
15
15
|
#
|
16
|
-
# @param
|
17
|
-
# @param array input
|
18
|
-
# @param
|
19
|
-
# @param
|
20
|
-
# @return void
|
16
|
+
# @param [String] expected
|
17
|
+
# @param [array] input
|
18
|
+
# @param [String, nil] time_zone
|
19
|
+
# @param [String] vavailability
|
20
|
+
# @return [void]
|
21
21
|
def assert_free_busy_report(expected, input, time_zone = nil, vavailability = nil)
|
22
22
|
utc = ActiveSupport::TimeZone.new('UTC')
|
23
23
|
gen = Tilia::VObject::FreeBusyGenerator.new(
|
@@ -52,6 +52,7 @@ CALSCALE:GREGORIAN
|
|
52
52
|
METHOD:REPLY
|
53
53
|
BEGIN:VEVENT
|
54
54
|
UID:foobar
|
55
|
+
DTSTAMP:**ANY**
|
55
56
|
SEQUENCE:1
|
56
57
|
DTSTART:20140716T120000Z
|
57
58
|
SUMMARY:B-day party
|
@@ -156,6 +157,7 @@ CALSCALE:GREGORIAN
|
|
156
157
|
METHOD:REPLY
|
157
158
|
BEGIN:VEVENT
|
158
159
|
UID:foobar
|
160
|
+
DTSTAMP:**ANY**
|
159
161
|
SEQUENCE:1
|
160
162
|
DTSTART:20140726T120000Z
|
161
163
|
SUMMARY:Daily sprint
|
@@ -165,6 +167,7 @@ ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
|
|
165
167
|
END:VEVENT
|
166
168
|
BEGIN:VEVENT
|
167
169
|
UID:foobar
|
170
|
+
DTSTAMP:**ANY**
|
168
171
|
SEQUENCE:1
|
169
172
|
DTSTART:20140724T120000Z
|
170
173
|
SUMMARY:Daily sprint
|
@@ -174,6 +177,7 @@ ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
|
|
174
177
|
END:VEVENT
|
175
178
|
BEGIN:VEVENT
|
176
179
|
UID:foobar
|
180
|
+
DTSTAMP:**ANY**
|
177
181
|
SEQUENCE:1
|
178
182
|
DTSTART:20140728T120000Z
|
179
183
|
SUMMARY:Daily sprint
|
@@ -183,6 +187,7 @@ ATTENDEE;PARTSTAT=TENTATIVE;CN=One:mailto:one@example.org
|
|
183
187
|
END:VEVENT
|
184
188
|
BEGIN:VEVENT
|
185
189
|
UID:foobar
|
190
|
+
DTSTAMP:**ANY**
|
186
191
|
SEQUENCE:1
|
187
192
|
DTSTART:20140729T120000Z
|
188
193
|
SUMMARY:Daily sprint
|
@@ -192,6 +197,7 @@ ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
|
|
192
197
|
END:VEVENT
|
193
198
|
BEGIN:VEVENT
|
194
199
|
UID:foobar
|
200
|
+
DTSTAMP:**ANY**
|
195
201
|
SEQUENCE:1
|
196
202
|
DTSTART:20140725T120000Z
|
197
203
|
SUMMARY:Daily sprint
|
@@ -295,6 +301,7 @@ CALSCALE:GREGORIAN
|
|
295
301
|
METHOD:REPLY
|
296
302
|
BEGIN:VEVENT
|
297
303
|
UID:foobar
|
304
|
+
DTSTAMP:**ANY**
|
298
305
|
SEQUENCE:1
|
299
306
|
DTSTART;VALUE=DATE:20140726
|
300
307
|
RECURRENCE-ID;VALUE=DATE:20140726
|
@@ -303,6 +310,7 @@ ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
|
|
303
310
|
END:VEVENT
|
304
311
|
BEGIN:VEVENT
|
305
312
|
UID:foobar
|
313
|
+
DTSTAMP:**ANY**
|
306
314
|
SEQUENCE:1
|
307
315
|
DTSTART;VALUE=DATE:20140724
|
308
316
|
RECURRENCE-ID;VALUE=DATE:20140724
|
@@ -311,6 +319,7 @@ ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
|
|
311
319
|
END:VEVENT
|
312
320
|
BEGIN:VEVENT
|
313
321
|
UID:foobar
|
322
|
+
DTSTAMP:**ANY**
|
314
323
|
SEQUENCE:1
|
315
324
|
DTSTART;VALUE=DATE:20140728
|
316
325
|
RECURRENCE-ID;VALUE=DATE:20140728
|
@@ -319,6 +328,7 @@ ATTENDEE;PARTSTAT=TENTATIVE;CN=One:mailto:one@example.org
|
|
319
328
|
END:VEVENT
|
320
329
|
BEGIN:VEVENT
|
321
330
|
UID:foobar
|
331
|
+
DTSTAMP:**ANY**
|
322
332
|
SEQUENCE:1
|
323
333
|
DTSTART;VALUE=DATE:20140729
|
324
334
|
RECURRENCE-ID;VALUE=DATE:20140729
|
@@ -327,6 +337,7 @@ ATTENDEE;PARTSTAT=ACCEPTED;CN=One:mailto:one@example.org
|
|
327
337
|
END:VEVENT
|
328
338
|
BEGIN:VEVENT
|
329
339
|
UID:foobar
|
340
|
+
DTSTAMP:**ANY**
|
330
341
|
SEQUENCE:1
|
331
342
|
DTSTART;VALUE=DATE:20140725
|
332
343
|
RECURRENCE-ID;VALUE=DATE:20140725
|
@@ -417,6 +428,7 @@ CALSCALE:GREGORIAN
|
|
417
428
|
METHOD:REPLY
|
418
429
|
BEGIN:VEVENT
|
419
430
|
UID:foobar
|
431
|
+
DTSTAMP:**ANY**
|
420
432
|
SEQUENCE:1
|
421
433
|
DTSTART:20140716T120000Z
|
422
434
|
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
@@ -514,6 +526,7 @@ CALSCALE:GREGORIAN
|
|
514
526
|
METHOD:REPLY
|
515
527
|
BEGIN:VEVENT
|
516
528
|
UID:foobar
|
529
|
+
DTSTAMP:**ANY**
|
517
530
|
SEQUENCE:1
|
518
531
|
DTSTART:20140818T200000Z
|
519
532
|
RECURRENCE-ID:20140818T200000Z
|
@@ -577,6 +590,7 @@ CALSCALE:GREGORIAN
|
|
577
590
|
METHOD:REPLY
|
578
591
|
BEGIN:VEVENT
|
579
592
|
UID:foobar
|
593
|
+
DTSTAMP:**ANY**
|
580
594
|
SEQUENCE:1
|
581
595
|
DTSTART;TZID=America/Toronto:20140818T200000
|
582
596
|
RECURRENCE-ID;TZID=America/Toronto:20140818T200000
|
@@ -641,6 +655,7 @@ CALSCALE:GREGORIAN
|
|
641
655
|
METHOD:REPLY
|
642
656
|
BEGIN:VEVENT
|
643
657
|
UID:foobar
|
658
|
+
DTSTAMP:**ANY**
|
644
659
|
SEQUENCE:1
|
645
660
|
DTSTART;VALUE=DATE:20140818
|
646
661
|
SUMMARY:Weekly meeting
|
@@ -702,6 +717,7 @@ CALSCALE:GREGORIAN
|
|
702
717
|
METHOD:REPLY
|
703
718
|
BEGIN:VEVENT
|
704
719
|
UID:foobar
|
720
|
+
DTSTAMP:**ANY**
|
705
721
|
SEQUENCE:1
|
706
722
|
DTSTART:20140716T120000Z
|
707
723
|
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
@@ -877,6 +893,7 @@ CALSCALE:GREGORIAN
|
|
877
893
|
METHOD:REPLY
|
878
894
|
BEGIN:VEVENT
|
879
895
|
UID:foobar
|
896
|
+
DTSTAMP:**ANY**
|
880
897
|
SEQUENCE:1
|
881
898
|
DTSTART;VALUE=DATE:20140716
|
882
899
|
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
@@ -942,6 +959,7 @@ CALSCALE:GREGORIAN
|
|
942
959
|
METHOD:REPLY
|
943
960
|
BEGIN:VEVENT
|
944
961
|
UID:foobar
|
962
|
+
DTSTAMP:**ANY**
|
945
963
|
SEQUENCE:1
|
946
964
|
DTSTART:20140724T120000Z
|
947
965
|
SUMMARY:Daily sprint
|
@@ -1023,6 +1041,7 @@ CALSCALE:GREGORIAN
|
|
1023
1041
|
METHOD:REPLY
|
1024
1042
|
BEGIN:VEVENT
|
1025
1043
|
UID:foobar
|
1044
|
+
DTSTAMP:**ANY**
|
1026
1045
|
SEQUENCE:1
|
1027
1046
|
DTSTART:20140717T120000Z
|
1028
1047
|
SUMMARY:B-day party
|
@@ -4,7 +4,7 @@ require 'v_object/i_tip/broker_tester'
|
|
4
4
|
module Tilia
|
5
5
|
module VObject
|
6
6
|
class BrokerDeleteEventTest < ITip::BrokerTester
|
7
|
-
def
|
7
|
+
def test_organizer_delete_with_dtend
|
8
8
|
old_message = <<ICS
|
9
9
|
BEGIN:VCALENDAR
|
10
10
|
VERSION:2.0
|
@@ -16,6 +16,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
16
16
|
ATTENDEE;CN=One:mailto:one@example.org
|
17
17
|
ATTENDEE;CN=Two:mailto:two@example.org
|
18
18
|
DTSTART:20140716T120000Z
|
19
|
+
DTEND:20140716T130000Z
|
19
20
|
END:VEVENT
|
20
21
|
END:VCALENDAR
|
21
22
|
ICS
|
@@ -41,9 +42,11 @@ CALSCALE:GREGORIAN
|
|
41
42
|
METHOD:CANCEL
|
42
43
|
BEGIN:VEVENT
|
43
44
|
UID:foobar
|
45
|
+
DTSTAMP:**ANY**
|
44
46
|
SEQUENCE:2
|
45
47
|
SUMMARY:foo
|
46
48
|
DTSTART:20140716T120000Z
|
49
|
+
DTEND:20140716T130000Z
|
47
50
|
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
48
51
|
ATTENDEE;CN=One:mailto:one@example.org
|
49
52
|
END:VEVENT
|
@@ -66,9 +69,11 @@ CALSCALE:GREGORIAN
|
|
66
69
|
METHOD:CANCEL
|
67
70
|
BEGIN:VEVENT
|
68
71
|
UID:foobar
|
72
|
+
DTSTAMP:**ANY**
|
69
73
|
SEQUENCE:2
|
70
74
|
SUMMARY:foo
|
71
75
|
DTSTART:20140716T120000Z
|
76
|
+
DTEND:20140716T130000Z
|
72
77
|
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
73
78
|
ATTENDEE;CN=Two:mailto:two@example.org
|
74
79
|
END:VEVENT
|
@@ -80,7 +85,7 @@ ICS
|
|
80
85
|
parse(old_message, new_message, expected, 'mailto:strunk@example.org')
|
81
86
|
end
|
82
87
|
|
83
|
-
def
|
88
|
+
def test_attendee_delete_with_duration
|
84
89
|
old_message = <<ICS
|
85
90
|
BEGIN:VCALENDAR
|
86
91
|
VERSION:2.0
|
@@ -92,6 +97,142 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
92
97
|
ATTENDEE;CN=One:mailto:one@example.org
|
93
98
|
ATTENDEE;CN=Two:mailto:two@example.org
|
94
99
|
DTSTART:20140716T120000Z
|
100
|
+
DURATION:PT1H
|
101
|
+
END:VEVENT
|
102
|
+
END:VCALENDAR
|
103
|
+
ICS
|
104
|
+
|
105
|
+
new_message = nil
|
106
|
+
|
107
|
+
version = Version::VERSION
|
108
|
+
|
109
|
+
expected = [
|
110
|
+
{
|
111
|
+
'uid' => 'foobar',
|
112
|
+
'method' => 'CANCEL',
|
113
|
+
'component' => 'VEVENT',
|
114
|
+
'sender' => 'mailto:strunk@example.org',
|
115
|
+
'senderName' => 'Strunk',
|
116
|
+
'recipient' => 'mailto:one@example.org',
|
117
|
+
'recipientName' => 'One',
|
118
|
+
'message' => <<ICS
|
119
|
+
BEGIN:VCALENDAR
|
120
|
+
VERSION:2.0
|
121
|
+
PRODID:-//Tilia//Tilia VObject #{version}//EN
|
122
|
+
CALSCALE:GREGORIAN
|
123
|
+
METHOD:CANCEL
|
124
|
+
BEGIN:VEVENT
|
125
|
+
UID:foobar
|
126
|
+
DTSTAMP:**ANY**
|
127
|
+
SEQUENCE:2
|
128
|
+
SUMMARY:foo
|
129
|
+
DTSTART:20140716T120000Z
|
130
|
+
DURATION:PT1H
|
131
|
+
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
132
|
+
ATTENDEE;CN=One:mailto:one@example.org
|
133
|
+
END:VEVENT
|
134
|
+
END:VCALENDAR
|
135
|
+
ICS
|
136
|
+
},
|
137
|
+
{
|
138
|
+
'uid' => 'foobar',
|
139
|
+
'method' => 'CANCEL',
|
140
|
+
'component' => 'VEVENT',
|
141
|
+
'sender' => 'mailto:strunk@example.org',
|
142
|
+
'senderName' => 'Strunk',
|
143
|
+
'recipient' => 'mailto:two@example.org',
|
144
|
+
'recipientName' => 'Two',
|
145
|
+
'message' => <<ICS
|
146
|
+
BEGIN:VCALENDAR
|
147
|
+
VERSION:2.0
|
148
|
+
PRODID:-//Tilia//Tilia VObject #{version}//EN
|
149
|
+
CALSCALE:GREGORIAN
|
150
|
+
METHOD:CANCEL
|
151
|
+
BEGIN:VEVENT
|
152
|
+
UID:foobar
|
153
|
+
DTSTAMP:**ANY**
|
154
|
+
SEQUENCE:2
|
155
|
+
SUMMARY:foo
|
156
|
+
DTSTART:20140716T120000Z
|
157
|
+
DURATION:PT1H
|
158
|
+
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
159
|
+
ATTENDEE;CN=Two:mailto:two@example.org
|
160
|
+
END:VEVENT
|
161
|
+
END:VCALENDAR
|
162
|
+
ICS
|
163
|
+
}
|
164
|
+
]
|
165
|
+
|
166
|
+
parse(old_message, new_message, expected, 'mailto:strunk@example.org')
|
167
|
+
end
|
168
|
+
|
169
|
+
def test_attendee_delete_with_dtend
|
170
|
+
old_message = <<ICS
|
171
|
+
BEGIN:VCALENDAR
|
172
|
+
VERSION:2.0
|
173
|
+
BEGIN:VEVENT
|
174
|
+
UID:foobar
|
175
|
+
SEQUENCE:1
|
176
|
+
SUMMARY:foo
|
177
|
+
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
178
|
+
ATTENDEE;CN=One:mailto:one@example.org
|
179
|
+
ATTENDEE;CN=Two:mailto:two@example.org
|
180
|
+
DTSTART:20140716T120000Z
|
181
|
+
DTEND:20140716T130000Z
|
182
|
+
END:VEVENT
|
183
|
+
END:VCALENDAR
|
184
|
+
ICS
|
185
|
+
|
186
|
+
new_message = nil
|
187
|
+
|
188
|
+
version = Version::VERSION
|
189
|
+
|
190
|
+
expected = [
|
191
|
+
{
|
192
|
+
'uid' => 'foobar',
|
193
|
+
'method' => 'REPLY',
|
194
|
+
'component' => 'VEVENT',
|
195
|
+
'sender' => 'mailto:one@example.org',
|
196
|
+
'senderName' => 'One',
|
197
|
+
'recipient' => 'mailto:strunk@example.org',
|
198
|
+
'recipientName' => 'Strunk',
|
199
|
+
'message' => <<ICS
|
200
|
+
BEGIN:VCALENDAR
|
201
|
+
VERSION:2.0
|
202
|
+
PRODID:-//Tilia//Tilia VObject #{version}//EN
|
203
|
+
CALSCALE:GREGORIAN
|
204
|
+
METHOD:REPLY
|
205
|
+
BEGIN:VEVENT
|
206
|
+
UID:foobar
|
207
|
+
DTSTAMP:**ANY**
|
208
|
+
SEQUENCE:1
|
209
|
+
DTSTART:20140716T120000Z
|
210
|
+
DTEND:20140716T130000Z
|
211
|
+
SUMMARY:foo
|
212
|
+
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
213
|
+
ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
|
214
|
+
END:VEVENT
|
215
|
+
END:VCALENDAR
|
216
|
+
ICS
|
217
|
+
}
|
218
|
+
]
|
219
|
+
|
220
|
+
parse(old_message, new_message, expected, 'mailto:one@example.org')
|
221
|
+
end
|
222
|
+
|
223
|
+
def test_attendee_reply_with_duration
|
224
|
+
old_message = <<ICS
|
225
|
+
BEGIN:VCALENDAR
|
226
|
+
VERSION:2.0
|
227
|
+
BEGIN:VEVENT
|
228
|
+
UID:foobar
|
229
|
+
SEQUENCE:1
|
230
|
+
SUMMARY:foo
|
231
|
+
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
232
|
+
ATTENDEE;CN=One:mailto:one@example.org
|
233
|
+
ATTENDEE;CN=Two:mailto:two@example.org
|
234
|
+
DTSTART:20140716T120000Z
|
235
|
+
DURATION:PT1H
|
95
236
|
END:VEVENT
|
96
237
|
END:VCALENDAR
|
97
238
|
ICS
|
@@ -117,8 +258,10 @@ CALSCALE:GREGORIAN
|
|
117
258
|
METHOD:REPLY
|
118
259
|
BEGIN:VEVENT
|
119
260
|
UID:foobar
|
261
|
+
DTSTAMP:**ANY**
|
120
262
|
SEQUENCE:1
|
121
263
|
DTSTART:20140716T120000Z
|
264
|
+
DURATION:PT1H
|
122
265
|
SUMMARY:foo
|
123
266
|
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
124
267
|
ATTENDEE;PARTSTAT=DECLINED;CN=One:mailto:one@example.org
|
@@ -143,6 +286,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
143
286
|
ATTENDEE;CN=One:mailto:one@example.org
|
144
287
|
ATTENDEE;CN=Two:mailto:two@example.org
|
145
288
|
DTSTART:20140716T120000Z
|
289
|
+
DTEND:20140716T130000Z
|
146
290
|
END:VEVENT
|
147
291
|
END:VCALENDAR
|
148
292
|
ICS
|
@@ -15,6 +15,7 @@ BEGIN:VCALENDAR
|
|
15
15
|
BEGIN:VEVENT
|
16
16
|
UID:foobar
|
17
17
|
DTSTART:20140811T220000Z
|
18
|
+
DTEND:20140811T230000Z
|
18
19
|
END:VEVENT
|
19
20
|
END:VCALENDAR
|
20
21
|
ICS
|
@@ -41,6 +42,7 @@ VERSION:2.0
|
|
41
42
|
BEGIN:VEVENT
|
42
43
|
UID:foobar
|
43
44
|
DTSTART:20140811T220000Z
|
45
|
+
DTEND:20140811T230000Z
|
44
46
|
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
45
47
|
ATTENDEE;CN=White:mailto:white@example.org
|
46
48
|
END:VEVENT
|
@@ -57,6 +59,7 @@ METHOD:REQUEST
|
|
57
59
|
BEGIN:VEVENT
|
58
60
|
UID:foobar
|
59
61
|
DTSTART:20140811T220000Z
|
62
|
+
DTEND:20140811T230000Z
|
60
63
|
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
61
64
|
ATTENDEE;CN=White;PARTSTAT=NEEDS-ACTION:mailto:white@example.org
|
62
65
|
END:VEVENT
|
@@ -129,6 +132,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
129
132
|
ATTENDEE;CN=One:mailto:one@example.org
|
130
133
|
ATTENDEE;CN=Two:mailto:two@example.org
|
131
134
|
DTSTART:20140716T120000Z
|
135
|
+
DURATION:PT1H
|
132
136
|
RRULE:FREQ=DAILY
|
133
137
|
EXDATE:20140717T120000Z
|
134
138
|
END:VEVENT
|
@@ -139,6 +143,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
139
143
|
ATTENDEE;CN=Two:mailto:two@example.org
|
140
144
|
ATTENDEE;CN=Three:mailto:three@example.org
|
141
145
|
DTSTART:20140718T120000Z
|
146
|
+
DURATION:PT1H
|
142
147
|
END:VEVENT
|
143
148
|
END:VCALENDAR
|
144
149
|
ICS
|
@@ -166,6 +171,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
166
171
|
ATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org
|
167
172
|
ATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org
|
168
173
|
DTSTART:20140716T120000Z
|
174
|
+
DURATION:PT1H
|
169
175
|
RRULE:FREQ=DAILY
|
170
176
|
EXDATE:20140717T120000Z,20140718T120000Z
|
171
177
|
END:VEVENT
|
@@ -192,6 +198,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
192
198
|
ATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org
|
193
199
|
ATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org
|
194
200
|
DTSTART:20140716T120000Z
|
201
|
+
DURATION:PT1H
|
195
202
|
RRULE:FREQ=DAILY
|
196
203
|
EXDATE:20140717T120000Z
|
197
204
|
END:VEVENT
|
@@ -202,6 +209,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
202
209
|
ATTENDEE;CN=Two:mailto:two@example.org
|
203
210
|
ATTENDEE;CN=Three:mailto:three@example.org
|
204
211
|
DTSTART:20140718T120000Z
|
212
|
+
DURATION:PT1H
|
205
213
|
END:VEVENT
|
206
214
|
END:VCALENDAR
|
207
215
|
ICS
|
@@ -227,6 +235,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
227
235
|
ATTENDEE;CN=Two:mailto:two@example.org
|
228
236
|
ATTENDEE;CN=Three:mailto:three@example.org
|
229
237
|
DTSTART:20140718T120000Z
|
238
|
+
DURATION:PT1H
|
230
239
|
END:VEVENT
|
231
240
|
END:VCALENDAR
|
232
241
|
ICS
|
@@ -248,6 +257,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
248
257
|
ATTENDEE;CN=One:mailto:one@example.org
|
249
258
|
ATTENDEE;CN=Two:mailto:two@example.org
|
250
259
|
DTSTART:20140716T120000Z
|
260
|
+
DTEND:20140716T130000Z
|
251
261
|
RRULE:FREQ=DAILY
|
252
262
|
END:VEVENT
|
253
263
|
BEGIN:VEVENT
|
@@ -257,6 +267,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
257
267
|
ATTENDEE;CN=Two:mailto:two@example.org
|
258
268
|
ATTENDEE;CN=Three:mailto:three@example.org
|
259
269
|
DTSTART:20140718T120000Z
|
270
|
+
DTEND:20140718T130000Z
|
260
271
|
END:VEVENT
|
261
272
|
END:VCALENDAR
|
262
273
|
ICS
|
@@ -284,6 +295,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
284
295
|
ATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org
|
285
296
|
ATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org
|
286
297
|
DTSTART:20140716T120000Z
|
298
|
+
DTEND:20140716T130000Z
|
287
299
|
RRULE:FREQ=DAILY
|
288
300
|
EXDATE:20140718T120000Z
|
289
301
|
END:VEVENT
|
@@ -310,6 +322,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
310
322
|
ATTENDEE;CN=One;PARTSTAT=NEEDS-ACTION:mailto:one@example.org
|
311
323
|
ATTENDEE;CN=Two;PARTSTAT=NEEDS-ACTION:mailto:two@example.org
|
312
324
|
DTSTART:20140716T120000Z
|
325
|
+
DTEND:20140716T130000Z
|
313
326
|
RRULE:FREQ=DAILY
|
314
327
|
END:VEVENT
|
315
328
|
BEGIN:VEVENT
|
@@ -319,6 +332,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
319
332
|
ATTENDEE;CN=Two:mailto:two@example.org
|
320
333
|
ATTENDEE;CN=Three:mailto:three@example.org
|
321
334
|
DTSTART:20140718T120000Z
|
335
|
+
DTEND:20140718T130000Z
|
322
336
|
END:VEVENT
|
323
337
|
END:VCALENDAR
|
324
338
|
ICS
|
@@ -344,6 +358,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
344
358
|
ATTENDEE;CN=Two:mailto:two@example.org
|
345
359
|
ATTENDEE;CN=Three:mailto:three@example.org
|
346
360
|
DTSTART:20140718T120000Z
|
361
|
+
DTEND:20140718T130000Z
|
347
362
|
END:VEVENT
|
348
363
|
END:VCALENDAR
|
349
364
|
ICS
|
@@ -360,6 +375,7 @@ VERSION:2.0
|
|
360
375
|
BEGIN:VEVENT
|
361
376
|
UID:foobar
|
362
377
|
DTSTART:20140811T220000Z
|
378
|
+
DTEND:20140811T230000Z
|
363
379
|
ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
364
380
|
ATTENDEE;CN=White;SCHEDULE-AGENT=CLIENT:mailto:white@example.org
|
365
381
|
END:VEVENT
|
@@ -380,6 +396,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
380
396
|
ATTENDEE;CN=One:mailto:one@example.org
|
381
397
|
ATTENDEE;CN=Two:mailto:two@example.org
|
382
398
|
DTSTART:20140716T120000Z
|
399
|
+
DTEND:20140716T130000Z
|
383
400
|
RRULE:FREQ=DAILY
|
384
401
|
END:VEVENT
|
385
402
|
BEGIN:VEVENT
|
@@ -389,6 +406,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
389
406
|
ATTENDEE;CN=Two:mailto:two@example.org
|
390
407
|
ATTENDEE;CN=Three:mailto:three@example.org
|
391
408
|
DTSTART:20140718T120000Z
|
409
|
+
DTEND:20140718T130000Z
|
392
410
|
END:VEVENT
|
393
411
|
END:VCALENDAR
|
394
412
|
ICS
|
@@ -406,6 +424,7 @@ ORGANIZER;CN=Strunk:mailto:strunk@example.org
|
|
406
424
|
ATTENDEE;CN=One:mailto:one@example.org
|
407
425
|
ATTENDEE;CN=Two:mailto:two@example.org
|
408
426
|
DTSTART:20140716T120000Z
|
427
|
+
DTEND:20140716T130000Z
|
409
428
|
RRULE:FREQ=DAILY
|
410
429
|
END:VEVENT
|
411
430
|
BEGIN:VEVENT
|
@@ -415,6 +434,7 @@ ORGANIZER;CN=Strunk:mailto:ew@example.org
|
|
415
434
|
ATTENDEE;CN=Two:mailto:two@example.org
|
416
435
|
ATTENDEE;CN=Three:mailto:three@example.org
|
417
436
|
DTSTART:20140718T120000Z
|
437
|
+
DTEND:20140718T130000Z
|
418
438
|
END:VEVENT
|
419
439
|
END:VCALENDAR
|
420
440
|
ICS
|
@@ -428,6 +448,7 @@ BEGIN:VCALENDAR
|
|
428
448
|
BEGIN:VEVENT
|
429
449
|
UID:foobar
|
430
450
|
DTSTART:20140811T220000Z
|
451
|
+
DTEND:20140811T230000Z
|
431
452
|
ATTENDEE;CN=Two:mailto:two@example.org
|
432
453
|
END:VEVENT
|
433
454
|
END:VCALENDAR
|