Merge lp:~ahayzen/ubuntu-weather-app/reboot-ap-create-fake-env into lp:ubuntu-weather-app

Proposed by Andrew Hayzen on 2015-07-18
Status: Merged
Approved by: Victor Thompson on 2015-07-25
Approved revision: 72
Merged at revision: 63
Proposed branch: lp:~ahayzen/ubuntu-weather-app/reboot-ap-create-fake-env
Merge into: lp:ubuntu-weather-app
Diff against target: 3514 lines (+3311/-41)
15 files modified
README.autopilot (+57/-0)
app/ui/HomePage.qml (+1/-0)
debian/changelog (+4/-0)
po/com.ubuntu.weather.pot (+4/-4)
tests/autopilot/ubuntu_weather_app/CMakeLists.txt (+2/-0)
tests/autopilot/ubuntu_weather_app/__init__.py (+24/-1)
tests/autopilot/ubuntu_weather_app/databases/34e1e542f2f083ff18f537b07a380071.ini (+6/-0)
tests/autopilot/ubuntu_weather_app/databases/CMakeLists.txt (+6/-0)
tests/autopilot/ubuntu_weather_app/files/1.json (+1509/-0)
tests/autopilot/ubuntu_weather_app/files/2.json (+1509/-0)
tests/autopilot/ubuntu_weather_app/files/CMakeLists.txt (+6/-0)
tests/autopilot/ubuntu_weather_app/tests/__init__.py (+116/-1)
tests/autopilot/ubuntu_weather_app/tests/test_empty_state.py (+35/-0)
tests/autopilot/ubuntu_weather_app/tests/test_home_page.py (+32/-0)
tests/autopilot/ubuntu_weather_app/tests/test_weather.py (+0/-35)
To merge this branch: bzr merge lp:~ahayzen/ubuntu-weather-app/reboot-ap-create-fake-env
Reviewer Review Type Date Requested Status
Victor Thompson 2015-07-18 Approve on 2015-07-25
Ubuntu Phone Apps Jenkins Bot continuous-integration Approve on 2015-07-25
Andrew Hayzen Abstain on 2015-07-25
Review via email: mp+265191@code.launchpad.net

Commit message

* Create two tests one with an empty database and one with a populated database
* Add mocked locations for tests

Description of the change

* Create two tests one with an empty database and one with a populated database
* Add mocked locations for tests

NOTES
* Are we able to test if the AP tests are running on jenkins yet or is vivid still broken?

To post a comment you must log in.
65. By Andrew Hayzen on 2015-07-18

* Add extra code comments

66. By Andrew Hayzen on 2015-07-18

* Add changelog

Andrew Hayzen (ahayzen) wrote :

adt-run [23:00:30]: test autopilot: - - - - - - - - - - results - - - - - - - - - -
autopilot PASS

\o/

I'll merge in the readme and fix it up with what I did :-)

67. By Andrew Hayzen on 2015-07-20

* Merge of lp:~vthompson/ubuntu-weather-app/reboot-ap-readme

68. By Andrew Hayzen on 2015-07-20

* Update readme to new instructions

Victor Thompson (vthompson) wrote :

I have some inline comments. Also, how were the JSON files generated? They appear to be different than what was in the legacy app?

review: Needs Fixing
69. By Andrew Hayzen on 2015-07-23

* Remove mention of clock and fix bracket formatting

Victor Thompson (vthompson) wrote :

There are at least a few more trailing parens on newlines

review: Needs Fixing
70. By Andrew Hayzen on 2015-07-23

* Further bracket fixes

Victor Thompson (vthompson) wrote :

I have a few more inline comments. At least one (2 really) of them should be fixed.

review: Needs Fixing
71. By Andrew Hayzen on 2015-07-24

* Remove mention of emulate and inclusion of binary files

Victor Thompson (vthompson) wrote :

Ok, things are looking good. Could you update the CMakeLists.txt to remove emulator completely? See inline comments.

review: Needs Fixing
72. By Andrew Hayzen on 2015-07-25

* Removal of more uses of the phrase emulator

Andrew Hayzen (ahayzen) wrote :

Removed some more mentions of 'emulator', please rereview :-)

review: Resubmit
Andrew Hayzen (ahayzen) wrote :

..Maybe the resubmit is not what i think it is, i'll abstain to not confuse jenkins :-)

review: Abstain
Victor Thompson (vthompson) wrote :

lgtm!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'README.autopilot'
2--- README.autopilot 1970-01-01 00:00:00 +0000
3+++ README.autopilot 2015-07-25 13:52:29 +0000
4@@ -0,0 +1,57 @@
5+# Running Autopilot tests
6+
7+The Weather app follows a test driven development where autopilot tests are run before every merge into trunk. If you are submitting your bugfix/patch to the Weather app, please follow the following steps below to ensure that all tests pass before proposing a merge request.
8+
9+If you are looking for more info about Autopilot or writing AP tests for the weather app, here are some useful links to help you:
10+
11+- http://developer.ubuntu.com/start/quality
12+- https://developer.ubuntu.com/api/autopilot/python/1.5.0/
13+
14+For help and options on running tests, see:
15+
16+- https://developer.ubuntu.com/en/start/platform/guides/running-autopilot-tests/
17+
18+## Prerequisites
19+
20+Install the following autopilot packages required to run the tests,
21+$ sudo apt-get install python3-autopilot libautopilot-qt ubuntu-ui-toolkit-autopilot python3-autopilot-vis
22+
23+## Running tests on the desktop
24+
25+Using terminal:
26+
27+* Branch the Weather app code, for example,
28+ $ bzr branch lp:ubuntu-weather-app
29+
30+* Navigate to the tests/autopilot directory.
31+ $ cd ubuntu-weather-app/tests/autopilot
32+
33+* run all tests.
34+ $ autopilot3 run -vv ubuntu_weather_app
35+
36+ to list all tests:
37+ $ autopilot3 list ubuntu_weather_app
38+
39+ To run only one test (for instance: ubuntu_weather_app.tests.test_empty_state.TestEmptyState.test_add_location_button)
40+ $ autopilot3 run -vv ubuntu_weather_app.tests.test_empty_state.TestEmptyState.test_add_location_button
41+
42+ Debugging tests using autopilot vis
43+ $ autopilot3 launch -i Qt qmlscene app/ubuntu-weather-app.qml
44+ $ autopilot3 vis
45+
46+
47+## Running tests on device or emulator:
48+
49+Using autopkg:
50+
51+* Branch the Weather app code, for example,
52+ $ bzr branch lp:ubuntu-weather-app
53+
54+* Navigate to the source directory.
55+ $ cd ubuntu-weather-app
56+
57+* Build a click package
58+ $ click-buddy .
59+
60+* Run the tests on device (assumes only one click package in the directory)
61+ $ adt-run . *.click --- ssh -s adb -- -p <PASSWORD>
62
63=== modified file 'app/ui/HomePage.qml'
64--- app/ui/HomePage.qml 2015-06-18 01:42:03 +0000
65+++ app/ui/HomePage.qml 2015-07-25 13:52:29 +0000
66@@ -122,6 +122,7 @@
67 */
68 ListView {
69 id: locationPages
70+ objectName: "locationPages"
71 anchors.fill: parent
72 currentIndex: settings.current
73 delegate: LocationPane {}
74
75=== modified file 'debian/changelog'
76--- debian/changelog 2015-06-02 01:15:28 +0000
77+++ debian/changelog 2015-07-25 13:52:29 +0000
78@@ -1,7 +1,11 @@
79 ubuntu-weather-app (3.0) UNRELEASED; urgency=medium
80
81+ [ Victor Thompson ]
82 * Sync debian version with click version.
83
84+ [ Andrew Hayzen ]
85+ * Add mocked locations for autopilot and add a test using the data
86+
87 -- Victor Thompson <victor.thompson@gmail.com> Mon, 01 Jun 2015 20:11:23 -0500
88
89 ubuntu-weather-app (2.1) UNRELEASED; urgency=medium
90
91=== modified file 'po/com.ubuntu.weather.pot'
92--- po/com.ubuntu.weather.pot 2015-06-29 00:20:51 +0000
93+++ po/com.ubuntu.weather.pot 2015-07-25 13:52:29 +0000
94@@ -8,7 +8,7 @@
95 msgstr ""
96 "Project-Id-Version: ubuntu-weather-app\n"
97 "Report-Msgid-Bugs-To: \n"
98-"POT-Creation-Date: 2015-06-28 19:17-0500\n"
99+"POT-Creation-Date: 2015-07-18 18:04+0100\n"
100 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
101 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
102 "Language-Team: LANGUAGE <LL@li.org>\n"
103@@ -118,15 +118,15 @@
104 msgid "Settings"
105 msgstr ""
106
107-#: ../app/ui/SettingsPage.qml:38 ../app/ui/settings/UnitsPage.qml:24
108+#: ../app/ui/SettingsPage.qml:32 ../app/ui/settings/UnitsPage.qml:24
109 msgid "Units"
110 msgstr ""
111
112-#: ../app/ui/SettingsPage.qml:43 ../app/ui/settings/DataProviderPage.qml:24
113+#: ../app/ui/SettingsPage.qml:37 ../app/ui/settings/DataProviderPage.qml:24
114 msgid "Data Provider"
115 msgstr ""
116
117-#: ../app/ui/SettingsPage.qml:48 ../app/ui/settings/RefreshIntervalPage.qml:24
118+#: ../app/ui/SettingsPage.qml:42 ../app/ui/settings/RefreshIntervalPage.qml:24
119 msgid "Refresh Interval"
120 msgstr ""
121
122
123=== modified file 'tests/autopilot/ubuntu_weather_app/CMakeLists.txt'
124--- tests/autopilot/ubuntu_weather_app/CMakeLists.txt 2015-04-29 17:31:56 +0000
125+++ tests/autopilot/ubuntu_weather_app/CMakeLists.txt 2015-07-25 13:52:29 +0000
126@@ -1,3 +1,5 @@
127+add_subdirectory(databases)
128+add_subdirectory(files)
129 add_subdirectory(tests)
130
131 # make the emulator files visible on qtcreator
132
133=== modified file 'tests/autopilot/ubuntu_weather_app/__init__.py'
134--- tests/autopilot/ubuntu_weather_app/__init__.py 2015-06-14 23:57:35 +0000
135+++ tests/autopilot/ubuntu_weather_app/__init__.py 2015-07-25 13:52:29 +0000
136@@ -26,12 +26,19 @@
137
138 def __init__(self, app_proxy):
139 self.app = app_proxy
140- self.main_view = self.app.wait_select_single(MainView)
141+
142+ # FIXME: Select by objectName due to it being MainView12 not MainView
143+ # pad.lv/1350532
144+ self.main_view = self.app.wait_select_single(objectName="weather")
145
146 def get_add_location_page(self):
147 return self.main_view.wait_select_single(
148 AddLocationPage, objectName="addLocationPage")
149
150+ def get_home_page(self):
151+ return self.main_view.wait_select_single(
152+ HomePage, objectName="homePage")
153+
154 def click_add_location_button(self):
155 add_location_button = self.main_view.wait_select_single(
156 "Button", objectName="emptyStateButton")
157@@ -44,12 +51,28 @@
158 super(Page, self).__init__(*args)
159
160
161+class PageWithBottomEdge(Page):
162+ """Autopilot helper for PageWithBottomEdge."""
163+ def __init__(self, *args):
164+ super(PageWithBottomEdge, self).__init__(*args)
165+
166+
167 class AddLocationPage(Page):
168 """Autopilot helper for AddLocationPage."""
169 def __init__(self, *args):
170 super(AddLocationPage, self).__init__(*args)
171
172
173+class HomePage(Page):
174+ """Autopilot helper for HomePage."""
175+ def __init__(self, *args):
176+ super(HomePage, self).__init__(*args)
177+
178+ def get_location_count(self):
179+ return self.wait_select_single(
180+ "QQuickListView", objectName="locationPages").count
181+
182+
183 class MainView(MainView):
184 """Autopilot custom proxy object for the MainView."""
185 retry_delay = 0.2
186
187=== added directory 'tests/autopilot/ubuntu_weather_app/databases'
188=== added file 'tests/autopilot/ubuntu_weather_app/databases/34e1e542f2f083ff18f537b07a380071.ini'
189--- tests/autopilot/ubuntu_weather_app/databases/34e1e542f2f083ff18f537b07a380071.ini 1970-01-01 00:00:00 +0000
190+++ tests/autopilot/ubuntu_weather_app/databases/34e1e542f2f083ff18f537b07a380071.ini 2015-07-25 13:52:29 +0000
191@@ -0,0 +1,6 @@
192+[General]
193+Description=Default Ubuntu weather app
194+Driver=QSQLITE
195+EstimatedSize=100000
196+Name=com.ubuntu.weather
197+Version=0.3
198
199=== added file 'tests/autopilot/ubuntu_weather_app/databases/34e1e542f2f083ff18f537b07a380071.sqlite'
200Binary files tests/autopilot/ubuntu_weather_app/databases/34e1e542f2f083ff18f537b07a380071.sqlite 1970-01-01 00:00:00 +0000 and tests/autopilot/ubuntu_weather_app/databases/34e1e542f2f083ff18f537b07a380071.sqlite 2015-07-25 13:52:29 +0000 differ
201=== added file 'tests/autopilot/ubuntu_weather_app/databases/CMakeLists.txt'
202--- tests/autopilot/ubuntu_weather_app/databases/CMakeLists.txt 1970-01-01 00:00:00 +0000
203+++ tests/autopilot/ubuntu_weather_app/databases/CMakeLists.txt 2015-07-25 13:52:29 +0000
204@@ -0,0 +1,6 @@
205+# make the database files visible on qtcreator
206+file(GLOB PYTHON_TEST_DATABASE_FILES
207+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
208+ *.ini)
209+
210+add_custom_target(ubuntu-weather-app_PYTHONTestDatabaseFiles ALL SOURCES ${PYTHON_TEST_DATABASE_FILES})
211
212=== added directory 'tests/autopilot/ubuntu_weather_app/files'
213=== added file 'tests/autopilot/ubuntu_weather_app/files/1.json'
214--- tests/autopilot/ubuntu_weather_app/files/1.json 1970-01-01 00:00:00 +0000
215+++ tests/autopilot/ubuntu_weather_app/files/1.json 2015-07-25 13:52:29 +0000
216@@ -0,0 +1,1509 @@
217+{
218+ "db":{
219+ "id":4,
220+ "updated":"2015-07-18T17:07:53.668Z"
221+ },
222+ "format":20150404,
223+ "location":{
224+ "objectName":"",
225+ "adminName1":"England",
226+ "adminName2":"Greater London",
227+ "adminName3":"",
228+ "areaLabel":"England, Greater London, United Kingdom",
229+ "coord":{
230+ "lat":"51.50853",
231+ "lon":"-0.12574"
232+ },
233+ "country":"GB",
234+ "countryName":"United Kingdom",
235+ "name":"London",
236+ "population":7556900,
237+ "services":{
238+ "geonames":2643743,
239+ "openweathermap":2643743
240+ },
241+ "timezone":{
242+ "dstOffset":1,
243+ "gmtOffset":0,
244+ "timeZoneId":"Europe/London"
245+ }
246+ },
247+ "data":[
248+ {
249+ "condition":"Clouds",
250+ "date":{
251+ "date":18,
252+ "hours":11,
253+ "minutes":59,
254+ "month":6,
255+ "year":2015
256+ },
257+ "hourly":[
258+ {
259+ "condition":"Clouds",
260+ "date":{
261+ "date":18,
262+ "hours":18,
263+ "minutes":0,
264+ "month":6,
265+ "year":2015
266+ },
267+ "humidity":45,
268+ "icon":"cloud",
269+ "imperial":{
270+ "rain":0,
271+ "snow":0,
272+ "temp":71.006,
273+ "windSpeed":6.0704
274+ },
275+ "metric":{
276+ "rain":0,
277+ "snow":0,
278+ "temp":21.67,
279+ "windSpeed":9.756
280+ },
281+ "pressure":1020.88,
282+ "timestamp":1437242400,
283+ "windDeg":233.508,
284+ "windDir":"SW"
285+ },
286+ {
287+ "condition":"Clouds",
288+ "date":{
289+ "date":18,
290+ "hours":21,
291+ "minutes":0,
292+ "month":6,
293+ "year":2015
294+ },
295+ "humidity":49,
296+ "icon":"cloud",
297+ "imperial":{
298+ "rain":0,
299+ "snow":0,
300+ "temp":65.84,
301+ "windSpeed":5.0624
302+ },
303+ "metric":{
304+ "rain":0,
305+ "snow":0,
306+ "temp":18.8,
307+ "windSpeed":8.136
308+ },
309+ "pressure":1020.14,
310+ "timestamp":1437253200,
311+ "windDeg":211.004,
312+ "windDir":"SW"
313+ }
314+ ],
315+ "humidity":63,
316+ "icon":"cloud_sun",
317+ "imperial":{
318+ "rain":0,
319+ "snow":0,
320+ "tempMax":73.724,
321+ "tempMin":61.7,
322+ "windSpeed":12.4544
323+ },
324+ "metric":{
325+ "rain":0,
326+ "snow":0,
327+ "tempMax":23.18,
328+ "tempMin":16.5,
329+ "windSpeed":20.016
330+ },
331+ "pressure":1022.45,
332+ "timestamp":1437220800,
333+ "windDeg":247,
334+ "windDir":"W",
335+ "current":{
336+ "condition":"Clouds",
337+ "date":{
338+ "date":18,
339+ "hours":11,
340+ "minutes":59,
341+ "month":6,
342+ "year":2015
343+ },
344+ "humidity":31,
345+ "icon":"cloud",
346+ "imperial":{
347+ "rain":0,
348+ "snow":0,
349+ "temp":73.112,
350+ "windSpeed":8.064000000000002
351+ },
352+ "metric":{
353+ "rain":0,
354+ "snow":0,
355+ "temp":22.84,
356+ "windSpeed":12.96
357+ },
358+ "pressure":1015,
359+ "timestamp":1437237984,
360+ "windDeg":230,
361+ "windDir":"SW",
362+ "service":"openweathermap",
363+ "service_id":2643743
364+ }
365+ },
366+ {
367+ "condition":"Rain",
368+ "date":{
369+ "date":19,
370+ "hours":11,
371+ "minutes":59,
372+ "month":6,
373+ "year":2015
374+ },
375+ "hourly":[
376+ {
377+ "condition":"Clouds",
378+ "date":{
379+ "date":19,
380+ "hours":0,
381+ "minutes":0,
382+ "month":6,
383+ "year":2015
384+ },
385+ "humidity":53,
386+ "icon":"cloud",
387+ "imperial":{
388+ "rain":0,
389+ "snow":0,
390+ "temp":62.654,
391+ "windSpeed":4.412800000000001
392+ },
393+ "metric":{
394+ "rain":0,
395+ "snow":0,
396+ "temp":17.03,
397+ "windSpeed":7.092
398+ },
399+ "pressure":1019.63,
400+ "timestamp":1437264000,
401+ "windDeg":228.006,
402+ "windDir":"SW"
403+ },
404+ {
405+ "condition":"Clouds",
406+ "date":{
407+ "date":19,
408+ "hours":3,
409+ "minutes":0,
410+ "month":6,
411+ "year":2015
412+ },
413+ "humidity":53,
414+ "icon":"cloud",
415+ "imperial":{
416+ "rain":0,
417+ "snow":0,
418+ "temp":60.385999999999996,
419+ "windSpeed":3.1584000000000003
420+ },
421+ "metric":{
422+ "rain":0,
423+ "snow":0,
424+ "temp":15.77,
425+ "windSpeed":5.076
426+ },
427+ "pressure":1016.87,
428+ "timestamp":1437274800,
429+ "windDeg":167.002,
430+ "windDir":"S"
431+ },
432+ {
433+ "condition":"Rain",
434+ "date":{
435+ "date":19,
436+ "hours":6,
437+ "minutes":0,
438+ "month":6,
439+ "year":2015
440+ },
441+ "humidity":92,
442+ "icon":"rain",
443+ "imperial":{
444+ "rain":0.0860236220472441,
445+ "snow":0,
446+ "temp":53.294,
447+ "windSpeed":4.7264
448+ },
449+ "metric":{
450+ "rain":2.185,
451+ "snow":0,
452+ "temp":11.83,
453+ "windSpeed":7.596
454+ },
455+ "pressure":1016.41,
456+ "timestamp":1437285600,
457+ "windDeg":247.002,
458+ "windDir":"W"
459+ },
460+ {
461+ "condition":"Rain",
462+ "date":{
463+ "date":19,
464+ "hours":9,
465+ "minutes":0,
466+ "month":6,
467+ "year":2015
468+ },
469+ "humidity":78,
470+ "icon":"rain",
471+ "imperial":{
472+ "rain":0.055314960629921264,
473+ "snow":0,
474+ "temp":59.414,
475+ "windSpeed":5.734400000000001
476+ },
477+ "metric":{
478+ "rain":1.405,
479+ "snow":0,
480+ "temp":15.23,
481+ "windSpeed":9.216000000000001
482+ },
483+ "pressure":1014.95,
484+ "timestamp":1437296400,
485+ "windDeg":226.5,
486+ "windDir":"SW"
487+ },
488+ {
489+ "condition":"Clouds",
490+ "date":{
491+ "date":19,
492+ "hours":12,
493+ "minutes":0,
494+ "month":6,
495+ "year":2015
496+ },
497+ "humidity":66,
498+ "icon":"cloud_sun",
499+ "imperial":{
500+ "rain":0,
501+ "snow":0,
502+ "temp":67.154,
503+ "windSpeed":10.259200000000002
504+ },
505+ "metric":{
506+ "rain":0,
507+ "snow":0,
508+ "temp":19.53,
509+ "windSpeed":16.488
510+ },
511+ "pressure":1014.32,
512+ "timestamp":1437307200,
513+ "windDeg":247.005,
514+ "windDir":"W"
515+ },
516+ {
517+ "condition":"Rain",
518+ "date":{
519+ "date":19,
520+ "hours":15,
521+ "minutes":0,
522+ "month":6,
523+ "year":2015
524+ },
525+ "humidity":59,
526+ "icon":"rain",
527+ "imperial":{
528+ "rain":0.00019685039370078743,
529+ "snow":0,
530+ "temp":68.45,
531+ "windSpeed":10.886400000000002
532+ },
533+ "metric":{
534+ "rain":0.005,
535+ "snow":0,
536+ "temp":20.25,
537+ "windSpeed":17.496000000000002
538+ },
539+ "pressure":1015.06,
540+ "timestamp":1437318000,
541+ "windDeg":263.001,
542+ "windDir":"W"
543+ },
544+ {
545+ "condition":"Clouds",
546+ "date":{
547+ "date":19,
548+ "hours":18,
549+ "minutes":0,
550+ "month":6,
551+ "year":2015
552+ },
553+ "humidity":51,
554+ "icon":"cloud_sun",
555+ "imperial":{
556+ "rain":0,
557+ "snow":0,
558+ "temp":67.676,
559+ "windSpeed":7.772800000000001
560+ },
561+ "metric":{
562+ "rain":0,
563+ "snow":0,
564+ "temp":19.82,
565+ "windSpeed":12.492
566+ },
567+ "pressure":1015.53,
568+ "timestamp":1437328800,
569+ "windDeg":269.502,
570+ "windDir":"W"
571+ },
572+ {
573+ "condition":"Clear",
574+ "date":{
575+ "date":19,
576+ "hours":21,
577+ "minutes":0,
578+ "month":6,
579+ "year":2015
580+ },
581+ "humidity":59,
582+ "icon":"moon",
583+ "imperial":{
584+ "rain":0,
585+ "snow":0,
586+ "temp":60.494,
587+ "windSpeed":4.9952000000000005
588+ },
589+ "metric":{
590+ "rain":0,
591+ "snow":0,
592+ "temp":15.83,
593+ "windSpeed":8.028
594+ },
595+ "pressure":1017.12,
596+ "timestamp":1437339600,
597+ "windDeg":255.003,
598+ "windDir":"W"
599+ }
600+ ],
601+ "humidity":81,
602+ "icon":"rain",
603+ "imperial":{
604+ "rain":0.19173228346456694,
605+ "snow":0,
606+ "tempMax":67.37,
607+ "tempMin":48.74,
608+ "windSpeed":19.4432
609+ },
610+ "metric":{
611+ "rain":4.87,
612+ "snow":0,
613+ "tempMax":19.65,
614+ "tempMin":9.3,
615+ "windSpeed":31.248
616+ },
617+ "pressure":1014.57,
618+ "timestamp":1437307200,
619+ "windDeg":251,
620+ "windDir":"W"
621+ },
622+ {
623+ "condition":"Rain",
624+ "date":{
625+ "date":20,
626+ "hours":11,
627+ "minutes":59,
628+ "month":6,
629+ "year":2015
630+ },
631+ "hourly":[
632+ {
633+ "condition":"Clear",
634+ "date":{
635+ "date":20,
636+ "hours":0,
637+ "minutes":0,
638+ "month":6,
639+ "year":2015
640+ },
641+ "humidity":78,
642+ "icon":"moon",
643+ "imperial":{
644+ "rain":0,
645+ "snow":0,
646+ "temp":52.43,
647+ "windSpeed":2.576
648+ },
649+ "metric":{
650+ "rain":0,
651+ "snow":0,
652+ "temp":11.35,
653+ "windSpeed":4.14
654+ },
655+ "pressure":1017.21,
656+ "timestamp":1437350400,
657+ "windDeg":230.008,
658+ "windDir":"SW"
659+ },
660+ {
661+ "condition":"Clouds",
662+ "date":{
663+ "date":20,
664+ "hours":3,
665+ "minutes":0,
666+ "month":6,
667+ "year":2015
668+ },
669+ "humidity":88,
670+ "icon":"cloud_moon",
671+ "imperial":{
672+ "rain":0,
673+ "snow":0,
674+ "temp":47.480000000000004,
675+ "windSpeed":2.3744000000000005
676+ },
677+ "metric":{
678+ "rain":0,
679+ "snow":0,
680+ "temp":8.6,
681+ "windSpeed":3.8160000000000003
682+ },
683+ "pressure":1016.59,
684+ "timestamp":1437361200,
685+ "windDeg":166.004,
686+ "windDir":"S"
687+ },
688+ {
689+ "condition":"Rain",
690+ "date":{
691+ "date":20,
692+ "hours":6,
693+ "minutes":0,
694+ "month":6,
695+ "year":2015
696+ },
697+ "humidity":82,
698+ "icon":"rain",
699+ "imperial":{
700+ "rain":0.001377952755905512,
701+ "snow":0,
702+ "temp":53.69,
703+ "windSpeed":2.6208
704+ },
705+ "metric":{
706+ "rain":0.035,
707+ "snow":0,
708+ "temp":12.05,
709+ "windSpeed":4.212
710+ },
711+ "pressure":1016.62,
712+ "timestamp":1437372000,
713+ "windDeg":141.001,
714+ "windDir":"SE"
715+ },
716+ {
717+ "condition":"Rain",
718+ "date":{
719+ "date":20,
720+ "hours":9,
721+ "minutes":0,
722+ "month":6,
723+ "year":2015
724+ },
725+ "humidity":83,
726+ "icon":"rain",
727+ "imperial":{
728+ "rain":0.010629921259842521,
729+ "snow":0,
730+ "temp":59.36,
731+ "windSpeed":3.4048000000000003
732+ },
733+ "metric":{
734+ "rain":0.27,
735+ "snow":0,
736+ "temp":15.2,
737+ "windSpeed":5.472
738+ },
739+ "pressure":1016.18,
740+ "timestamp":1437382800,
741+ "windDeg":135,
742+ "windDir":"SE"
743+ },
744+ {
745+ "condition":"Rain",
746+ "date":{
747+ "date":20,
748+ "hours":12,
749+ "minutes":0,
750+ "month":6,
751+ "year":2015
752+ },
753+ "humidity":72,
754+ "icon":"rain",
755+ "imperial":{
756+ "rain":0.004330708661417323,
757+ "snow":0,
758+ "temp":66.956,
759+ "windSpeed":5.3984000000000005
760+ },
761+ "metric":{
762+ "rain":0.11,
763+ "snow":0,
764+ "temp":19.42,
765+ "windSpeed":8.676
766+ },
767+ "pressure":1015.33,
768+ "timestamp":1437393600,
769+ "windDeg":167.001,
770+ "windDir":"S"
771+ },
772+ {
773+ "condition":"Rain",
774+ "date":{
775+ "date":20,
776+ "hours":15,
777+ "minutes":0,
778+ "month":6,
779+ "year":2015
780+ },
781+ "humidity":68,
782+ "icon":"rain",
783+ "imperial":{
784+ "rain":0.003149606299212599,
785+ "snow":0,
786+ "temp":72.968,
787+ "windSpeed":9.7664
788+ },
789+ "metric":{
790+ "rain":0.08,
791+ "snow":0,
792+ "temp":22.76,
793+ "windSpeed":15.696000000000002
794+ },
795+ "pressure":1014.09,
796+ "timestamp":1437404400,
797+ "windDeg":220.002,
798+ "windDir":"SW"
799+ },
800+ {
801+ "condition":"Rain",
802+ "date":{
803+ "date":20,
804+ "hours":18,
805+ "minutes":0,
806+ "month":6,
807+ "year":2015
808+ },
809+ "humidity":83,
810+ "icon":"rain",
811+ "imperial":{
812+ "rain":0.03582677165354331,
813+ "snow":0,
814+ "temp":68.036,
815+ "windSpeed":12.118400000000001
816+ },
817+ "metric":{
818+ "rain":0.91,
819+ "snow":0,
820+ "temp":20.02,
821+ "windSpeed":19.476000000000003
822+ },
823+ "pressure":1013.88,
824+ "timestamp":1437415200,
825+ "windDeg":223.502,
826+ "windDir":"SW"
827+ },
828+ {
829+ "condition":"Rain",
830+ "date":{
831+ "date":20,
832+ "hours":21,
833+ "minutes":0,
834+ "month":6,
835+ "year":2015
836+ },
837+ "humidity":83,
838+ "icon":"rain",
839+ "imperial":{
840+ "rain":0.005118110236220473,
841+ "snow":0,
842+ "temp":66.38,
843+ "windSpeed":10.9536
844+ },
845+ "metric":{
846+ "rain":0.13,
847+ "snow":0,
848+ "temp":19.1,
849+ "windSpeed":17.604
850+ },
851+ "pressure":1013.72,
852+ "timestamp":1437426000,
853+ "windDeg":224.006,
854+ "windDir":"SW"
855+ }
856+ ],
857+ "humidity":81,
858+ "icon":"rain",
859+ "imperial":{
860+ "rain":0.030708661417322838,
861+ "snow":0,
862+ "tempMax":71.798,
863+ "tempMin":52.519999999999996,
864+ "windSpeed":10.2144
865+ },
866+ "metric":{
867+ "rain":0.78,
868+ "snow":0,
869+ "tempMax":22.11,
870+ "tempMin":11.4,
871+ "windSpeed":16.416
872+ },
873+ "pressure":1016.62,
874+ "timestamp":1437393600,
875+ "windDeg":168,
876+ "windDir":"S"
877+ },
878+ {
879+ "condition":"Clouds",
880+ "date":{
881+ "date":21,
882+ "hours":11,
883+ "minutes":59,
884+ "month":6,
885+ "year":2015
886+ },
887+ "hourly":[
888+ {
889+ "condition":"Rain",
890+ "date":{
891+ "date":21,
892+ "hours":0,
893+ "minutes":0,
894+ "month":6,
895+ "year":2015
896+ },
897+ "humidity":87,
898+ "icon":"rain",
899+ "imperial":{
900+ "rain":0.01653543307086614,
901+ "snow":0,
902+ "temp":64.274,
903+ "windSpeed":9.8336
904+ },
905+ "metric":{
906+ "rain":0.42,
907+ "snow":0,
908+ "temp":17.93,
909+ "windSpeed":15.803999999999998
910+ },
911+ "pressure":1014.36,
912+ "timestamp":1437436800,
913+ "windDeg":237.503,
914+ "windDir":"SW"
915+ },
916+ {
917+ "condition":"Clear",
918+ "date":{
919+ "date":21,
920+ "hours":3,
921+ "minutes":0,
922+ "month":6,
923+ "year":2015
924+ },
925+ "humidity":82,
926+ "icon":"cloud_moon",
927+ "imperial":{
928+ "rain":0,
929+ "snow":0,
930+ "temp":59.684,
931+ "windSpeed":7.840000000000001
932+ },
933+ "metric":{
934+ "rain":0,
935+ "snow":0,
936+ "temp":15.38,
937+ "windSpeed":12.6
938+ },
939+ "pressure":1015,
940+ "timestamp":1437447600,
941+ "windDeg":249.502,
942+ "windDir":"W"
943+ },
944+ {
945+ "condition":"Clear",
946+ "date":{
947+ "date":21,
948+ "hours":6,
949+ "minutes":0,
950+ "month":6,
951+ "year":2015
952+ },
953+ "humidity":81,
954+ "icon":"sun",
955+ "imperial":{
956+ "rain":0,
957+ "snow":0,
958+ "temp":58.838,
959+ "windSpeed":7.459200000000001
960+ },
961+ "metric":{
962+ "rain":0,
963+ "snow":0,
964+ "temp":14.91,
965+ "windSpeed":11.988000000000001
966+ },
967+ "pressure":1015.87,
968+ "timestamp":1437458400,
969+ "windDeg":245.502,
970+ "windDir":"W"
971+ },
972+ {
973+ "condition":"Clear",
974+ "date":{
975+ "date":21,
976+ "hours":9,
977+ "minutes":0,
978+ "month":6,
979+ "year":2015
980+ },
981+ "humidity":72,
982+ "icon":"sun",
983+ "imperial":{
984+ "rain":0,
985+ "snow":0,
986+ "temp":64.544,
987+ "windSpeed":8.624
988+ },
989+ "metric":{
990+ "rain":0,
991+ "snow":0,
992+ "temp":18.08,
993+ "windSpeed":13.860000000000001
994+ },
995+ "pressure":1016.56,
996+ "timestamp":1437469200,
997+ "windDeg":234.001,
998+ "windDir":"SW"
999+ },
1000+ {
1001+ "condition":"Clear",
1002+ "date":{
1003+ "date":21,
1004+ "hours":12,
1005+ "minutes":0,
1006+ "month":6,
1007+ "year":2015
1008+ },
1009+ "humidity":65,
1010+ "icon":"sun",
1011+ "imperial":{
1012+ "rain":0,
1013+ "snow":0,
1014+ "temp":69.74600000000001,
1015+ "windSpeed":10.4608
1016+ },
1017+ "metric":{
1018+ "rain":0,
1019+ "snow":0,
1020+ "temp":20.97,
1021+ "windSpeed":16.812
1022+ },
1023+ "pressure":1016.62,
1024+ "timestamp":1437480000,
1025+ "windDeg":228.508,
1026+ "windDir":"SW"
1027+ },
1028+ {
1029+ "condition":"Clear",
1030+ "date":{
1031+ "date":21,
1032+ "hours":15,
1033+ "minutes":0,
1034+ "month":6,
1035+ "year":2015
1036+ },
1037+ "humidity":59,
1038+ "icon":"sun",
1039+ "imperial":{
1040+ "rain":0,
1041+ "snow":0,
1042+ "temp":71.564,
1043+ "windSpeed":11.6704
1044+ },
1045+ "metric":{
1046+ "rain":0,
1047+ "snow":0,
1048+ "temp":21.98,
1049+ "windSpeed":18.756
1050+ },
1051+ "pressure":1016.46,
1052+ "timestamp":1437490800,
1053+ "windDeg":235,
1054+ "windDir":"SW"
1055+ },
1056+ {
1057+ "condition":"Clouds",
1058+ "date":{
1059+ "date":21,
1060+ "hours":18,
1061+ "minutes":0,
1062+ "month":6,
1063+ "year":2015
1064+ },
1065+ "humidity":58,
1066+ "icon":"cloud_sun",
1067+ "imperial":{
1068+ "rain":0,
1069+ "snow":0,
1070+ "temp":69.29599999999999,
1071+ "windSpeed":10.796800000000001
1072+ },
1073+ "metric":{
1074+ "rain":0,
1075+ "snow":0,
1076+ "temp":20.72,
1077+ "windSpeed":17.352
1078+ },
1079+ "pressure":1016.78,
1080+ "timestamp":1437501600,
1081+ "windDeg":244.003,
1082+ "windDir":"W"
1083+ },
1084+ {
1085+ "condition":"Clouds",
1086+ "date":{
1087+ "date":21,
1088+ "hours":21,
1089+ "minutes":0,
1090+ "month":6,
1091+ "year":2015
1092+ },
1093+ "humidity":68,
1094+ "icon":"cloud",
1095+ "imperial":{
1096+ "rain":0,
1097+ "snow":0,
1098+ "temp":65.156,
1099+ "windSpeed":8.534400000000002
1100+ },
1101+ "metric":{
1102+ "rain":0,
1103+ "snow":0,
1104+ "temp":18.42,
1105+ "windSpeed":13.716000000000001
1106+ },
1107+ "pressure":1018.15,
1108+ "timestamp":1437512400,
1109+ "windDeg":249.501,
1110+ "windDir":"W"
1111+ }
1112+ ],
1113+ "humidity":73,
1114+ "icon":"cloud_sun",
1115+ "imperial":{
1116+ "rain":0,
1117+ "snow":0,
1118+ "tempMax":70.394,
1119+ "tempMin":57.938,
1120+ "windSpeed":18.412800000000004
1121+ },
1122+ "metric":{
1123+ "rain":0,
1124+ "snow":0,
1125+ "tempMax":21.33,
1126+ "tempMin":14.41,
1127+ "windSpeed":29.592000000000002
1128+ },
1129+ "pressure":1016.62,
1130+ "timestamp":1437480000,
1131+ "windDeg":233,
1132+ "windDir":"SW"
1133+ },
1134+ {
1135+ "condition":"Rain",
1136+ "date":{
1137+ "date":22,
1138+ "hours":11,
1139+ "minutes":59,
1140+ "month":6,
1141+ "year":2015
1142+ },
1143+ "hourly":[
1144+ {
1145+ "condition":"Clouds",
1146+ "date":{
1147+ "date":22,
1148+ "hours":0,
1149+ "minutes":0,
1150+ "month":6,
1151+ "year":2015
1152+ },
1153+ "humidity":71,
1154+ "icon":"cloud",
1155+ "imperial":{
1156+ "rain":0,
1157+ "snow":0,
1158+ "temp":62.654,
1159+ "windSpeed":7.4144000000000005
1160+ },
1161+ "metric":{
1162+ "rain":0,
1163+ "snow":0,
1164+ "temp":17.03,
1165+ "windSpeed":11.916
1166+ },
1167+ "pressure":1019.51,
1168+ "timestamp":1437523200,
1169+ "windDeg":264.503,
1170+ "windDir":"W"
1171+ },
1172+ {
1173+ "condition":"Clouds",
1174+ "date":{
1175+ "date":22,
1176+ "hours":3,
1177+ "minutes":0,
1178+ "month":6,
1179+ "year":2015
1180+ },
1181+ "humidity":78,
1182+ "icon":"cloud_moon",
1183+ "imperial":{
1184+ "rain":0,
1185+ "snow":0,
1186+ "temp":57.956,
1187+ "windSpeed":5.734400000000001
1188+ },
1189+ "metric":{
1190+ "rain":0,
1191+ "snow":0,
1192+ "temp":14.42,
1193+ "windSpeed":9.216000000000001
1194+ },
1195+ "pressure":1020.16,
1196+ "timestamp":1437534000,
1197+ "windDeg":265.502,
1198+ "windDir":"W"
1199+ },
1200+ {
1201+ "condition":"Rain",
1202+ "date":{
1203+ "date":22,
1204+ "hours":6,
1205+ "minutes":0,
1206+ "month":6,
1207+ "year":2015
1208+ },
1209+ "humidity":79,
1210+ "icon":"rain",
1211+ "imperial":{
1212+ "rain":0.00039370078740157485,
1213+ "snow":0,
1214+ "temp":58.964,
1215+ "windSpeed":4.1664
1216+ },
1217+ "metric":{
1218+ "rain":0.01,
1219+ "snow":0,
1220+ "temp":14.98,
1221+ "windSpeed":6.696000000000001
1222+ },
1223+ "pressure":1020.7,
1224+ "timestamp":1437544800,
1225+ "windDeg":257.008,
1226+ "windDir":"W"
1227+ },
1228+ {
1229+ "condition":"Rain",
1230+ "date":{
1231+ "date":22,
1232+ "hours":9,
1233+ "minutes":0,
1234+ "month":6,
1235+ "year":2015
1236+ },
1237+ "humidity":66,
1238+ "icon":"rain",
1239+ "imperial":{
1240+ "rain":0.0007874015748031497,
1241+ "snow":0,
1242+ "temp":64.274,
1243+ "windSpeed":3.9872000000000005
1244+ },
1245+ "metric":{
1246+ "rain":0.02,
1247+ "snow":0,
1248+ "temp":17.93,
1249+ "windSpeed":6.408
1250+ },
1251+ "pressure":1021.13,
1252+ "timestamp":1437555600,
1253+ "windDeg":247.5,
1254+ "windDir":"W"
1255+ },
1256+ {
1257+ "condition":"Clouds",
1258+ "date":{
1259+ "date":22,
1260+ "hours":12,
1261+ "minutes":0,
1262+ "month":6,
1263+ "year":2015
1264+ },
1265+ "humidity":61,
1266+ "icon":"cloud_sun",
1267+ "imperial":{
1268+ "rain":0,
1269+ "snow":0,
1270+ "temp":68.55799999999999,
1271+ "windSpeed":5.510400000000001
1272+ },
1273+ "metric":{
1274+ "rain":0,
1275+ "snow":0,
1276+ "temp":20.31,
1277+ "windSpeed":8.856
1278+ },
1279+ "pressure":1020.74,
1280+ "timestamp":1437566400,
1281+ "windDeg":227.501,
1282+ "windDir":"SW"
1283+ },
1284+ {
1285+ "condition":"Clouds",
1286+ "date":{
1287+ "date":22,
1288+ "hours":15,
1289+ "minutes":0,
1290+ "month":6,
1291+ "year":2015
1292+ },
1293+ "humidity":56,
1294+ "icon":"cloud_sun",
1295+ "imperial":{
1296+ "rain":0,
1297+ "snow":0,
1298+ "temp":69.44,
1299+ "windSpeed":7.750400000000001
1300+ },
1301+ "metric":{
1302+ "rain":0,
1303+ "snow":0,
1304+ "temp":20.8,
1305+ "windSpeed":12.456
1306+ },
1307+ "pressure":1019.48,
1308+ "timestamp":1437577200,
1309+ "windDeg":236.001,
1310+ "windDir":"SW"
1311+ },
1312+ {
1313+ "condition":"Clouds",
1314+ "date":{
1315+ "date":22,
1316+ "hours":18,
1317+ "minutes":0,
1318+ "month":6,
1319+ "year":2015
1320+ },
1321+ "humidity":56,
1322+ "icon":"cloud",
1323+ "imperial":{
1324+ "rain":0,
1325+ "snow":0,
1326+ "temp":67.19,
1327+ "windSpeed":8.512
1328+ },
1329+ "metric":{
1330+ "rain":0,
1331+ "snow":0,
1332+ "temp":19.55,
1333+ "windSpeed":13.68
1334+ },
1335+ "pressure":1019.42,
1336+ "timestamp":1437588000,
1337+ "windDeg":258.502,
1338+ "windDir":"W"
1339+ },
1340+ {
1341+ "condition":"Rain",
1342+ "date":{
1343+ "date":22,
1344+ "hours":21,
1345+ "minutes":0,
1346+ "month":6,
1347+ "year":2015
1348+ },
1349+ "humidity":64,
1350+ "icon":"rain",
1351+ "imperial":{
1352+ "rain":0.0007874015748031497,
1353+ "snow":0,
1354+ "temp":63.35600000000001,
1355+ "windSpeed":5.1968000000000005
1356+ },
1357+ "metric":{
1358+ "rain":0.02,
1359+ "snow":0,
1360+ "temp":17.42,
1361+ "windSpeed":8.352
1362+ },
1363+ "pressure":1020.07,
1364+ "timestamp":1437598800,
1365+ "windDeg":261.502,
1366+ "windDir":"W"
1367+ }
1368+ ],
1369+ "humidity":0,
1370+ "icon":"rain",
1371+ "imperial":{
1372+ "rain":0.07007874015748032,
1373+ "snow":0,
1374+ "tempMax":70.80799999999999,
1375+ "tempMin":58.135999999999996,
1376+ "windSpeed":8.736
1377+ },
1378+ "metric":{
1379+ "rain":1.78,
1380+ "snow":0,
1381+ "tempMax":21.56,
1382+ "tempMin":14.52,
1383+ "windSpeed":14.04
1384+ },
1385+ "pressure":1023.19,
1386+ "timestamp":1437566400,
1387+ "windDeg":219,
1388+ "windDir":"SW"
1389+ },
1390+ {
1391+ "condition":"Clear",
1392+ "date":{
1393+ "date":23,
1394+ "hours":11,
1395+ "minutes":59,
1396+ "month":6,
1397+ "year":2015
1398+ },
1399+ "hourly":[
1400+ {
1401+ "condition":"Rain",
1402+ "date":{
1403+ "date":23,
1404+ "hours":0,
1405+ "minutes":0,
1406+ "month":6,
1407+ "year":2015
1408+ },
1409+ "humidity":74,
1410+ "icon":"rain",
1411+ "imperial":{
1412+ "rain":0.003149606299212599,
1413+ "snow":0,
1414+ "temp":60.908,
1415+ "windSpeed":3.2704000000000004
1416+ },
1417+ "metric":{
1418+ "rain":0.08,
1419+ "snow":0,
1420+ "temp":16.06,
1421+ "windSpeed":5.256
1422+ },
1423+ "pressure":1020.03,
1424+ "timestamp":1437609600,
1425+ "windDeg":253.504,
1426+ "windDir":"W"
1427+ },
1428+ {
1429+ "condition":"Rain",
1430+ "date":{
1431+ "date":23,
1432+ "hours":3,
1433+ "minutes":0,
1434+ "month":6,
1435+ "year":2015
1436+ },
1437+ "humidity":83,
1438+ "icon":"rain",
1439+ "imperial":{
1440+ "rain":0.005905511811023622,
1441+ "snow":0,
1442+ "temp":59.054,
1443+ "windSpeed":3.4048000000000003
1444+ },
1445+ "metric":{
1446+ "rain":0.15,
1447+ "snow":0,
1448+ "temp":15.03,
1449+ "windSpeed":5.472
1450+ },
1451+ "pressure":1019.47,
1452+ "timestamp":1437620400,
1453+ "windDeg":251.501,
1454+ "windDir":"W"
1455+ },
1456+ {
1457+ "condition":"Rain",
1458+ "date":{
1459+ "date":23,
1460+ "hours":6,
1461+ "minutes":0,
1462+ "month":6,
1463+ "year":2015
1464+ },
1465+ "humidity":88,
1466+ "icon":"rain",
1467+ "imperial":{
1468+ "rain":0.006692913385826772,
1469+ "snow":0,
1470+ "temp":59.054,
1471+ "windSpeed":3.4048000000000003
1472+ },
1473+ "metric":{
1474+ "rain":0.17,
1475+ "snow":0,
1476+ "temp":15.03,
1477+ "windSpeed":5.472
1478+ },
1479+ "pressure":1019.07,
1480+ "timestamp":1437631200,
1481+ "windDeg":165.001,
1482+ "windDir":"S"
1483+ },
1484+ {
1485+ "condition":"Rain",
1486+ "date":{
1487+ "date":23,
1488+ "hours":9,
1489+ "minutes":0,
1490+ "month":6,
1491+ "year":2015
1492+ },
1493+ "humidity":77,
1494+ "icon":"rain",
1495+ "imperial":{
1496+ "rain":0.0024606299212598425,
1497+ "snow":0,
1498+ "temp":63.212,
1499+ "windSpeed":4.972800000000001
1500+ },
1501+ "metric":{
1502+ "rain":0.0625,
1503+ "snow":0,
1504+ "temp":17.34,
1505+ "windSpeed":7.992000000000001
1506+ },
1507+ "pressure":1018.4,
1508+ "timestamp":1437642000,
1509+ "windDeg":199.002,
1510+ "windDir":"S"
1511+ },
1512+ {
1513+ "condition":"Clouds",
1514+ "date":{
1515+ "date":23,
1516+ "hours":12,
1517+ "minutes":0,
1518+ "month":6,
1519+ "year":2015
1520+ },
1521+ "humidity":64,
1522+ "icon":"cloud_sun",
1523+ "imperial":{
1524+ "rain":0,
1525+ "snow":0,
1526+ "temp":68.27,
1527+ "windSpeed":6.7424
1528+ },
1529+ "metric":{
1530+ "rain":0,
1531+ "snow":0,
1532+ "temp":20.15,
1533+ "windSpeed":10.836
1534+ },
1535+ "pressure":1017.1,
1536+ "timestamp":1437652800,
1537+ "windDeg":224.501,
1538+ "windDir":"SW"
1539+ },
1540+ {
1541+ "condition":"Rain",
1542+ "date":{
1543+ "date":23,
1544+ "hours":15,
1545+ "minutes":0,
1546+ "month":6,
1547+ "year":2015
1548+ },
1549+ "humidity":62,
1550+ "icon":"rain",
1551+ "imperial":{
1552+ "rain":0.0004921259842519686,
1553+ "snow":0,
1554+ "temp":67.55000000000001,
1555+ "windSpeed":8.4224
1556+ },
1557+ "metric":{
1558+ "rain":0.0125,
1559+ "snow":0,
1560+ "temp":19.75,
1561+ "windSpeed":13.536
1562+ },
1563+ "pressure":1016.06,
1564+ "timestamp":1437663600,
1565+ "windDeg":231.501,
1566+ "windDir":"SW"
1567+ }
1568+ ],
1569+ "humidity":0,
1570+ "icon":"sun",
1571+ "imperial":{
1572+ "rain":0,
1573+ "snow":0,
1574+ "tempMax":73.328,
1575+ "tempMin":58.064,
1576+ "windSpeed":8.601600000000001
1577+ },
1578+ "metric":{
1579+ "rain":0,
1580+ "snow":0,
1581+ "tempMax":22.96,
1582+ "tempMin":14.48,
1583+ "windSpeed":13.824
1584+ },
1585+ "pressure":1023.52,
1586+ "timestamp":1437652800,
1587+ "windDeg":239,
1588+ "windDir":"SW"
1589+ },
1590+ {
1591+ "condition":"Rain",
1592+ "date":{
1593+ "date":24,
1594+ "hours":11,
1595+ "minutes":59,
1596+ "month":6,
1597+ "year":2015
1598+ },
1599+ "hourly":[
1600+
1601+ ],
1602+ "humidity":0,
1603+ "icon":"rain",
1604+ "imperial":{
1605+ "rain":0.01968503937007874,
1606+ "snow":0,
1607+ "tempMax":79.07,
1608+ "tempMin":63.068000000000005,
1609+ "windSpeed":12.1632
1610+ },
1611+ "metric":{
1612+ "rain":0.5,
1613+ "snow":0,
1614+ "tempMax":26.15,
1615+ "tempMin":17.26,
1616+ "windSpeed":19.548
1617+ },
1618+ "pressure":1017.03,
1619+ "timestamp":1437739200,
1620+ "windDeg":87,
1621+ "windDir":"E"
1622+ },
1623+ {
1624+ "condition":"Rain",
1625+ "date":{
1626+ "date":25,
1627+ "hours":11,
1628+ "minutes":59,
1629+ "month":6,
1630+ "year":2015
1631+ },
1632+ "hourly":[
1633+
1634+ ],
1635+ "humidity":0,
1636+ "icon":"rain",
1637+ "imperial":{
1638+ "rain":0.010629921259842521,
1639+ "snow":0,
1640+ "tempMax":74.084,
1641+ "tempMin":60.025999999999996,
1642+ "windSpeed":13.820800000000002
1643+ },
1644+ "metric":{
1645+ "rain":0.27,
1646+ "snow":0,
1647+ "tempMax":23.38,
1648+ "tempMin":15.57,
1649+ "windSpeed":22.212
1650+ },
1651+ "pressure":1015.03,
1652+ "timestamp":1437825600,
1653+ "windDeg":228,
1654+ "windDir":"SW"
1655+ },
1656+ {
1657+ "condition":"Clear",
1658+ "date":{
1659+ "date":26,
1660+ "hours":11,
1661+ "minutes":59,
1662+ "month":6,
1663+ "year":2015
1664+ },
1665+ "hourly":[
1666+
1667+ ],
1668+ "humidity":0,
1669+ "icon":"sun",
1670+ "imperial":{
1671+ "rain":0,
1672+ "snow":0,
1673+ "tempMax":70.16,
1674+ "tempMin":58.028000000000006,
1675+ "windSpeed":17.3824
1676+ },
1677+ "metric":{
1678+ "rain":0,
1679+ "snow":0,
1680+ "tempMax":21.2,
1681+ "tempMin":14.46,
1682+ "windSpeed":27.936
1683+ },
1684+ "pressure":1016.83,
1685+ "timestamp":1437912000,
1686+ "windDeg":226,
1687+ "windDir":"SW"
1688+ },
1689+ {
1690+ "condition":"Rain",
1691+ "date":{
1692+ "date":27,
1693+ "hours":11,
1694+ "minutes":59,
1695+ "month":6,
1696+ "year":2015
1697+ },
1698+ "hourly":[
1699+
1700+ ],
1701+ "humidity":0,
1702+ "icon":"rain",
1703+ "imperial":{
1704+ "rain":0.031102362204724412,
1705+ "snow":0,
1706+ "tempMax":69.53,
1707+ "tempMin":56.426,
1708+ "windSpeed":12.4544
1709+ },
1710+ "metric":{
1711+ "rain":0.79,
1712+ "snow":0,
1713+ "tempMax":20.85,
1714+ "tempMin":13.57,
1715+ "windSpeed":20.016
1716+ },
1717+ "pressure":1017.26,
1718+ "timestamp":1437998400,
1719+ "windDeg":245,
1720+ "windDir":"W"
1721+ }
1722+ ],
1723+ "save":true,
1724+ "updated":1437239273904
1725+}
1726
1727=== added file 'tests/autopilot/ubuntu_weather_app/files/2.json'
1728--- tests/autopilot/ubuntu_weather_app/files/2.json 1970-01-01 00:00:00 +0000
1729+++ tests/autopilot/ubuntu_weather_app/files/2.json 2015-07-25 13:52:29 +0000
1730@@ -0,0 +1,1509 @@
1731+{
1732+ "db":{
1733+ "id":3,
1734+ "updated":"2015-07-18T17:06:03.228Z"
1735+ },
1736+ "format":20150404,
1737+ "location":{
1738+ "objectName":"",
1739+ "adminName1":"Washington, D.C.",
1740+ "adminName2":"US.DC.001",
1741+ "adminName3":"",
1742+ "areaLabel":"Washington, D.C., United States",
1743+ "coord":{
1744+ "lat":"38.89511",
1745+ "lon":"-77.03637"
1746+ },
1747+ "country":"US",
1748+ "countryName":"United States",
1749+ "name":"Washington",
1750+ "population":601723,
1751+ "services":{
1752+ "geonames":4140963,
1753+ "openweathermap":4140963
1754+ },
1755+ "timezone":{
1756+ "dstOffset":-4,
1757+ "gmtOffset":-5,
1758+ "timeZoneId":"America/New_York"
1759+ }
1760+ },
1761+ "data":[
1762+ {
1763+ "condition":"Rain",
1764+ "date":{
1765+ "date":18,
1766+ "hours":11,
1767+ "minutes":59,
1768+ "month":6,
1769+ "year":2015
1770+ },
1771+ "hourly":[
1772+ {
1773+ "condition":"Clear",
1774+ "date":{
1775+ "date":18,
1776+ "hours":13,
1777+ "minutes":0,
1778+ "month":6,
1779+ "year":2015
1780+ },
1781+ "humidity":72,
1782+ "icon":"cloud_sun",
1783+ "imperial":{
1784+ "rain":0,
1785+ "snow":0,
1786+ "temp":85.136,
1787+ "windSpeed":4.9504
1788+ },
1789+ "metric":{
1790+ "rain":0,
1791+ "snow":0,
1792+ "temp":29.52,
1793+ "windSpeed":7.956
1794+ },
1795+ "pressure":1020.23,
1796+ "timestamp":1437242400,
1797+ "windDeg":202.008,
1798+ "windDir":"S"
1799+ },
1800+ {
1801+ "condition":"Clouds",
1802+ "date":{
1803+ "date":18,
1804+ "hours":16,
1805+ "minutes":0,
1806+ "month":6,
1807+ "year":2015
1808+ },
1809+ "humidity":64,
1810+ "icon":"cloud_sun",
1811+ "imperial":{
1812+ "rain":0,
1813+ "snow":0,
1814+ "temp":86.21600000000001,
1815+ "windSpeed":6.7424
1816+ },
1817+ "metric":{
1818+ "rain":0,
1819+ "snow":0,
1820+ "temp":30.12,
1821+ "windSpeed":10.836
1822+ },
1823+ "pressure":1018.84,
1824+ "timestamp":1437253200,
1825+ "windDeg":213.504,
1826+ "windDir":"SW"
1827+ },
1828+ {
1829+ "condition":"Rain",
1830+ "date":{
1831+ "date":18,
1832+ "hours":19,
1833+ "minutes":0,
1834+ "month":6,
1835+ "year":2015
1836+ },
1837+ "humidity":78,
1838+ "icon":"rain",
1839+ "imperial":{
1840+ "rain":0.17874015748031497,
1841+ "snow":0,
1842+ "temp":79.7,
1843+ "windSpeed":4.1888000000000005
1844+ },
1845+ "metric":{
1846+ "rain":4.54,
1847+ "snow":0,
1848+ "temp":26.5,
1849+ "windSpeed":6.732
1850+ },
1851+ "pressure":1019.47,
1852+ "timestamp":1437264000,
1853+ "windDeg":291.506,
1854+ "windDir":"W"
1855+ },
1856+ {
1857+ "condition":"Rain",
1858+ "date":{
1859+ "date":18,
1860+ "hours":22,
1861+ "minutes":0,
1862+ "month":6,
1863+ "year":2015
1864+ },
1865+ "humidity":88,
1866+ "icon":"rain",
1867+ "imperial":{
1868+ "rain":0.017913385826771655,
1869+ "snow":0,
1870+ "temp":75.938,
1871+ "windSpeed":2.9344000000000006
1872+ },
1873+ "metric":{
1874+ "rain":0.455,
1875+ "snow":0,
1876+ "temp":24.41,
1877+ "windSpeed":4.716
1878+ },
1879+ "pressure":1019.87,
1880+ "timestamp":1437274800,
1881+ "windDeg":270.502,
1882+ "windDir":"W"
1883+ }
1884+ ],
1885+ "humidity":72,
1886+ "icon":"rain",
1887+ "imperial":{
1888+ "rain":0.1968503937007874,
1889+ "snow":0,
1890+ "tempMax":86.19800000000001,
1891+ "tempMin":74.35400000000001,
1892+ "windSpeed":4.9504
1893+ },
1894+ "metric":{
1895+ "rain":5,
1896+ "snow":0,
1897+ "tempMax":30.11,
1898+ "tempMin":23.53,
1899+ "windSpeed":7.956
1900+ },
1901+ "pressure":1020.23,
1902+ "timestamp":1437238800,
1903+ "windDeg":202,
1904+ "windDir":"S",
1905+ "current":{
1906+ "condition":"Rain",
1907+ "date":{
1908+ "date":18,
1909+ "hours":11,
1910+ "minutes":59,
1911+ "month":6,
1912+ "year":2015
1913+ },
1914+ "humidity":88,
1915+ "icon":"rain",
1916+ "imperial":{
1917+ "rain":0,
1918+ "snow":0,
1919+ "temp":78.314,
1920+ "windSpeed":5.824000000000001
1921+ },
1922+ "metric":{
1923+ "rain":0,
1924+ "snow":0,
1925+ "temp":25.73,
1926+ "windSpeed":9.360000000000001
1927+ },
1928+ "pressure":1016,
1929+ "timestamp":1437236981,
1930+ "windDeg":270,
1931+ "windDir":"W",
1932+ "service":"openweathermap",
1933+ "service_id":4140963
1934+ }
1935+ },
1936+ {
1937+ "condition":"Clear",
1938+ "date":{
1939+ "date":19,
1940+ "hours":11,
1941+ "minutes":59,
1942+ "month":6,
1943+ "year":2015
1944+ },
1945+ "hourly":[
1946+ {
1947+ "condition":"Clear",
1948+ "date":{
1949+ "date":19,
1950+ "hours":1,
1951+ "minutes":0,
1952+ "month":6,
1953+ "year":2015
1954+ },
1955+ "humidity":95,
1956+ "icon":"moon",
1957+ "imperial":{
1958+ "rain":0,
1959+ "snow":0,
1960+ "temp":74.35400000000001,
1961+ "windSpeed":2.7104000000000004
1962+ },
1963+ "metric":{
1964+ "rain":0,
1965+ "snow":0,
1966+ "temp":23.53,
1967+ "windSpeed":4.356
1968+ },
1969+ "pressure":1019.41,
1970+ "timestamp":1437285600,
1971+ "windDeg":254.502,
1972+ "windDir":"W"
1973+ },
1974+ {
1975+ "condition":"Clear",
1976+ "date":{
1977+ "date":19,
1978+ "hours":4,
1979+ "minutes":0,
1980+ "month":6,
1981+ "year":2015
1982+ },
1983+ "humidity":92,
1984+ "icon":"moon",
1985+ "imperial":{
1986+ "rain":0,
1987+ "snow":0,
1988+ "temp":73.094,
1989+ "windSpeed":2.9344000000000006
1990+ },
1991+ "metric":{
1992+ "rain":0,
1993+ "snow":0,
1994+ "temp":22.83,
1995+ "windSpeed":4.716
1996+ },
1997+ "pressure":1019.25,
1998+ "timestamp":1437296400,
1999+ "windDeg":286.5,
2000+ "windDir":"W"
2001+ },
2002+ {
2003+ "condition":"Clear",
2004+ "date":{
2005+ "date":19,
2006+ "hours":7,
2007+ "minutes":0,
2008+ "month":6,
2009+ "year":2015
2010+ },
2011+ "humidity":84,
2012+ "icon":"sun",
2013+ "imperial":{
2014+ "rain":0,
2015+ "snow":0,
2016+ "temp":80.564,
2017+ "windSpeed":5.219200000000001
2018+ },
2019+ "metric":{
2020+ "rain":0,
2021+ "snow":0,
2022+ "temp":26.98,
2023+ "windSpeed":8.388
2024+ },
2025+ "pressure":1019.67,
2026+ "timestamp":1437307200,
2027+ "windDeg":311.005,
2028+ "windDir":"NW"
2029+ },
2030+ {
2031+ "condition":"Clear",
2032+ "date":{
2033+ "date":19,
2034+ "hours":10,
2035+ "minutes":0,
2036+ "month":6,
2037+ "year":2015
2038+ },
2039+ "humidity":82,
2040+ "icon":"sun",
2041+ "imperial":{
2042+ "rain":0,
2043+ "snow":0,
2044+ "temp":87.25999999999999,
2045+ "windSpeed":3.9424000000000006
2046+ },
2047+ "metric":{
2048+ "rain":0,
2049+ "snow":0,
2050+ "temp":30.7,
2051+ "windSpeed":6.336
2052+ },
2053+ "pressure":1019.85,
2054+ "timestamp":1437318000,
2055+ "windDeg":332.001,
2056+ "windDir":"N"
2057+ },
2058+ {
2059+ "condition":"Clear",
2060+ "date":{
2061+ "date":19,
2062+ "hours":13,
2063+ "minutes":0,
2064+ "month":6,
2065+ "year":2015
2066+ },
2067+ "humidity":74,
2068+ "icon":"sun",
2069+ "imperial":{
2070+ "rain":0,
2071+ "snow":0,
2072+ "temp":90.536,
2073+ "windSpeed":3.7408
2074+ },
2075+ "metric":{
2076+ "rain":0,
2077+ "snow":0,
2078+ "temp":32.52,
2079+ "windSpeed":6.012
2080+ },
2081+ "pressure":1018.93,
2082+ "timestamp":1437328800,
2083+ "windDeg":307.502,
2084+ "windDir":"NW"
2085+ },
2086+ {
2087+ "condition":"Clear",
2088+ "date":{
2089+ "date":19,
2090+ "hours":16,
2091+ "minutes":0,
2092+ "month":6,
2093+ "year":2015
2094+ },
2095+ "humidity":67,
2096+ "icon":"sun",
2097+ "imperial":{
2098+ "rain":0,
2099+ "snow":0,
2100+ "temp":91.904,
2101+ "windSpeed":3.7632000000000003
2102+ },
2103+ "metric":{
2104+ "rain":0,
2105+ "snow":0,
2106+ "temp":33.28,
2107+ "windSpeed":6.048
2108+ },
2109+ "pressure":1016.96,
2110+ "timestamp":1437339600,
2111+ "windDeg":268.003,
2112+ "windDir":"W"
2113+ },
2114+ {
2115+ "condition":"Clear",
2116+ "date":{
2117+ "date":19,
2118+ "hours":19,
2119+ "minutes":0,
2120+ "month":6,
2121+ "year":2015
2122+ },
2123+ "humidity":68,
2124+ "icon":"cloud_moon",
2125+ "imperial":{
2126+ "rain":0,
2127+ "snow":0,
2128+ "temp":88.78999999999999,
2129+ "windSpeed":4.144000000000001
2130+ },
2131+ "metric":{
2132+ "rain":0,
2133+ "snow":0,
2134+ "temp":31.55,
2135+ "windSpeed":6.66
2136+ },
2137+ "pressure":1016.48,
2138+ "timestamp":1437350400,
2139+ "windDeg":242.008,
2140+ "windDir":"W"
2141+ },
2142+ {
2143+ "condition":"Clouds",
2144+ "date":{
2145+ "date":19,
2146+ "hours":22,
2147+ "minutes":0,
2148+ "month":6,
2149+ "year":2015
2150+ },
2151+ "humidity":72,
2152+ "icon":"cloud_moon",
2153+ "imperial":{
2154+ "rain":0,
2155+ "snow":0,
2156+ "temp":83.48,
2157+ "windSpeed":6.2944
2158+ },
2159+ "metric":{
2160+ "rain":0,
2161+ "snow":0,
2162+ "temp":28.6,
2163+ "windSpeed":10.116
2164+ },
2165+ "pressure":1016.51,
2166+ "timestamp":1437361200,
2167+ "windDeg":218.504,
2168+ "windDir":"SW"
2169+ }
2170+ ],
2171+ "humidity":74,
2172+ "icon":"sun",
2173+ "imperial":{
2174+ "rain":0,
2175+ "snow":0,
2176+ "tempMax":91.904,
2177+ "tempMin":80.564,
2178+ "windSpeed":3.7408
2179+ },
2180+ "metric":{
2181+ "rain":0,
2182+ "snow":0,
2183+ "tempMax":33.28,
2184+ "tempMin":26.98,
2185+ "windSpeed":6.012
2186+ },
2187+ "pressure":1018.93,
2188+ "timestamp":1437325200,
2189+ "windDeg":308,
2190+ "windDir":"NW"
2191+ },
2192+ {
2193+ "condition":"Rain",
2194+ "date":{
2195+ "date":20,
2196+ "hours":11,
2197+ "minutes":59,
2198+ "month":6,
2199+ "year":2015
2200+ },
2201+ "hourly":[
2202+ {
2203+ "condition":"Clouds",
2204+ "date":{
2205+ "date":20,
2206+ "hours":1,
2207+ "minutes":0,
2208+ "month":6,
2209+ "year":2015
2210+ },
2211+ "humidity":77,
2212+ "icon":"cloud_moon",
2213+ "imperial":{
2214+ "rain":0,
2215+ "snow":0,
2216+ "temp":81.5,
2217+ "windSpeed":5.7568
2218+ },
2219+ "metric":{
2220+ "rain":0,
2221+ "snow":0,
2222+ "temp":27.5,
2223+ "windSpeed":9.251999999999999
2224+ },
2225+ "pressure":1015.89,
2226+ "timestamp":1437372000,
2227+ "windDeg":245.501,
2228+ "windDir":"W"
2229+ },
2230+ {
2231+ "condition":"Clouds",
2232+ "date":{
2233+ "date":20,
2234+ "hours":4,
2235+ "minutes":0,
2236+ "month":6,
2237+ "year":2015
2238+ },
2239+ "humidity":76,
2240+ "icon":"cloud_moon",
2241+ "imperial":{
2242+ "rain":0,
2243+ "snow":0,
2244+ "temp":80.06,
2245+ "windSpeed":4.748800000000001
2246+ },
2247+ "metric":{
2248+ "rain":0,
2249+ "snow":0,
2250+ "temp":26.7,
2251+ "windSpeed":7.632000000000001
2252+ },
2253+ "pressure":1014.8,
2254+ "timestamp":1437382800,
2255+ "windDeg":257,
2256+ "windDir":"W"
2257+ },
2258+ {
2259+ "condition":"Rain",
2260+ "date":{
2261+ "date":20,
2262+ "hours":7,
2263+ "minutes":0,
2264+ "month":6,
2265+ "year":2015
2266+ },
2267+ "humidity":100,
2268+ "icon":"rain",
2269+ "imperial":{
2270+ "rain":0.17775590551181103,
2271+ "snow":0,
2272+ "temp":72.356,
2273+ "windSpeed":5.958400000000001
2274+ },
2275+ "metric":{
2276+ "rain":4.515,
2277+ "snow":0,
2278+ "temp":22.42,
2279+ "windSpeed":9.576
2280+ },
2281+ "pressure":1016.79,
2282+ "timestamp":1437393600,
2283+ "windDeg":296.501,
2284+ "windDir":"W"
2285+ },
2286+ {
2287+ "condition":"Clouds",
2288+ "date":{
2289+ "date":20,
2290+ "hours":10,
2291+ "minutes":0,
2292+ "month":6,
2293+ "year":2015
2294+ },
2295+ "humidity":97,
2296+ "icon":"cloud_sun",
2297+ "imperial":{
2298+ "rain":0,
2299+ "snow":0,
2300+ "temp":79.268,
2301+ "windSpeed":5.958400000000001
2302+ },
2303+ "metric":{
2304+ "rain":0,
2305+ "snow":0,
2306+ "temp":26.26,
2307+ "windSpeed":9.576
2308+ },
2309+ "pressure":1016.6,
2310+ "timestamp":1437404400,
2311+ "windDeg":277.502,
2312+ "windDir":"W"
2313+ },
2314+ {
2315+ "condition":"Clear",
2316+ "date":{
2317+ "date":20,
2318+ "hours":13,
2319+ "minutes":0,
2320+ "month":6,
2321+ "year":2015
2322+ },
2323+ "humidity":79,
2324+ "icon":"sun",
2325+ "imperial":{
2326+ "rain":0,
2327+ "snow":0,
2328+ "temp":87.656,
2329+ "windSpeed":6.7424
2330+ },
2331+ "metric":{
2332+ "rain":0,
2333+ "snow":0,
2334+ "temp":30.92,
2335+ "windSpeed":10.836
2336+ },
2337+ "pressure":1014.93,
2338+ "timestamp":1437415200,
2339+ "windDeg":294.502,
2340+ "windDir":"W"
2341+ },
2342+ {
2343+ "condition":"Clear",
2344+ "date":{
2345+ "date":20,
2346+ "hours":16,
2347+ "minutes":0,
2348+ "month":6,
2349+ "year":2015
2350+ },
2351+ "humidity":67,
2352+ "icon":"cloud_sun",
2353+ "imperial":{
2354+ "rain":0,
2355+ "snow":0,
2356+ "temp":88.97,
2357+ "windSpeed":8.668800000000001
2358+ },
2359+ "metric":{
2360+ "rain":0,
2361+ "snow":0,
2362+ "temp":31.65,
2363+ "windSpeed":13.932
2364+ },
2365+ "pressure":1013.88,
2366+ "timestamp":1437426000,
2367+ "windDeg":298.006,
2368+ "windDir":"W"
2369+ },
2370+ {
2371+ "condition":"Clear",
2372+ "date":{
2373+ "date":20,
2374+ "hours":19,
2375+ "minutes":0,
2376+ "month":6,
2377+ "year":2015
2378+ },
2379+ "humidity":65,
2380+ "icon":"moon",
2381+ "imperial":{
2382+ "rain":0,
2383+ "snow":0,
2384+ "temp":83.98400000000001,
2385+ "windSpeed":5.510400000000001
2386+ },
2387+ "metric":{
2388+ "rain":0,
2389+ "snow":0,
2390+ "temp":28.88,
2391+ "windSpeed":8.856
2392+ },
2393+ "pressure":1014.36,
2394+ "timestamp":1437436800,
2395+ "windDeg":322.503,
2396+ "windDir":"NW"
2397+ },
2398+ {
2399+ "condition":"Clouds",
2400+ "date":{
2401+ "date":20,
2402+ "hours":22,
2403+ "minutes":0,
2404+ "month":6,
2405+ "year":2015
2406+ },
2407+ "humidity":66,
2408+ "icon":"cloud_moon",
2409+ "imperial":{
2410+ "rain":0,
2411+ "snow":0,
2412+ "temp":76.244,
2413+ "windSpeed":6.384000000000001
2414+ },
2415+ "metric":{
2416+ "rain":0,
2417+ "snow":0,
2418+ "temp":24.58,
2419+ "windSpeed":10.26
2420+ },
2421+ "pressure":1015.65,
2422+ "timestamp":1437447600,
2423+ "windDeg":341.502,
2424+ "windDir":"N"
2425+ }
2426+ ],
2427+ "humidity":79,
2428+ "icon":"rain",
2429+ "imperial":{
2430+ "rain":0.1779527559055118,
2431+ "snow":0,
2432+ "tempMax":88.97,
2433+ "tempMin":72.24799999999999,
2434+ "windSpeed":6.7424
2435+ },
2436+ "metric":{
2437+ "rain":4.52,
2438+ "snow":0,
2439+ "tempMax":31.65,
2440+ "tempMin":22.36,
2441+ "windSpeed":10.836
2442+ },
2443+ "pressure":1014.93,
2444+ "timestamp":1437411600,
2445+ "windDeg":295,
2446+ "windDir":"W"
2447+ },
2448+ {
2449+ "condition":"Rain",
2450+ "date":{
2451+ "date":21,
2452+ "hours":11,
2453+ "minutes":59,
2454+ "month":6,
2455+ "year":2015
2456+ },
2457+ "hourly":[
2458+ {
2459+ "condition":"Clouds",
2460+ "date":{
2461+ "date":21,
2462+ "hours":1,
2463+ "minutes":0,
2464+ "month":6,
2465+ "year":2015
2466+ },
2467+ "humidity":70,
2468+ "icon":"cloud_moon",
2469+ "imperial":{
2470+ "rain":0,
2471+ "snow":0,
2472+ "temp":72.24799999999999,
2473+ "windSpeed":6.339200000000001
2474+ },
2475+ "metric":{
2476+ "rain":0,
2477+ "snow":0,
2478+ "temp":22.36,
2479+ "windSpeed":10.188
2480+ },
2481+ "pressure":1015.63,
2482+ "timestamp":1437458400,
2483+ "windDeg":320.002,
2484+ "windDir":"NW"
2485+ },
2486+ {
2487+ "condition":"Clouds",
2488+ "date":{
2489+ "date":21,
2490+ "hours":4,
2491+ "minutes":0,
2492+ "month":6,
2493+ "year":2015
2494+ },
2495+ "humidity":80,
2496+ "icon":"cloud",
2497+ "imperial":{
2498+ "rain":0,
2499+ "snow":0,
2500+ "temp":69.94399999999999,
2501+ "windSpeed":3.0240000000000005
2502+ },
2503+ "metric":{
2504+ "rain":0,
2505+ "snow":0,
2506+ "temp":21.08,
2507+ "windSpeed":4.86
2508+ },
2509+ "pressure":1015.59,
2510+ "timestamp":1437469200,
2511+ "windDeg":300.501,
2512+ "windDir":"NW"
2513+ },
2514+ {
2515+ "condition":"Clouds",
2516+ "date":{
2517+ "date":21,
2518+ "hours":7,
2519+ "minutes":0,
2520+ "month":6,
2521+ "year":2015
2522+ },
2523+ "humidity":80,
2524+ "icon":"cloud_sun",
2525+ "imperial":{
2526+ "rain":0,
2527+ "snow":0,
2528+ "temp":76.04599999999999,
2529+ "windSpeed":3.7408
2530+ },
2531+ "metric":{
2532+ "rain":0,
2533+ "snow":0,
2534+ "temp":24.47,
2535+ "windSpeed":6.012
2536+ },
2537+ "pressure":1015.89,
2538+ "timestamp":1437480000,
2539+ "windDeg":299.008,
2540+ "windDir":"W"
2541+ },
2542+ {
2543+ "condition":"Clouds",
2544+ "date":{
2545+ "date":21,
2546+ "hours":10,
2547+ "minutes":0,
2548+ "month":6,
2549+ "year":2015
2550+ },
2551+ "humidity":76,
2552+ "icon":"cloud_sun",
2553+ "imperial":{
2554+ "rain":0,
2555+ "snow":0,
2556+ "temp":83.26400000000001,
2557+ "windSpeed":3.9424000000000006
2558+ },
2559+ "metric":{
2560+ "rain":0,
2561+ "snow":0,
2562+ "temp":28.48,
2563+ "windSpeed":6.336
2564+ },
2565+ "pressure":1015.73,
2566+ "timestamp":1437490800,
2567+ "windDeg":295.5,
2568+ "windDir":"W"
2569+ },
2570+ {
2571+ "condition":"Clouds",
2572+ "date":{
2573+ "date":21,
2574+ "hours":13,
2575+ "minutes":0,
2576+ "month":6,
2577+ "year":2015
2578+ },
2579+ "humidity":70,
2580+ "icon":"cloud_sun",
2581+ "imperial":{
2582+ "rain":0,
2583+ "snow":0,
2584+ "temp":86.036,
2585+ "windSpeed":3.6288000000000005
2586+ },
2587+ "metric":{
2588+ "rain":0,
2589+ "snow":0,
2590+ "temp":30.02,
2591+ "windSpeed":5.832000000000001
2592+ },
2593+ "pressure":1014.18,
2594+ "timestamp":1437501600,
2595+ "windDeg":264.503,
2596+ "windDir":"W"
2597+ },
2598+ {
2599+ "condition":"Clouds",
2600+ "date":{
2601+ "date":21,
2602+ "hours":16,
2603+ "minutes":0,
2604+ "month":6,
2605+ "year":2015
2606+ },
2607+ "humidity":62,
2608+ "icon":"cloud",
2609+ "imperial":{
2610+ "rain":0,
2611+ "snow":0,
2612+ "temp":86.30600000000001,
2613+ "windSpeed":5.3984000000000005
2614+ },
2615+ "metric":{
2616+ "rain":0,
2617+ "snow":0,
2618+ "temp":30.17,
2619+ "windSpeed":8.676
2620+ },
2621+ "pressure":1013.37,
2622+ "timestamp":1437512400,
2623+ "windDeg":243.501,
2624+ "windDir":"W"
2625+ },
2626+ {
2627+ "condition":"Rain",
2628+ "date":{
2629+ "date":21,
2630+ "hours":19,
2631+ "minutes":0,
2632+ "month":6,
2633+ "year":2015
2634+ },
2635+ "humidity":93,
2636+ "icon":"rain",
2637+ "imperial":{
2638+ "rain":0.06850393700787402,
2639+ "snow":0,
2640+ "temp":72.73400000000001,
2641+ "windSpeed":6.1824
2642+ },
2643+ "metric":{
2644+ "rain":1.74,
2645+ "snow":0,
2646+ "temp":22.63,
2647+ "windSpeed":9.936
2648+ },
2649+ "pressure":1014.16,
2650+ "timestamp":1437523200,
2651+ "windDeg":236.003,
2652+ "windDir":"SW"
2653+ },
2654+ {
2655+ "condition":"Clear",
2656+ "date":{
2657+ "date":21,
2658+ "hours":22,
2659+ "minutes":0,
2660+ "month":6,
2661+ "year":2015
2662+ },
2663+ "humidity":93,
2664+ "icon":"cloud_moon",
2665+ "imperial":{
2666+ "rain":0,
2667+ "snow":0,
2668+ "temp":70.646,
2669+ "windSpeed":3.9424000000000006
2670+ },
2671+ "metric":{
2672+ "rain":0,
2673+ "snow":0,
2674+ "temp":21.47,
2675+ "windSpeed":6.336
2676+ },
2677+ "pressure":1014.32,
2678+ "timestamp":1437534000,
2679+ "windDeg":249.502,
2680+ "windDir":"W"
2681+ }
2682+ ],
2683+ "humidity":0,
2684+ "icon":"rain",
2685+ "imperial":{
2686+ "rain":0,
2687+ "snow":0,
2688+ "tempMax":83.53399999999999,
2689+ "tempMin":73.45400000000001,
2690+ "windSpeed":6.496
2691+ },
2692+ "metric":{
2693+ "rain":0,
2694+ "snow":0,
2695+ "tempMax":28.63,
2696+ "tempMin":23.03,
2697+ "windSpeed":10.44
2698+ },
2699+ "pressure":1012.07,
2700+ "timestamp":1437498000,
2701+ "windDeg":317,
2702+ "windDir":"NW"
2703+ },
2704+ {
2705+ "condition":"Rain",
2706+ "date":{
2707+ "date":22,
2708+ "hours":11,
2709+ "minutes":59,
2710+ "month":6,
2711+ "year":2015
2712+ },
2713+ "hourly":[
2714+ {
2715+ "condition":"Clear",
2716+ "date":{
2717+ "date":22,
2718+ "hours":1,
2719+ "minutes":0,
2720+ "month":6,
2721+ "year":2015
2722+ },
2723+ "humidity":94,
2724+ "icon":"moon",
2725+ "imperial":{
2726+ "rain":0,
2727+ "snow":0,
2728+ "temp":69.044,
2729+ "windSpeed":3.7184000000000004
2730+ },
2731+ "metric":{
2732+ "rain":0,
2733+ "snow":0,
2734+ "temp":20.58,
2735+ "windSpeed":5.976
2736+ },
2737+ "pressure":1013.97,
2738+ "timestamp":1437544800,
2739+ "windDeg":253.008,
2740+ "windDir":"W"
2741+ },
2742+ {
2743+ "condition":"Clear",
2744+ "date":{
2745+ "date":22,
2746+ "hours":4,
2747+ "minutes":0,
2748+ "month":6,
2749+ "year":2015
2750+ },
2751+ "humidity":94,
2752+ "icon":"cloud_moon",
2753+ "imperial":{
2754+ "rain":0,
2755+ "snow":0,
2756+ "temp":68.054,
2757+ "windSpeed":3.2032000000000003
2758+ },
2759+ "metric":{
2760+ "rain":0,
2761+ "snow":0,
2762+ "temp":20.03,
2763+ "windSpeed":5.148
2764+ },
2765+ "pressure":1013.68,
2766+ "timestamp":1437555600,
2767+ "windDeg":237,
2768+ "windDir":"SW"
2769+ },
2770+ {
2771+ "condition":"Clouds",
2772+ "date":{
2773+ "date":22,
2774+ "hours":7,
2775+ "minutes":0,
2776+ "month":6,
2777+ "year":2015
2778+ },
2779+ "humidity":88,
2780+ "icon":"cloud_sun",
2781+ "imperial":{
2782+ "rain":0,
2783+ "snow":0,
2784+ "temp":72.518,
2785+ "windSpeed":4.1664
2786+ },
2787+ "metric":{
2788+ "rain":0,
2789+ "snow":0,
2790+ "temp":22.51,
2791+ "windSpeed":6.696000000000001
2792+ },
2793+ "pressure":1014.42,
2794+ "timestamp":1437566400,
2795+ "windDeg":269.501,
2796+ "windDir":"W"
2797+ },
2798+ {
2799+ "condition":"Clouds",
2800+ "date":{
2801+ "date":22,
2802+ "hours":10,
2803+ "minutes":0,
2804+ "month":6,
2805+ "year":2015
2806+ },
2807+ "humidity":83,
2808+ "icon":"cloud_sun",
2809+ "imperial":{
2810+ "rain":0,
2811+ "snow":0,
2812+ "temp":81.05000000000001,
2813+ "windSpeed":3.9424000000000006
2814+ },
2815+ "metric":{
2816+ "rain":0,
2817+ "snow":0,
2818+ "temp":27.25,
2819+ "windSpeed":6.336
2820+ },
2821+ "pressure":1015.19,
2822+ "timestamp":1437577200,
2823+ "windDeg":7.50089,
2824+ "windDir":"N"
2825+ },
2826+ {
2827+ "condition":"Clouds",
2828+ "date":{
2829+ "date":22,
2830+ "hours":13,
2831+ "minutes":0,
2832+ "month":6,
2833+ "year":2015
2834+ },
2835+ "humidity":76,
2836+ "icon":"cloud_sun",
2837+ "imperial":{
2838+ "rain":0,
2839+ "snow":0,
2840+ "temp":84.28999999999999,
2841+ "windSpeed":4.032000000000001
2842+ },
2843+ "metric":{
2844+ "rain":0,
2845+ "snow":0,
2846+ "temp":29.05,
2847+ "windSpeed":6.48
2848+ },
2849+ "pressure":1014.88,
2850+ "timestamp":1437588000,
2851+ "windDeg":24.0016,
2852+ "windDir":"N"
2853+ },
2854+ {
2855+ "condition":"Clouds",
2856+ "date":{
2857+ "date":22,
2858+ "hours":16,
2859+ "minutes":0,
2860+ "month":6,
2861+ "year":2015
2862+ },
2863+ "humidity":68,
2864+ "icon":"cloud",
2865+ "imperial":{
2866+ "rain":0,
2867+ "snow":0,
2868+ "temp":84.146,
2869+ "windSpeed":3.8528000000000002
2870+ },
2871+ "metric":{
2872+ "rain":0,
2873+ "snow":0,
2874+ "temp":28.97,
2875+ "windSpeed":6.192
2876+ },
2877+ "pressure":1014.72,
2878+ "timestamp":1437598800,
2879+ "windDeg":331.502,
2880+ "windDir":"N"
2881+ },
2882+ {
2883+ "condition":"Clouds",
2884+ "date":{
2885+ "date":22,
2886+ "hours":19,
2887+ "minutes":0,
2888+ "month":6,
2889+ "year":2015
2890+ },
2891+ "humidity":69,
2892+ "icon":"cloud",
2893+ "imperial":{
2894+ "rain":0,
2895+ "snow":0,
2896+ "temp":82.05799999999999,
2897+ "windSpeed":3.8304000000000005
2898+ },
2899+ "metric":{
2900+ "rain":0,
2901+ "snow":0,
2902+ "temp":27.81,
2903+ "windSpeed":6.156
2904+ },
2905+ "pressure":1015.49,
2906+ "timestamp":1437609600,
2907+ "windDeg":310.004,
2908+ "windDir":"NW"
2909+ },
2910+ {
2911+ "condition":"Rain",
2912+ "date":{
2913+ "date":22,
2914+ "hours":22,
2915+ "minutes":0,
2916+ "month":6,
2917+ "year":2015
2918+ },
2919+ "humidity":72,
2920+ "icon":"rain",
2921+ "imperial":{
2922+ "rain":0.0011811023622047244,
2923+ "snow":0,
2924+ "temp":78.044,
2925+ "windSpeed":5.1968000000000005
2926+ },
2927+ "metric":{
2928+ "rain":0.03,
2929+ "snow":0,
2930+ "temp":25.58,
2931+ "windSpeed":8.352
2932+ },
2933+ "pressure":1017.2,
2934+ "timestamp":1437620400,
2935+ "windDeg":339.001,
2936+ "windDir":"N"
2937+ }
2938+ ],
2939+ "humidity":0,
2940+ "icon":"rain",
2941+ "imperial":{
2942+ "rain":0.042913385826771656,
2943+ "snow":0,
2944+ "tempMax":83.31800000000001,
2945+ "tempMin":73.274,
2946+ "windSpeed":2.0608000000000004
2947+ },
2948+ "metric":{
2949+ "rain":1.09,
2950+ "snow":0,
2951+ "tempMax":28.51,
2952+ "tempMin":22.93,
2953+ "windSpeed":3.3120000000000003
2954+ },
2955+ "pressure":1013.42,
2956+ "timestamp":1437584400,
2957+ "windDeg":286,
2958+ "windDir":"W"
2959+ },
2960+ {
2961+ "condition":"Rain",
2962+ "date":{
2963+ "date":23,
2964+ "hours":11,
2965+ "minutes":59,
2966+ "month":6,
2967+ "year":2015
2968+ },
2969+ "hourly":[
2970+ {
2971+ "condition":"Clouds",
2972+ "date":{
2973+ "date":23,
2974+ "hours":1,
2975+ "minutes":0,
2976+ "month":6,
2977+ "year":2015
2978+ },
2979+ "humidity":83,
2980+ "icon":"cloud_moon",
2981+ "imperial":{
2982+ "rain":0,
2983+ "snow":0,
2984+ "temp":73.904,
2985+ "windSpeed":3.7408
2986+ },
2987+ "metric":{
2988+ "rain":0,
2989+ "snow":0,
2990+ "temp":23.28,
2991+ "windSpeed":6.012
2992+ },
2993+ "pressure":1017.28,
2994+ "timestamp":1437631200,
2995+ "windDeg":342.501,
2996+ "windDir":"N"
2997+ },
2998+ {
2999+ "condition":"Clear",
3000+ "date":{
3001+ "date":23,
3002+ "hours":4,
3003+ "minutes":0,
3004+ "month":6,
3005+ "year":2015
3006+ },
3007+ "humidity":94,
3008+ "icon":"moon",
3009+ "imperial":{
3010+ "rain":0,
3011+ "snow":0,
3012+ "temp":70.142,
3013+ "windSpeed":2.7328
3014+ },
3015+ "metric":{
3016+ "rain":0,
3017+ "snow":0,
3018+ "temp":21.19,
3019+ "windSpeed":4.392
3020+ },
3021+ "pressure":1017.75,
3022+ "timestamp":1437642000,
3023+ "windDeg":299.502,
3024+ "windDir":"W"
3025+ },
3026+ {
3027+ "condition":"Clouds",
3028+ "date":{
3029+ "date":23,
3030+ "hours":7,
3031+ "minutes":0,
3032+ "month":6,
3033+ "year":2015
3034+ },
3035+ "humidity":80,
3036+ "icon":"cloud",
3037+ "imperial":{
3038+ "rain":0,
3039+ "snow":0,
3040+ "temp":72.59,
3041+ "windSpeed":7.638400000000001
3042+ },
3043+ "metric":{
3044+ "rain":0,
3045+ "snow":0,
3046+ "temp":22.55,
3047+ "windSpeed":12.276000000000002
3048+ },
3049+ "pressure":1019.29,
3050+ "timestamp":1437652800,
3051+ "windDeg":348.501,
3052+ "windDir":"N"
3053+ },
3054+ {
3055+ "condition":"Clouds",
3056+ "date":{
3057+ "date":23,
3058+ "hours":10,
3059+ "minutes":0,
3060+ "month":6,
3061+ "year":2015
3062+ },
3063+ "humidity":74,
3064+ "icon":"cloud",
3065+ "imperial":{
3066+ "rain":0,
3067+ "snow":0,
3068+ "temp":77.36,
3069+ "windSpeed":6.1824
3070+ },
3071+ "metric":{
3072+ "rain":0,
3073+ "snow":0,
3074+ "temp":25.2,
3075+ "windSpeed":9.936
3076+ },
3077+ "pressure":1020.11,
3078+ "timestamp":1437663600,
3079+ "windDeg":19.0006,
3080+ "windDir":"N"
3081+ }
3082+ ],
3083+ "humidity":0,
3084+ "icon":"rain",
3085+ "imperial":{
3086+ "rain":0.020866141732283468,
3087+ "snow":0,
3088+ "tempMax":84.758,
3089+ "tempMin":73.328,
3090+ "windSpeed":7.548800000000001
3091+ },
3092+ "metric":{
3093+ "rain":0.53,
3094+ "snow":0,
3095+ "tempMax":29.31,
3096+ "tempMin":22.96,
3097+ "windSpeed":12.132000000000001
3098+ },
3099+ "pressure":1016.1,
3100+ "timestamp":1437670800,
3101+ "windDeg":327,
3102+ "windDir":"NW"
3103+ },
3104+ {
3105+ "condition":"Rain",
3106+ "date":{
3107+ "date":24,
3108+ "hours":11,
3109+ "minutes":59,
3110+ "month":6,
3111+ "year":2015
3112+ },
3113+ "hourly":[
3114+
3115+ ],
3116+ "humidity":0,
3117+ "icon":"rain",
3118+ "imperial":{
3119+ "rain":0.013779527559055118,
3120+ "snow":0,
3121+ "tempMax":87.17,
3122+ "tempMin":74.12,
3123+ "windSpeed":5.6896
3124+ },
3125+ "metric":{
3126+ "rain":0.35,
3127+ "snow":0,
3128+ "tempMax":30.65,
3129+ "tempMin":23.4,
3130+ "windSpeed":9.144
3131+ },
3132+ "pressure":1017.79,
3133+ "timestamp":1437757200,
3134+ "windDeg":234,
3135+ "windDir":"SW"
3136+ },
3137+ {
3138+ "condition":"Rain",
3139+ "date":{
3140+ "date":25,
3141+ "hours":11,
3142+ "minutes":59,
3143+ "month":6,
3144+ "year":2015
3145+ },
3146+ "hourly":[
3147+
3148+ ],
3149+ "humidity":0,
3150+ "icon":"rain",
3151+ "imperial":{
3152+ "rain":0.13385826771653545,
3153+ "snow":0,
3154+ "tempMax":94.334,
3155+ "tempMin":80.114,
3156+ "windSpeed":8.5792
3157+ },
3158+ "metric":{
3159+ "rain":3.4,
3160+ "snow":0,
3161+ "tempMax":34.63,
3162+ "tempMin":26.73,
3163+ "windSpeed":13.788
3164+ },
3165+ "pressure":1012.93,
3166+ "timestamp":1437843600,
3167+ "windDeg":233,
3168+ "windDir":"SW"
3169+ },
3170+ {
3171+ "condition":"Rain",
3172+ "date":{
3173+ "date":26,
3174+ "hours":11,
3175+ "minutes":59,
3176+ "month":6,
3177+ "year":2015
3178+ },
3179+ "hourly":[
3180+
3181+ ],
3182+ "humidity":0,
3183+ "icon":"rain",
3184+ "imperial":{
3185+ "rain":0.01141732283464567,
3186+ "snow":0,
3187+ "tempMax":93.02,
3188+ "tempMin":77.756,
3189+ "windSpeed":7.750400000000001
3190+ },
3191+ "metric":{
3192+ "rain":0.29,
3193+ "snow":0,
3194+ "tempMax":33.9,
3195+ "tempMin":25.42,
3196+ "windSpeed":12.456
3197+ },
3198+ "pressure":1011.84,
3199+ "timestamp":1437930000,
3200+ "windDeg":271,
3201+ "windDir":"W"
3202+ },
3203+ {
3204+ "condition":"Rain",
3205+ "date":{
3206+ "date":27,
3207+ "hours":11,
3208+ "minutes":59,
3209+ "month":6,
3210+ "year":2015
3211+ },
3212+ "hourly":[
3213+
3214+ ],
3215+ "humidity":0,
3216+ "icon":"rain",
3217+ "imperial":{
3218+ "rain":0.25826771653543307,
3219+ "snow":0,
3220+ "tempMax":93.506,
3221+ "tempMin":77,
3222+ "windSpeed":5.443200000000001
3223+ },
3224+ "metric":{
3225+ "rain":6.56,
3226+ "snow":0,
3227+ "tempMax":34.17,
3228+ "tempMin":25,
3229+ "windSpeed":8.748000000000001
3230+ },
3231+ "pressure":1011.02,
3232+ "timestamp":1438016400,
3233+ "windDeg":182,
3234+ "windDir":"S"
3235+ }
3236+ ],
3237+ "save":true,
3238+ "updated":1437239163515
3239+}
3240
3241=== added file 'tests/autopilot/ubuntu_weather_app/files/CMakeLists.txt'
3242--- tests/autopilot/ubuntu_weather_app/files/CMakeLists.txt 1970-01-01 00:00:00 +0000
3243+++ tests/autopilot/ubuntu_weather_app/files/CMakeLists.txt 2015-07-25 13:52:29 +0000
3244@@ -0,0 +1,6 @@
3245+# make the data files visible on qtcreator
3246+file(GLOB PYTHON_TEST_RESOURCE_FILES
3247+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
3248+ *.json)
3249+
3250+add_custom_target(ubuntu-weather-app_PYTHONTestResourceFiles ALL SOURCES ${PYTHON_TEST_RESOURCE_FILES})
3251
3252=== modified file 'tests/autopilot/ubuntu_weather_app/tests/__init__.py'
3253--- tests/autopilot/ubuntu_weather_app/tests/__init__.py 2015-06-03 17:49:50 +0000
3254+++ tests/autopilot/ubuntu_weather_app/tests/__init__.py 2015-07-25 13:52:29 +0000
3255@@ -19,12 +19,17 @@
3256 import os
3257 import os.path
3258 import shutil
3259+import sqlite3
3260+import time
3261 import logging
3262
3263 import fixtures
3264 from ubuntu_weather_app import UbuntuWeatherApp
3265+import ubuntu_weather_app
3266
3267 from autopilot import logging as autopilot_logging
3268+from autopilot.matchers import Eventually
3269+from testtools.matchers import Equals
3270 from autopilot.testcase import AutopilotTestCase
3271
3272 import ubuntuuitoolkit
3273@@ -138,13 +143,123 @@
3274 newvalue=temp_dir))
3275
3276 logger.debug("Patched home to fake home directory %s" % temp_dir)
3277+
3278 return temp_dir
3279
3280
3281-class UbuntuWeatherAppTestCase(BaseTestCaseWithPatchedHome):
3282+class DatabaseMixin(object):
3283+
3284+ """
3285+ Helper functions for dealing with sqlite databases
3286+ """
3287+
3288+ def _execute_sql(self, statement):
3289+ conn = sqlite3.connect(self.db_path)
3290+ cursor = conn.cursor()
3291+ logger.debug("Executing sql")
3292+ logger.debug(statement)
3293+ cursor.execute(statement)
3294+ conn.commit()
3295+ conn.close()
3296+
3297+ def add_locations_to_database(self, limit=None):
3298+ locations = self.get_locations_data()
3299+ conn = sqlite3.connect(self.db_path)
3300+ cursor = conn.cursor()
3301+ logger.debug("Adding locations to database")
3302+
3303+ for loc_data in locations:
3304+ db_exec = "INSERT INTO Locations(date, data) VALUES('{}', '{}')"
3305+ cursor.execute(db_exec.format(
3306+ int(time.time() * 1000), loc_data))
3307+ conn.commit()
3308+
3309+ conn.close()
3310+
3311+ def clean_db(self):
3312+ logger.debug("Removing existing database at %s" % self.db_dir)
3313+
3314+ try:
3315+ shutil.rmtree(self.db_dir)
3316+ except OSError:
3317+ logger.debug("Could not remove existing database")
3318+ pass
3319+
3320+ def create_blank_db(self):
3321+ self.clean_db()
3322+
3323+ # create blank db
3324+ database_tmpl_dir = os.path.join(
3325+ os.path.dirname(ubuntu_weather_app.__file__),
3326+ 'databases')
3327+ logger.debug("Creating blank db on filesystem %s" % self.db_dir)
3328+
3329+ if not os.path.exists(self.app_dir):
3330+ os.makedirs(self.app_dir)
3331+
3332+ shutil.copytree(database_tmpl_dir, self.db_dir)
3333+
3334+ self.assertThat(
3335+ lambda: os.path.exists(self.db_path),
3336+ Eventually(Equals(True)))
3337+
3338+ # this needs to stay in sync with Storage.qml enties
3339+ logger.debug("Creating locations and settings tables")
3340+ self._execute_sql("CREATE TABLE IF NOT EXISTS Locations(id INTEGER "
3341+ "PRIMARY KEY AUTOINCREMENT, data TEXT, date TEXT)")
3342+
3343+ self._execute_sql("CREATE TABLE IF NOT EXISTS settings(key TEXT "
3344+ "UNIQUE, value TEXT)")
3345+
3346+ def get_locations_data(self):
3347+ result = []
3348+ json_files = [self.json_path + '/1.json', self.json_path + '/2.json']
3349+
3350+ for path in json_files:
3351+ with open(path) as fh:
3352+ json_str = fh.read()
3353+ result.append(json_str.strip())
3354+ fh.close()
3355+
3356+ return result
3357+
3358+ def load_vars(self):
3359+ self.app_dir = os.path.join(
3360+ os.environ.get('HOME'),
3361+ ".local/share/com.ubuntu.weather")
3362+ self.db_dir = os.path.join(self.app_dir, 'Databases')
3363+ self.db_file = "34e1e542f2f083ff18f537b07a380071.sqlite"
3364+ self.db_path = os.path.join(self.db_dir, self.db_file)
3365+
3366+ self.json_path = os.path.abspath(
3367+ os.path.join(os.path.dirname(__file__), '..', 'files'))
3368+
3369+
3370+class UbuntuWeatherAppTestCase(BaseTestCaseWithPatchedHome, DatabaseMixin):
3371
3372 """Base test case that launches the ubuntu-weather-app."""
3373
3374 def setUp(self):
3375 super(UbuntuWeatherAppTestCase, self).setUp()
3376+
3377+ self.load_vars()
3378+ self.create_blank_db()
3379+
3380+ self.app = UbuntuWeatherApp(self.launcher())
3381+
3382+
3383+class UbuntuWeatherAppTestCaseWithData(BaseTestCaseWithPatchedHome,
3384+ DatabaseMixin):
3385+
3386+ """Base test case that launches the ubuntu-weather-app with data."""
3387+
3388+ def setUp(self):
3389+ super(UbuntuWeatherAppTestCaseWithData, self).setUp()
3390+
3391+ self.load_vars()
3392+ self.create_blank_db()
3393+
3394+ logger.debug("Adding fake data to new database")
3395+ self.add_locations_to_database()
3396+
3397 self.app = UbuntuWeatherApp(self.launcher())
3398
3399=== added file 'tests/autopilot/ubuntu_weather_app/tests/test_empty_state.py'
3400--- tests/autopilot/ubuntu_weather_app/tests/test_empty_state.py 1970-01-01 00:00:00 +0000
3401+++ tests/autopilot/ubuntu_weather_app/tests/test_empty_state.py 2015-07-25 13:52:29 +0000
3402@@ -0,0 +1,35 @@
3403+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
3404+# Copyright 2013, 2014, 2015 Canonical
3405+#
3406+# This program is free software: you can redistribute it and/or modify it
3407+# under the terms of the GNU General Public License version 3, as published
3408+# by the Free Software Foundation.
3409+
3410+"""Ubuntu Weather app autopilot tests."""
3411+
3412+from __future__ import absolute_import
3413+
3414+import logging
3415+from autopilot.matchers import Eventually
3416+from testtools.matchers import Equals
3417+
3418+
3419+from ubuntu_weather_app.tests import UbuntuWeatherAppTestCase
3420+
3421+logger = logging.getLogger(__name__)
3422+
3423+
3424+class TestEmptyState(UbuntuWeatherAppTestCase):
3425+
3426+ def setUp(self):
3427+ super(TestEmptyState, self).setUp()
3428+
3429+ def test_add_location_button(self):
3430+ """ tests that the add location page is shown after the Add Location
3431+ button is clicked """
3432+
3433+ self.app.click_add_location_button()
3434+
3435+ add_location_page = self.app.get_add_location_page()
3436+
3437+ self.assertThat(add_location_page.visible, Eventually(Equals(True)))
3438
3439=== added file 'tests/autopilot/ubuntu_weather_app/tests/test_home_page.py'
3440--- tests/autopilot/ubuntu_weather_app/tests/test_home_page.py 1970-01-01 00:00:00 +0000
3441+++ tests/autopilot/ubuntu_weather_app/tests/test_home_page.py 2015-07-25 13:52:29 +0000
3442@@ -0,0 +1,32 @@
3443+# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
3444+# Copyright 2013, 2014, 2015 Canonical
3445+#
3446+# This program is free software: you can redistribute it and/or modify it
3447+# under the terms of the GNU General Public License version 3, as published
3448+# by the Free Software Foundation.
3449+
3450+"""Ubuntu Weather app autopilot tests."""
3451+
3452+from __future__ import absolute_import
3453+
3454+import logging
3455+from autopilot.matchers import Eventually
3456+from testtools.matchers import Equals
3457+
3458+
3459+from ubuntu_weather_app.tests import UbuntuWeatherAppTestCaseWithData
3460+
3461+logger = logging.getLogger(__name__)
3462+
3463+
3464+class TestHomePage(UbuntuWeatherAppTestCaseWithData):
3465+
3466+ def setUp(self):
3467+ super(TestHomePage, self).setUp()
3468+
3469+ def test_locations_count_startup(self):
3470+ """ tests that the correct number of locations appear at startup """
3471+
3472+ home_page = self.app.get_home_page()
3473+
3474+ self.assertThat(home_page.get_location_count, Eventually(Equals(2)))
3475
3476=== removed file 'tests/autopilot/ubuntu_weather_app/tests/test_weather.py'
3477--- tests/autopilot/ubuntu_weather_app/tests/test_weather.py 2015-06-16 00:10:16 +0000
3478+++ tests/autopilot/ubuntu_weather_app/tests/test_weather.py 1970-01-01 00:00:00 +0000
3479@@ -1,35 +0,0 @@
3480-# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
3481-# Copyright 2013, 2014, 2015 Canonical
3482-#
3483-# This program is free software: you can redistribute it and/or modify it
3484-# under the terms of the GNU General Public License version 3, as published
3485-# by the Free Software Foundation.
3486-
3487-"""Ubuntu Weather app autopilot tests."""
3488-
3489-from __future__ import absolute_import
3490-
3491-import logging
3492-from autopilot.matchers import Eventually
3493-from testtools.matchers import Equals
3494-
3495-
3496-from ubuntu_weather_app.tests import UbuntuWeatherAppTestCase
3497-
3498-logger = logging.getLogger(__name__)
3499-
3500-
3501-class TestMainWindow(UbuntuWeatherAppTestCase):
3502-
3503- def setUp(self):
3504- super(TestMainWindow, self).setUp()
3505-
3506- def test_add_location_button(self):
3507- """ tests that the add location page is shown after the Add Location
3508- button is clicked """
3509-
3510- self.app.click_add_location_button()
3511-
3512- add_location_page = self.app.get_add_location_page()
3513-
3514- self.assertThat(add_location_page.visible, Eventually(Equals(True)))

Subscribers

People subscribed via source and target branches

to all changes: