|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 // Tests manual updates, including the Available Updates pane |
|
6 |
|
7 var gProvider; |
|
8 var gManagerWindow; |
|
9 var gCategoryUtilities; |
|
10 var gAvailableCategory; |
|
11 |
|
12 function test() { |
|
13 waitForExplicitFinish(); |
|
14 |
|
15 gProvider = new MockProvider(); |
|
16 |
|
17 gProvider.createAddons([{ |
|
18 id: "addon1@tests.mozilla.org", |
|
19 name: "auto updating addon", |
|
20 version: "1.0", |
|
21 applyBackgroundUpdates: AddonManager.AUTOUPDATE_ENABLE |
|
22 }]); |
|
23 |
|
24 open_manager("addons://list/extension", function(aWindow) { |
|
25 gManagerWindow = aWindow; |
|
26 gCategoryUtilities = new CategoryUtilities(gManagerWindow); |
|
27 run_next_test(); |
|
28 }); |
|
29 } |
|
30 |
|
31 function end_test() { |
|
32 close_manager(gManagerWindow, function() { |
|
33 finish(); |
|
34 }); |
|
35 } |
|
36 |
|
37 |
|
38 add_test(function() { |
|
39 gAvailableCategory = gManagerWindow.gCategories.get("addons://updates/available"); |
|
40 is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should initially be hidden"); |
|
41 |
|
42 gProvider.createAddons([{ |
|
43 id: "addon2@tests.mozilla.org", |
|
44 name: "manually updating addon", |
|
45 version: "1.0", |
|
46 isCompatible: false, |
|
47 blocklistState: Ci.nsIBlocklistService.STATE_BLOCKED, |
|
48 applyBackgroundUpdates: AddonManager.AUTOUPDATE_DISABLE |
|
49 }]); |
|
50 |
|
51 is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should still be hidden"); |
|
52 |
|
53 run_next_test(); |
|
54 }); |
|
55 |
|
56 |
|
57 add_test(function() { |
|
58 gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() { |
|
59 gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false); |
|
60 is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should now be visible"); |
|
61 is(gAvailableCategory.badgeCount, 1, "Badge for Available Updates should now be 1"); |
|
62 run_next_test(); |
|
63 }, false); |
|
64 |
|
65 gCategoryUtilities.openType("extension", function() { |
|
66 gProvider.createInstalls([{ |
|
67 name: "manually updating addon (new and improved!)", |
|
68 existingAddon: gProvider.addons[1], |
|
69 version: "1.1", |
|
70 releaseNotesURI: Services.io.newURI(TESTROOT + "thereIsNoFileHere.xhtml", null, null) |
|
71 }]); |
|
72 |
|
73 var item = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org"); |
|
74 is(item._version.value, "1.0", "Should still show the old version in the normal list"); |
|
75 }); |
|
76 }); |
|
77 |
|
78 |
|
79 add_test(function() { |
|
80 wait_for_view_load(gManagerWindow, function() { |
|
81 is(gManagerWindow.document.getElementById("categories").selectedItem.value, "addons://updates/available", "Available Updates category should now be selected"); |
|
82 is(gManagerWindow.gViewController.currentViewId, "addons://updates/available", "Available Updates view should be the current view"); |
|
83 run_next_test(); |
|
84 }, true); |
|
85 EventUtils.synthesizeMouseAtCenter(gAvailableCategory, { }, gManagerWindow); |
|
86 }); |
|
87 |
|
88 |
|
89 add_test(function() { |
|
90 var list = gManagerWindow.document.getElementById("updates-list"); |
|
91 is(list.itemCount, 1, "Should be 1 available update listed"); |
|
92 var item = list.firstChild; |
|
93 is(item.mAddon.id, "addon2@tests.mozilla.org", "Update item should be for the manually updating addon"); |
|
94 |
|
95 // for manual update items, update-related properties are updated asynchronously, |
|
96 // so we poll for one of the expected changes to know when its done |
|
97 function waitForAsyncInit() { |
|
98 if (item._version.value == "1.1") { |
|
99 run_next_test(); |
|
100 return; |
|
101 } |
|
102 info("Update item not initialized yet, checking again in 100ms"); |
|
103 setTimeout(waitForAsyncInit, 100); |
|
104 } |
|
105 waitForAsyncInit(); |
|
106 }); |
|
107 |
|
108 add_test(function() { |
|
109 var list = gManagerWindow.document.getElementById("updates-list"); |
|
110 var item = list.firstChild; |
|
111 is(item._version.value, "1.1", "Update item should have version number of the update"); |
|
112 var postfix = gManagerWindow.document.getAnonymousElementByAttribute(item, "class", "update-postfix"); |
|
113 is_element_visible(postfix, "'Update' postfix should be visible"); |
|
114 is_element_visible(item._updateAvailable, ""); |
|
115 is_element_visible(item._relNotesToggle, "Release notes toggle should be visible"); |
|
116 is_element_hidden(item._warning, "Incompatible warning should be hidden"); |
|
117 is_element_hidden(item._error, "Blocklist error should be hidden"); |
|
118 |
|
119 info("Opening release notes"); |
|
120 item.addEventListener("RelNotesToggle", function() { |
|
121 item.removeEventListener("RelNotesToggle", arguments.callee, false); |
|
122 info("Release notes now open"); |
|
123 |
|
124 is_element_hidden(item._relNotesLoading, "Release notes loading message should be hidden"); |
|
125 is_element_visible(item._relNotesError, "Release notes error message should be visible"); |
|
126 is(item._relNotes.childElementCount, 0, "Release notes should be empty"); |
|
127 |
|
128 info("Closing release notes"); |
|
129 item.addEventListener("RelNotesToggle", function() { |
|
130 item.removeEventListener("RelNotesToggle", arguments.callee, false); |
|
131 info("Release notes now closed"); |
|
132 info("Setting Release notes URI to something that should load"); |
|
133 gProvider.installs[0].releaseNotesURI = Services.io.newURI(TESTROOT + "releaseNotes.xhtml", null, null) |
|
134 |
|
135 info("Re-opening release notes"); |
|
136 item.addEventListener("RelNotesToggle", function() { |
|
137 item.removeEventListener("RelNotesToggle", arguments.callee, false); |
|
138 info("Release notes now open"); |
|
139 |
|
140 is_element_hidden(item._relNotesLoading, "Release notes loading message should be hidden"); |
|
141 is_element_hidden(item._relNotesError, "Release notes error message should be hidden"); |
|
142 isnot(item._relNotes.childElementCount, 0, "Release notes should have been inserted into container"); |
|
143 run_next_test(); |
|
144 |
|
145 }, false); |
|
146 EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow); |
|
147 is_element_visible(item._relNotesLoading, "Release notes loading message should be visible"); |
|
148 |
|
149 }, false); |
|
150 EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow); |
|
151 |
|
152 }, false); |
|
153 EventUtils.synthesizeMouseAtCenter(item._relNotesToggle, { }, gManagerWindow); |
|
154 is_element_visible(item._relNotesLoading, "Release notes loading message should be visible"); |
|
155 }); |
|
156 |
|
157 |
|
158 add_test(function() { |
|
159 var badgeUpdated = false; |
|
160 var installCompleted = false; |
|
161 |
|
162 gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() { |
|
163 gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false); |
|
164 if (installCompleted) |
|
165 run_next_test(); |
|
166 else |
|
167 badgeUpdated = true; |
|
168 }, false); |
|
169 |
|
170 var list = gManagerWindow.document.getElementById("updates-list"); |
|
171 var item = list.firstChild; |
|
172 var updateBtn = item._updateBtn; |
|
173 is_element_visible(updateBtn, "Update button should be visible"); |
|
174 |
|
175 var install = gProvider.installs[0]; |
|
176 var listener = { |
|
177 onInstallStarted: function() { |
|
178 info("Install started"); |
|
179 is_element_visible(item._installStatus, "Install progress widget should be visible"); |
|
180 }, |
|
181 onInstallEnded: function() { |
|
182 install.removeTestListener(this); |
|
183 info("Install ended"); |
|
184 is_element_hidden(item._installStatus, "Install progress widget should be hidden"); |
|
185 |
|
186 if (badgeUpdated) |
|
187 run_next_test(); |
|
188 else |
|
189 installCompleted = true; |
|
190 } |
|
191 }; |
|
192 install.addTestListener(listener); |
|
193 EventUtils.synthesizeMouseAtCenter(updateBtn, { }, gManagerWindow); |
|
194 }); |
|
195 |
|
196 |
|
197 add_test(function() { |
|
198 is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should still be visible"); |
|
199 is(gAvailableCategory.badgeCount, 0, "Badge for Available Updates should now be 0"); |
|
200 |
|
201 gCategoryUtilities.openType("extension", function() { |
|
202 is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should be hidden"); |
|
203 |
|
204 close_manager(gManagerWindow, function() { |
|
205 open_manager(null, function(aWindow) { |
|
206 gManagerWindow = aWindow; |
|
207 gCategoryUtilities = new CategoryUtilities(gManagerWindow); |
|
208 gAvailableCategory = gManagerWindow.gCategories.get("addons://updates/available"); |
|
209 |
|
210 is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should be hidden"); |
|
211 |
|
212 run_next_test(); |
|
213 }); |
|
214 }); |
|
215 }); |
|
216 }); |
|
217 |
|
218 add_test(function() { |
|
219 gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() { |
|
220 gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false); |
|
221 is(gCategoryUtilities.isVisible(gAvailableCategory), true, "Available Updates category should now be visible"); |
|
222 is(gAvailableCategory.badgeCount, 1, "Badge for Available Updates should now be 1"); |
|
223 |
|
224 gAvailableCategory.addEventListener("CategoryBadgeUpdated", function() { |
|
225 gAvailableCategory.removeEventListener("CategoryBadgeUpdated", arguments.callee, false); |
|
226 is(gCategoryUtilities.isVisible(gAvailableCategory), false, "Available Updates category should now be hidden"); |
|
227 |
|
228 run_next_test(); |
|
229 }, false); |
|
230 |
|
231 AddonManager.getAddonByID("addon2@tests.mozilla.org", function(aAddon) { |
|
232 aAddon.applyBackgroundUpdates = AddonManager.AUTOUPDATE_ENABLE; |
|
233 }); |
|
234 }, false); |
|
235 |
|
236 gProvider.createInstalls([{ |
|
237 name: "manually updating addon (new and even more improved!)", |
|
238 existingAddon: gProvider.addons[1], |
|
239 version: "1.2", |
|
240 releaseNotesURI: Services.io.newURI(TESTROOT + "thereIsNoFileHere.xhtml", null, null) |
|
241 }]); |
|
242 }); |