Merge lp:~renatofilho/ubuntu-calendar-app/keep-event-size into lp:ubuntu-calendar-app

Proposed by Renato Araujo Oliveira Filho
Status: Merged
Approved by: Arthur Mello
Approved revision: 787
Merged at revision: 809
Proposed branch: lp:~renatofilho/ubuntu-calendar-app/keep-event-size
Merge into: lp:ubuntu-calendar-app
Diff against target: 408 lines (+217/-51)
4 files modified
NewEvent.qml (+43/-46)
dateExt.js (+4/-4)
tests/unittests/CMakeLists.txt (+1/-1)
tests/unittests/tst_new_event.qml (+169/-0)
To merge this branch: bzr merge lp:~renatofilho/ubuntu-calendar-app/keep-event-size
Reviewer Review Type Date Requested Status
Arthur Mello (community) Approve
Jenkins Bot continuous-integration Approve
Review via email: mp+289288@code.launchpad.net

Commit message

Make sure that event keep the same size when changing the start date.

To post a comment you must log in.
Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Needs Fixing (continuous-integration)
783. By Renato Araujo Oliveira Filho

Trunk merged.

784. By Renato Araujo Oliveira Filho

Update NewEvent to handle null end time.

785. By Renato Araujo Oliveira Filho

created unit test for new event page.

Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Arthur Mello (artmello) wrote :

in line comment

review: Needs Fixing
786. By Renato Araujo Oliveira Filho

Typo fixed.

Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
787. By Renato Araujo Oliveira Filho

Trunk merged.

Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Arthur Mello (artmello) wrote :

lgtm

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'NewEvent.qml'
--- NewEvent.qml 2016-03-23 18:53:48 +0000
+++ NewEvent.qml 2016-03-28 21:19:15 +0000
@@ -25,6 +25,7 @@
25import Ubuntu.Components.Pickers 1.025import Ubuntu.Components.Pickers 1.0
26import QtOrganizer 5.026import QtOrganizer 5.0
27import "Defines.js" as Defines27import "Defines.js" as Defines
28import "dateExt.js" as DateExt
2829
29Page {30Page {
30 id: root31 id: root
@@ -35,18 +36,22 @@
3536
36 property var date;37 property var date;
37 property alias allDay: allDayEventCheckbox.checked38 property alias allDay: allDayEventCheckbox.checked
39 property int eventSize: -1
3840
39 property var event:null;41 property var event:null;
40 property var rule :null;42 property var rule :null;
41 property var model:null;43 property var model:null;
4244
43 property var startDate;45 property alias startDate: startDateTimeInput.dateTime
44 property var endDate;46 property alias endDate: endDateTimeInput.dateTime
45 property alias reminderValue: eventReminder.reminderValue47 property alias reminderValue: eventReminder.reminderValue
4648
47 property alias scrollY: flickable.contentY49 property alias scrollY: flickable.contentY
48 property bool isEdit: false50 property bool isEdit: false
4951
52 readonly property int millisecsInADay: 86400000
53 readonly property int millisecsInAnHour: 3600000
54
50 signal eventAdded(var event);55 signal eventAdded(var event);
51 signal eventDeleted(var event);56 signal eventDeleted(var event);
52 signal canceled()57 signal canceled()
@@ -78,8 +83,6 @@
78 }83 }
7984
80 function updateEventDate(date, allDay) {85 function updateEventDate(date, allDay) {
81 root.startDate = undefined
82 root.endDate = undefined
83 setDate(date)86 setDate(date)
84 root.allDay = allDay87 root.allDay = allDay
85 }88 }
@@ -94,18 +97,9 @@
94 date.setHours(newDate.getHours(), newDate.getMinutes());97 date.setHours(newDate.getHours(), newDate.getMinutes());
95 }98 }
9699
97 // If startDate is setted by argument we have to not change it100 startDate = new Date(root.roundDate(date))
98 //Set the nearest current time.101 var enDateValue = new Date(root.roundDate(date))
99 if (typeof(startDate) === 'undefined')102 endDate = enDateValue.addMinutes(60)
100 startDate = new Date(root.roundDate(date))
101
102 // If endDate is setted by argument we have to not change it
103 if (typeof(endDate) === 'undefined') {
104 endDate = new Date(root.roundDate(date))
105 endDate.setMinutes(endDate.getMinutes() + 30)
106 endTimeInput.text = Qt.formatDateTime(endDate, Qt.locale().timeFormat(Locale.ShortFormat));
107 }
108
109 }103 }
110104
111 function selectCalendar(collectionId) {105 function selectCalendar(collectionId) {
@@ -140,9 +134,19 @@
140 titleEdit.text = e.displayLabel;134 titleEdit.text = e.displayLabel;
141 }135 }
142136
137 allDayEventCheckbox.checked = e.allDay;
138
139 var eventEndDate = e.endDateTime
140 if (!eventEndDate || isNaN(eventEndDate.getTime()))
141 eventEndDate = new Date(startDate)
142
143 if (e.allDay) {143 if (e.allDay) {
144 allDayEventCheckbox.checked = true144 allDayEventCheckbox.checked = true
145 endDate = new Date(e.endDateTime).addDays(-1);145 endDate = new Date(eventEndDate).addDays(-1);
146 eventSize = DateExt.daysBetween(startDate, eventEndDate) * root.millisecsInADay
147 } else {
148 endDate = eventEndDate
149 eventSize = (eventEndDate.getTime() - startDate.getTime())
146 }150 }
147151
148 if(e.location) {152 if(e.location) {
@@ -153,7 +157,6 @@
153 messageEdit.text = e.description;157 messageEdit.text = e.description;
154 }158 }
155159
156 allDayEventCheckbox.checked = e.allDay;
157 var index = 0;160 var index = 0;
158161
159 if( e.itemType === Type.Event ) {162 if( e.itemType === Type.Event ) {
@@ -309,33 +312,6 @@
309 }312 }
310313
311 Keys.onEscapePressed: root.cancel()314 Keys.onEscapePressed: root.cancel()
312 onStartDateChanged: {
313 if (!startDate)
314 return
315
316 startDateTimeInput.dateTime = startDate;
317
318 // set time forward to one hour
319 var time_forward = 3600000;
320
321 if (isEdit && event !== null) {
322 time_forward = event.endDateTime - event.startDateTime;
323 }
324 adjustEndDateToStartDate(time_forward);
325 }
326
327 onEndDateChanged: {
328 if (!root.endDate || isNaN(root.endDate.getTime())) {
329 if (root.startDate) {
330 endDateTimeInput.dateTime = root.startDate;
331 }
332 } else {
333 if (root.endDate) {
334 endDateTimeInput.dateTime = root.endDate;
335 }
336 }
337 }
338
339 header: PageHeader {315 header: PageHeader {
340 id: pageHeader316 id: pageHeader
341317
@@ -442,6 +418,8 @@
442418
443 NewEventTimePicker{419 NewEventTimePicker{
444 id: startDateTimeInput420 id: startDateTimeInput
421 objectName: "startDateTimeInput"
422
445 header: i18n.tr("From")423 header: i18n.tr("From")
446 showTimePicker: !allDayEventCheckbox.checked424 showTimePicker: !allDayEventCheckbox.checked
447 anchors {425 anchors {
@@ -450,11 +428,14 @@
450 }428 }
451 onDateTimeChanged: {429 onDateTimeChanged: {
452 startDate = dateTime;430 startDate = dateTime;
431 endDateTimeInput.dateTime = new Date(startDate.getTime() + root.eventSize)
453 }432 }
454 }433 }
455434
456 NewEventTimePicker{435 NewEventTimePicker{
457 id: endDateTimeInput436 id: endDateTimeInput
437 objectName: "endDateTimeInput"
438
458 header: i18n.tr("To")439 header: i18n.tr("To")
459 showTimePicker: !allDayEventCheckbox.checked440 showTimePicker: !allDayEventCheckbox.checked
460 anchors {441 anchors {
@@ -462,7 +443,17 @@
462 right: parent.right443 right: parent.right
463 }444 }
464 onDateTimeChanged: {445 onDateTimeChanged: {
446 if (dateTime.getTime() < startDate.getTime()) {
447 root.eventSize = root.allDay ? 0 : root.millisecsInAnHour
448 dateTime = new Date(startDate.getTime() + root.eventSize)
449 return
450 }
451
465 endDate = dateTime;452 endDate = dateTime;
453 if (allDay)
454 root.eventSize = endDate.midnight().getTime() - startDate.midnight().getTime()
455 else
456 root.eventSize = endDate.getTime() - startDate.getTime()
466 }457 }
467 }458 }
468459
@@ -479,6 +470,12 @@
479 objectName: "allDayEventCheckbox"470 objectName: "allDayEventCheckbox"
480 id: allDayEventCheckbox471 id: allDayEventCheckbox
481 checked: false472 checked: false
473 onCheckedChanged: {
474 if (checked)
475 root.eventSize = Math.max(endDate.midnight().getTime() - startDate.midnight().getTime(), 0)
476 else
477 root.eventSize = Math.max(endDate.getTime() - startDate.getTime(), root.millisecsInAnHour)
478 }
482 }479 }
483 }480 }
484481
@@ -570,7 +567,7 @@
570 }567 }
571568
572 containerHeight: itemHeight * 4569 containerHeight: itemHeight * 4
573 model: root.model.getWritableAndSelectedCollections();570 model: root.model ? root.model.getWritableAndSelectedCollections() : []
574571
575 delegate: OptionSelectorDelegate{572 delegate: OptionSelectorDelegate{
576 text: modelData.name573 text: modelData.name
577574
=== modified file 'dateExt.js'
--- dateExt.js 2016-03-02 19:55:52 +0000
+++ dateExt.js 2016-03-28 21:19:15 +0000
@@ -60,19 +60,19 @@
60}60}
6161
62Date.prototype.addDays = function(days) {62Date.prototype.addDays = function(days) {
63 var date = new Date(this)
63 if (days === 0)64 if (days === 0)
64 return this65 return date
6566
66 var date = new Date(this)
67 date.setDate(date.getDate() + days);67 date.setDate(date.getDate() + days);
68 return date68 return date
69}69}
7070
71Date.prototype.addMinutes = function(minutes) {71Date.prototype.addMinutes = function(minutes) {
72 var date = new Date(this)
72 if (minutes === 0)73 if (minutes === 0)
73 return this74 return date
7475
75 var date = new Date(this)
76 date.setMinutes(date.getMinutes() + minutes);76 date.setMinutes(date.getMinutes() + minutes);
77 return date77 return date
78}78}
7979
=== modified file 'tests/unittests/CMakeLists.txt'
--- tests/unittests/CMakeLists.txt 2014-01-28 16:51:15 +0000
+++ tests/unittests/CMakeLists.txt 2016-03-28 21:19:15 +0000
@@ -3,6 +3,6 @@
3file(GLOB TESTS tst_*.qml)3file(GLOB TESTS tst_*.qml)
4foreach(TEST ${TESTS})4foreach(TEST ${TESTS})
5 get_filename_component(NAME ${TEST} NAME_WE)5 get_filename_component(NAME ${TEST} NAME_WE)
6 add_test(${NAME} ${QMLTESTRUNNER} -input ${TEST})6 add_test(${NAME} ${QMLTESTRUNNER} -import ${CMAKE_SOURCE_DIR} -input ${TEST})
7 set_tests_properties(${NAME} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=minimal")7 set_tests_properties(${NAME} PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=minimal")
8endforeach(TEST)8endforeach(TEST)
99
=== added file 'tests/unittests/tst_new_event.qml'
--- tests/unittests/tst_new_event.qml 1970-01-01 00:00:00 +0000
+++ tests/unittests/tst_new_event.qml 2016-03-28 21:19:15 +0000
@@ -0,0 +1,169 @@
1import QtQuick 2.0
2import QtTest 1.0
3import QtOrganizer 5.0
4
5TestCase{
6 id: root
7 name: "New Event tests"
8
9 property var newEventPage: null
10
11 Component {
12 id: eventComp
13
14 Event {
15 }
16 }
17
18 function create_event_from_data(data)
19 {
20 return eventComp.createObject(root,
21 {'allDay': data.allDay,
22 'displayLabel': data.label,
23 'startDateTime': data.startDate,
24 'endDateTime': data.endDate})
25 }
26
27 function create_new_event_page(event)
28 {
29 var component = Qt.createComponent(Qt.resolvedUrl("../../NewEvent.qml"))
30 if (component.status === Component.Ready)
31 return component.createObject(root, {"event": event})
32
33 return null
34 }
35
36 function init()
37 {
38
39 }
40
41 function cleanup()
42 {
43 if (newEventPage) {
44 newEventPage.destroy()
45 newEventPage = null
46 }
47 }
48
49 function test_new_event_title()
50 {
51 newEventPage = create_new_event_page(null)
52 compare(newEventPage.header.title, "New Event")
53 }
54
55 function test_edit_event_details()
56 {
57 var startDate = new Date(2016, 3, 28, 14, 0,0 )
58 var endDate = new Date(2016, 3, 28, 15, 0,0 )
59 var eventData = {"label": 'test_event_details',
60 "allDay": false,
61 "startDate": startDate,
62 "endDate": endDate }
63 var event = create_event_from_data(eventData)
64 newEventPage = create_new_event_page(event)
65
66 compare(newEventPage.header.title, "Edit Event")
67 compare(newEventPage.startDate, startDate)
68 compare(newEventPage.endDate, endDate)
69 }
70
71 function test_change_start_date()
72 {
73 var startDate = new Date(2016, 3, 28, 14, 0,0 )
74 var endDate = new Date(2016, 3, 28, 15, 0,0 )
75 var eventData = {"label": 'test_event_details',
76 "allDay": false,
77 "startDate": startDate,
78 "endDate": endDate }
79 var event = create_event_from_data(eventData)
80 newEventPage = create_new_event_page(event)
81
82 compare(newEventPage.eventSize, 3600000) // 1h
83
84 //Move start date 1h foward
85 var startDatePicker = findChild(newEventPage, "startDateTimeInput")
86 startDatePicker.dateTime = new Date(2016, 3, 28, 15, 0,0 )
87 compare(newEventPage.eventSize, 3600000) // 1h
88 compare(newEventPage.endDate, new Date(2016, 3, 28, 16, 0,0 ))
89
90 //Move start date 3h backward
91 startDatePicker.dateTime = new Date(2016, 3, 28, 12, 0,0 )
92 compare(newEventPage.eventSize, 3600000) // 1h
93 compare(newEventPage.endDate, new Date(2016, 3, 28, 13, 0,0 ))
94 }
95
96 function test_change_end_date()
97 {
98 var startDate = new Date(2016, 3, 28, 14, 0,0 )
99 var endDate = new Date(2016, 3, 28, 15, 0,0 )
100 var eventData = {"label": 'test_event_details',
101 "allDay": false,
102 "startDate": startDate,
103 "endDate": endDate }
104 var event = create_event_from_data(eventData)
105 newEventPage = create_new_event_page(event)
106
107 // Move end date 30 min backward
108 var endDatePicker = findChild(newEventPage, "endDateTimeInput")
109 endDatePicker.dateTime = new Date(2016, 3, 28, 14, 30,0 )
110 compare(newEventPage.eventSize, 1800000) // 30 min
111
112 // Move start date 1h foward
113 var startDatePicker = findChild(newEventPage, "startDateTimeInput")
114 startDatePicker.dateTime = new Date(2016, 3, 28, 15, 0,0 )
115 compare(newEventPage.eventSize, 1800000) // 30 min
116 compare(newEventPage.endDate, new Date(2016, 3, 28, 15, 30,0 ))
117 }
118
119 function test_change_start_date_for_all_day()
120 {
121 var startDate = new Date(2016, 3, 28, 0, 0,0 )
122 var endDate = new Date(2016, 3, 28, 0, 0,0 )
123 var eventData = {"label": 'test_event_details',
124 "allDay": true,
125 "startDate": startDate,
126 "endDate": endDate }
127 var event = create_event_from_data(eventData)
128 newEventPage = create_new_event_page(event)
129
130 compare(newEventPage.eventSize, 0) // 1 day
131
132 // Move start date 1 day foward
133 var startDatePicker = findChild(newEventPage, "startDateTimeInput")
134 startDatePicker.dateTime = new Date(2016, 3, 29, 0, 0,0)
135
136 // end date should move 1 day
137 compare(newEventPage.endDate, new Date(2016, 3, 29, 0, 0,0 ))
138
139 // Move end date 1 day foward
140 var endDatePicker = findChild(newEventPage, "endDateTimeInput")
141 endDatePicker.dateTime = new Date(2016, 3, 30, 0, 0,0)
142
143 // start date should not change
144 compare(newEventPage.startDate, new Date(2016, 3, 29, 0, 0,0 ))
145 // event size should increase
146 compare(newEventPage.eventSize, 86400000) // 2 days
147
148 // Move start date 1 day foward
149 startDatePicker.dateTime = new Date(2016, 3, 30, 0, 0,0)
150
151 // end date should move 2 day
152 compare(newEventPage.endDate, new Date(2016, 3, 31, 0, 0,0 ))
153 }
154
155 function test_events_with_null_end_date()
156 {
157 var startDate = new Date(2016, 3, 28, 15, 0,0 )
158 var eventData = {"label": 'test_event_details',
159 "allDay": false,
160 "startDate": startDate,
161 "endDate": null }
162 var event = create_event_from_data(eventData)
163 newEventPage = create_new_event_page(event)
164
165 compare(newEventPage.eventSize, 0)
166 compare(newEventPage.startDate, new Date(2016, 3, 28, 15, 0,0 ))
167 compare(newEventPage.endDate, new Date(2016, 3, 28, 15, 0,0 ))
168 }
169}

Subscribers

People subscribed via source and target branches

to status/vote changes: