Merge lp:~mikemc/unity-scope-click/fix-1263807 into lp:unity-scope-click

Proposed by Mike McCracken
Status: Merged
Approved by: dobey
Approved revision: 98
Merged at revision: 98
Proposed branch: lp:~mikemc/unity-scope-click/fix-1263807
Merge into: lp:unity-scope-click
Diff against target: 146 lines (+96/-4)
2 files modified
src/click-scope.vala (+11/-4)
src/test-click-webservice.vala (+85/-0)
To merge this branch: bzr merge lp:~mikemc/unity-scope-click/fix-1263807
Reviewer Review Type Date Requested Status
dobey (community) Approve
Roberto Alsina (community) Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+199991@code.launchpad.net

Commit message

- Check for download progress when building default preview (LP: #1263807)

Description of the change

- Check for download progress when building default preview (LP: #1263807)

Adds checking for download progress source and using install*ING* preview when generating default preview, to cover cases where a new app preview is requested directly by the dash (not by the apps preview) while the app is still downloading

Also adds tests for build_default_preview.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Roberto Alsina (ralsina) :
review: Approve
Revision history for this message
dobey (dobey) wrote :

The empty lines after returns inside the if blocks are a bit weird, but otherwise this looks fine.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/click-scope.vala'
2--- src/click-scope.vala 2013-12-19 23:29:56 +0000
3+++ src/click-scope.vala 2013-12-24 00:48:16 +0000
4@@ -131,11 +131,11 @@
5 }
6 }
7
8- bool uri_is_click_install (string uri) {
9+ public virtual bool uri_is_click_install (string uri) {
10 return uri.has_prefix (App.CLICK_INSTALL_SCHEMA);
11 }
12
13- async Unity.Preview build_uninstalled_preview (Unity.ScopeResult result) {
14+ public async virtual Unity.Preview build_uninstalled_preview (Unity.ScopeResult result) {
15 var price = result.metadata.get(METADATA_PRICE).get_double();
16 Unity.Preview preview = yield build_app_preview (result);
17 if (!(preview is Unity.GenericPreview)) {
18@@ -148,7 +148,7 @@
19 return preview;
20 }
21
22- public async Unity.Preview build_installed_preview (Unity.ScopeResult result, string application_uri) {
23+ public async virtual Unity.Preview build_installed_preview (Unity.ScopeResult result, string application_uri) {
24 var app_id = result.metadata.get(METADATA_APP_ID).get_string();
25 Unity.Preview preview = yield build_app_preview (result);
26 preview.add_action (new Unity.PreviewAction (ACTION_OPEN_CLICK + ":" + application_uri, ("Open"), null));
27@@ -189,8 +189,15 @@
28 }
29
30 public async Unity.Preview build_default_preview (Unity.ScopeResult result) {
31- if (uri_is_click_install(result.uri)) {
32+ var app_id = result.metadata.get(METADATA_APP_ID).get_string();
33+ var progress_source = get_progress_source(app_id);
34+
35+ if (progress_source != null) {
36+ return yield build_installing_preview (result, progress_source);
37+
38+ } else if (uri_is_click_install(result.uri)) {
39 return yield build_uninstalled_preview (result);
40+
41 } else {
42 return yield build_installed_preview (result, result.uri);
43 }
44
45=== modified file 'src/test-click-webservice.vala'
46--- src/test-click-webservice.vala 2013-12-20 19:56:47 +0000
47+++ src/test-click-webservice.vala 2013-12-24 00:48:16 +0000
48@@ -523,6 +523,83 @@
49 assert (scope.preview_is_installing);
50 }
51
52+ class FakeClickScopeForBuildDefaultTest : ClickScope {
53+ public bool finds_progress = false;
54+ public bool is_installable = false;
55+
56+ public bool build_installing_called = false;
57+ public bool build_uninstalled_called = false;
58+ public bool build_installed_called = false;
59+
60+ protected async override Unity.Preview build_installing_preview (Unity.ScopeResult result, string progress_source) {
61+ build_installing_called = true;
62+ return new Unity.ApplicationPreview ("fake_title", "fake_subtitle", "fake_description", null, null);
63+ }
64+
65+ protected async override Unity.Preview build_uninstalled_preview (Unity.ScopeResult result) {
66+ build_uninstalled_called = true;
67+ return new Unity.ApplicationPreview ("fake_title", "fake_subtitle", "fake_description", null, null);
68+ }
69+
70+ protected async override Unity.Preview build_installed_preview (Unity.ScopeResult result, string application_uri) {
71+ build_installed_called = true;
72+ return new Unity.ApplicationPreview ("fake_title", "fake_subtitle", "fake_description", null, null);
73+ }
74+
75+ internal override string? get_progress_source(string app_id) {
76+ if (finds_progress) {
77+ return "fake_progress_source";
78+ }
79+ return null;
80+ }
81+
82+ protected override bool uri_is_click_install (string uri) {
83+ return is_installable;
84+ }
85+ }
86+
87+ public static void test_scope_build_default_preview_finds_progress_not_installable ()
88+ {
89+ do_test_scope_build_default_preview (true, false);
90+ }
91+
92+ public static void test_scope_build_default_preview_no_progress_source_not_installable ()
93+ {
94+ do_test_scope_build_default_preview (false, false);
95+ }
96+
97+ public static void test_scope_build_default_preview_finds_progress_is_installable ()
98+ {
99+ do_test_scope_build_default_preview (true, true);
100+ }
101+
102+ public static void test_scope_build_default_preview_no_progress_source_is_installable ()
103+ {
104+ do_test_scope_build_default_preview (false, true);
105+ }
106+
107+ public static void do_test_scope_build_default_preview (bool finds_progress, bool is_installable)
108+ {
109+ MainLoop mainloop = new MainLoop ();
110+ var scope = new FakeClickScopeForBuildDefaultTest ();
111+ scope.finds_progress = finds_progress;
112+ scope.is_installable = is_installable;
113+ var result = create_fake_result ();
114+ var metadata = new Unity.SearchMetadata();
115+
116+ scope.build_default_preview.begin(result, (obj, res) => {
117+ mainloop.quit ();
118+ try {
119+ var response = scope.build_default_preview.end (res);
120+ } catch (GLib.Error e) {
121+ error ("Failure in activate_async: %s", e.message);
122+ }
123+ });
124+ assert (run_with_timeout (mainloop, 10000));
125+ assert (scope.build_installing_called == finds_progress);
126+ assert (scope.build_uninstalled_called == (!finds_progress && is_installable));
127+ assert (scope.build_installed_called == (!is_installable && !finds_progress));
128+ }
129
130 public static int main (string[] args)
131 {
132@@ -546,6 +623,14 @@
133 Test.add_data_func ("/Unit/ClickChecker/Test_Scope_Build_Installed_Preview_Without_Uninstall",
134 test_scope_build_installed_preview_without_uninstall);
135 Test.add_data_func ("/Unit/ClickChecker/Test_Scope_InProgress", test_scope_in_progress);
136+ Test.add_data_func ("/Unit/ClickChecker/Test_Scope_Build_Default_Preview_No_Progress_Is_Installable",
137+ test_scope_build_default_preview_no_progress_source_is_installable);
138+ Test.add_data_func ("/Unit/ClickChecker/Test_Scope_Build_Default_Preview_No_Progress_Not_Installable",
139+ test_scope_build_default_preview_no_progress_source_not_installable);
140+ Test.add_data_func ("/Unit/ClickChecker/Test_Scope_Build_Default_Preview_Finds_Progress_Is_Installable",
141+ test_scope_build_default_preview_finds_progress_is_installable);
142+ Test.add_data_func ("/Unit/ClickChecker/Test_Scope_Build_Default_Preview_Finds_Progress_Not_Installable",
143+ test_scope_build_default_preview_finds_progress_not_installable);
144 return Test.run ();
145 }
146 }

Subscribers

People subscribed via source and target branches

to all changes: