diff options
-rw-r--r-- | bitbake/lib/toaster/toastergui/fixtures/toastergui-unittest-data.xml | 446 | ||||
-rw-r--r-- | bitbake/lib/toaster/toastergui/tests.py | 255 |
2 files changed, 488 insertions, 213 deletions
diff --git a/bitbake/lib/toaster/toastergui/fixtures/toastergui-unittest-data.xml b/bitbake/lib/toaster/toastergui/fixtures/toastergui-unittest-data.xml new file mode 100644 index 0000000000..2d83ff895d --- /dev/null +++ b/bitbake/lib/toaster/toastergui/fixtures/toastergui-unittest-data.xml | |||
@@ -0,0 +1,446 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <django-objects version="1.0"> | ||
3 | <object pk="1" model="orm.project"> | ||
4 | <field type="CharField" name="name">a test project</field> | ||
5 | <field type="CharField" name="short_description"></field> | ||
6 | <field to="orm.bitbakeversion" name="bitbake_version" rel="ManyToOneRel">1</field> | ||
7 | <field to="orm.release" name="release" rel="ManyToOneRel">1</field> | ||
8 | <field type="DateTimeField" name="created">2016-02-15T18:46:20.098248+00:00</field> | ||
9 | <field type="DateTimeField" name="updated">2016-02-15T18:46:20.098392+00:00</field> | ||
10 | <field type="IntegerField" name="user_id"><None></None></field> | ||
11 | <field type="BooleanField" name="is_default">False</field> | ||
12 | </object> | ||
13 | <object pk="2" model="orm.project"> | ||
14 | <field type="CharField" name="name">z test project</field> | ||
15 | <field type="CharField" name="short_description"></field> | ||
16 | <field to="orm.bitbakeversion" name="bitbake_version" rel="ManyToOneRel">1</field> | ||
17 | <field to="orm.release" name="release" rel="ManyToOneRel">2</field> | ||
18 | <field type="DateTimeField" name="created">2016-02-15T18:46:20.107936+00:00</field> | ||
19 | <field type="DateTimeField" name="updated">2016-02-15T18:46:20.108066+00:00</field> | ||
20 | <field type="IntegerField" name="user_id"><None></None></field> | ||
21 | <field type="BooleanField" name="is_default">False</field> | ||
22 | </object> | ||
23 | <object pk="1" model="orm.ProjectVariable"> | ||
24 | <field to="orm.project" name="project" rel="ManyToOneRel">1</field> | ||
25 | <field type="CharField" name="name">machine</field> | ||
26 | <field type="TextField" name="value">qemux86</field> | ||
27 | </object> | ||
28 | <object pk="2" model="orm.ProjectVariable"> | ||
29 | <field to="orm.project" name="project" rel="ManyToOneRel">2</field> | ||
30 | <field type="CharField" name="name">machine</field> | ||
31 | <field type="TextField" name="value">qemux86</field> | ||
32 | </object> | ||
33 | <object pk="1" model="orm.build"> | ||
34 | <field to="orm.project" name="project" rel="ManyToOneRel">1</field> | ||
35 | <field type="CharField" name="machine">x12</field> | ||
36 | <field type="CharField" name="distro"></field> | ||
37 | <field type="CharField" name="distro_version"></field> | ||
38 | <field type="DateTimeField" name="started_on">2016-02-14T18:46:20.114530+00:00</field> | ||
39 | <field type="DateTimeField" name="completed_on">2016-02-14T18:46:20.114530+00:00</field> | ||
40 | <field type="IntegerField" name="outcome">0</field> | ||
41 | <field type="CharField" name="cooker_log_path"></field> | ||
42 | <field type="CharField" name="build_name">a</field> | ||
43 | <field type="CharField" name="bitbake_version"></field> | ||
44 | </object> | ||
45 | <object pk="2" model="orm.build"> | ||
46 | <field to="orm.project" name="project" rel="ManyToOneRel">1</field> | ||
47 | <field type="CharField" name="machine">raspberrypi2</field> | ||
48 | <field type="CharField" name="distro"></field> | ||
49 | <field type="CharField" name="distro_version"></field> | ||
50 | <field type="DateTimeField" name="started_on">2016-02-13T18:46:20.114530+00:00</field> | ||
51 | <field type="DateTimeField" name="completed_on">2016-02-13T18:46:20.114530+00:00</field> | ||
52 | <field type="IntegerField" name="outcome">0</field> | ||
53 | <field type="CharField" name="cooker_log_path"></field> | ||
54 | <field type="CharField" name="build_name">b</field> | ||
55 | <field type="CharField" name="bitbake_version"></field> | ||
56 | </object> | ||
57 | <object pk="3" model="orm.build"> | ||
58 | <field to="orm.project" name="project" rel="ManyToOneRel">1</field> | ||
59 | <field type="CharField" name="machine">qemux86</field> | ||
60 | <field type="CharField" name="distro"></field> | ||
61 | <field type="CharField" name="distro_version"></field> | ||
62 | <field type="DateTimeField" name="started_on">2016-02-12T18:46:20.114530+00:00</field> | ||
63 | <field type="DateTimeField" name="completed_on">2016-02-12T18:46:20.114530+00:00</field> | ||
64 | <field type="IntegerField" name="outcome">1</field> | ||
65 | <field type="CharField" name="cooker_log_path"></field> | ||
66 | <field type="CharField" name="build_name">c</field> | ||
67 | <field type="CharField" name="bitbake_version"></field> | ||
68 | </object> | ||
69 | <object pk="4" model="orm.build"> | ||
70 | <field to="orm.project" name="project" rel="ManyToOneRel">2</field> | ||
71 | <field type="CharField" name="machine">qemux86</field> | ||
72 | <field type="CharField" name="distro"></field> | ||
73 | <field type="CharField" name="distro_version"></field> | ||
74 | <field type="DateTimeField" name="started_on">2016-02-11T18:46:20.114530+00:00</field> | ||
75 | <field type="DateTimeField" name="completed_on">2016-02-11T18:46:20.114530+00:00</field> | ||
76 | <field type="IntegerField" name="outcome">0</field> | ||
77 | <field type="CharField" name="cooker_log_path"></field> | ||
78 | <field type="CharField" name="build_name">d</field> | ||
79 | <field type="CharField" name="bitbake_version"></field> | ||
80 | </object> | ||
81 | <object pk="1" model="orm.target"> | ||
82 | <field to="orm.build" name="build" rel="ManyToOneRel">1</field> | ||
83 | <field type="CharField" name="target">a image recipe</field> | ||
84 | <field type="CharField" name="task"><None></None></field> | ||
85 | <field type="BooleanField" name="is_image">False</field> | ||
86 | <field type="IntegerField" name="image_size">0</field> | ||
87 | <field type="CharField" name="license_manifest_path"><None></None></field> | ||
88 | </object> | ||
89 | <object pk="2" model="orm.target"> | ||
90 | <field to="orm.build" name="build" rel="ManyToOneRel">2</field> | ||
91 | <field type="CharField" name="target">z something</field> | ||
92 | <field type="CharField" name="task"><None></None></field> | ||
93 | <field type="BooleanField" name="is_image">False</field> | ||
94 | <field type="IntegerField" name="image_size">0</field> | ||
95 | <field type="CharField" name="license_manifest_path"><None></None></field> | ||
96 | </object> | ||
97 | <object pk="3" model="orm.target"> | ||
98 | <field to="orm.build" name="build" rel="ManyToOneRel">3</field> | ||
99 | <field type="CharField" name="target">h recipe</field> | ||
100 | <field type="CharField" name="task"><None></None></field> | ||
101 | <field type="BooleanField" name="is_image">False</field> | ||
102 | <field type="IntegerField" name="image_size">0</field> | ||
103 | <field type="CharField" name="license_manifest_path"><None></None></field> | ||
104 | </object> | ||
105 | <object pk="1" model="orm.package"> | ||
106 | <field to="orm.build" name="build" rel="ManyToOneRel">1</field> | ||
107 | <field to="orm.recipe" name="recipe" rel="ManyToOneRel">2</field> | ||
108 | <field type="CharField" name="name">b pkg</field> | ||
109 | <field type="CharField" name="installed_name"></field> | ||
110 | <field type="CharField" name="version"></field> | ||
111 | <field type="CharField" name="revision"></field> | ||
112 | <field type="TextField" name="summary"></field> | ||
113 | <field type="TextField" name="description"></field> | ||
114 | <field type="IntegerField" name="size">777</field> | ||
115 | <field type="IntegerField" name="installed_size">0</field> | ||
116 | <field type="CharField" name="section"></field> | ||
117 | <field type="CharField" name="license">a license</field> | ||
118 | </object> | ||
119 | <object pk="2" model="orm.package"> | ||
120 | <field to="orm.build" name="build" rel="ManyToOneRel">1</field> | ||
121 | <field to="orm.recipe" name="recipe" rel="ManyToOneRel">2</field> | ||
122 | <field type="CharField" name="name">f pkg</field> | ||
123 | <field type="CharField" name="installed_name"></field> | ||
124 | <field type="CharField" name="version"></field> | ||
125 | <field type="CharField" name="revision"></field> | ||
126 | <field type="TextField" name="summary"></field> | ||
127 | <field type="TextField" name="description"></field> | ||
128 | <field type="IntegerField" name="size">4</field> | ||
129 | <field type="IntegerField" name="installed_size">10</field> | ||
130 | <field type="CharField" name="section"></field> | ||
131 | <field type="CharField" name="license">z license</field> | ||
132 | </object> | ||
133 | <object pk="3" model="orm.package"> | ||
134 | <field to="orm.build" name="build" rel="ManyToOneRel"><None></None></field> | ||
135 | <field to="orm.recipe" name="recipe" rel="ManyToOneRel">1</field> | ||
136 | <field type="CharField" name="name">a custom image pkg</field> | ||
137 | <field type="CharField" name="installed_name"></field> | ||
138 | <field type="CharField" name="version"></field> | ||
139 | <field type="CharField" name="revision"></field> | ||
140 | <field type="TextField" name="summary"></field> | ||
141 | <field type="TextField" name="description"></field> | ||
142 | <field type="IntegerField" name="size">10</field> | ||
143 | <field type="IntegerField" name="installed_size">0</field> | ||
144 | <field type="CharField" name="section"></field> | ||
145 | <field type="CharField" name="license">h license</field> | ||
146 | </object> | ||
147 | <object pk="4" model="orm.package"> | ||
148 | <field to="orm.build" name="build" rel="ManyToOneRel"><None></None></field> | ||
149 | <field to="orm.recipe" name="recipe" rel="ManyToOneRel">2</field> | ||
150 | <field type="CharField" name="name">z custom image pkg</field> | ||
151 | <field type="CharField" name="installed_name"></field> | ||
152 | <field type="CharField" name="version"></field> | ||
153 | <field type="CharField" name="revision"></field> | ||
154 | <field type="TextField" name="summary"></field> | ||
155 | <field type="TextField" name="description"></field> | ||
156 | <field type="IntegerField" name="size">5</field> | ||
157 | <field type="IntegerField" name="installed_size">0</field> | ||
158 | <field type="CharField" name="section"></field> | ||
159 | <field type="CharField" name="license">z license</field> | ||
160 | </object> | ||
161 | <object pk="5" model="orm.package"> | ||
162 | <field to="orm.build" name="build" rel="ManyToOneRel">1</field> | ||
163 | <field to="orm.recipe" name="recipe" rel="ManyToOneRel">4</field> | ||
164 | <field type="CharField" name="name">a custom image pkg</field> | ||
165 | <field type="CharField" name="installed_name"></field> | ||
166 | <field type="CharField" name="version"></field> | ||
167 | <field type="CharField" name="revision"></field> | ||
168 | <field type="TextField" name="summary"></field> | ||
169 | <field type="TextField" name="description"></field> | ||
170 | <field type="IntegerField" name="size">2</field> | ||
171 | <field type="IntegerField" name="installed_size">0</field> | ||
172 | <field type="CharField" name="section"></field> | ||
173 | <field type="CharField" name="license">h licence</field> | ||
174 | </object> | ||
175 | <object pk="1" model="orm.target_installed_package"> | ||
176 | <field to="orm.target" name="target" rel="ManyToOneRel">1</field> | ||
177 | <field to="orm.package" name="package" rel="ManyToOneRel">1</field> | ||
178 | </object> | ||
179 | <object pk="2" model="orm.target_installed_package"> | ||
180 | <field to="orm.target" name="target" rel="ManyToOneRel">1</field> | ||
181 | <field to="orm.package" name="package" rel="ManyToOneRel">2</field> | ||
182 | </object> | ||
183 | <object pk="3" model="orm.target_installed_package"> | ||
184 | <field to="orm.target" name="target" rel="ManyToOneRel">1</field> | ||
185 | <field to="orm.package" name="package" rel="ManyToOneRel">3</field> | ||
186 | </object> | ||
187 | <!-- Note that these augment the existing orm.package of the same pk --> | ||
188 | <object pk="4" model="orm.customimagepackage"> | ||
189 | <field to="orm.customimagerecipe" name="recipe_includes" rel="ManyToManyRel"></field> | ||
190 | <field to="orm.customimagerecipe" name="recipe_excludes" rel="ManyToManyRel"></field> | ||
191 | <field to="orm.customimagerecipe" name="recipe_appends" rel="ManyToManyRel"><object pk="3"></object></field> | ||
192 | </object> | ||
193 | <object pk="5" model="orm.customimagepackage"> | ||
194 | <field to="orm.customimagerecipe" name="recipe_includes" rel="ManyToManyRel"></field> | ||
195 | <field to="orm.customimagerecipe" name="recipe_excludes" rel="ManyToManyRel"></field> | ||
196 | <field to="orm.customimagerecipe" name="recipe_appends" rel="ManyToManyRel"><object pk="3"></object></field> | ||
197 | </object> | ||
198 | <object pk="1" model="orm.recipe"> | ||
199 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel">1</field> | ||
200 | <field type="IntegerField" name="up_id"><None></None></field> | ||
201 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
202 | <field type="CharField" name="name">z recipe</field> | ||
203 | <field type="CharField" name="version">5.2</field> | ||
204 | <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">2</field> | ||
205 | <field type="TextField" name="summary">z recipe</field> | ||
206 | <field type="TextField" name="description">z recipe</field> | ||
207 | <field type="CharField" name="section">z section</field> | ||
208 | <field type="CharField" name="license">z license</field> | ||
209 | <field type="CharField" name="homepage"></field> | ||
210 | <field type="CharField" name="bugtracker"></field> | ||
211 | <field type="FilePathField" name="file_path"></field> | ||
212 | <field type="CharField" name="pathflags"></field> | ||
213 | <field type="BooleanField" name="is_image">False</field> | ||
214 | </object> | ||
215 | <object pk="2" model="orm.recipe"> | ||
216 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel">1</field> | ||
217 | <field type="IntegerField" name="up_id"><None></None></field> | ||
218 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
219 | <field type="CharField" name="name">a recipe</field> | ||
220 | <field type="CharField" name="version">1.2</field> | ||
221 | <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">1</field> | ||
222 | <field type="TextField" name="summary">a recipe</field> | ||
223 | <field type="TextField" name="description">a recipe</field> | ||
224 | <field type="CharField" name="section">a section</field> | ||
225 | <field type="CharField" name="license">a license</field> | ||
226 | <field type="CharField" name="homepage"></field> | ||
227 | <field type="CharField" name="bugtracker"></field> | ||
228 | <field type="FilePathField" name="file_path">a_recipe.bb</field> | ||
229 | <field type="CharField" name="pathflags"></field> | ||
230 | <field type="BooleanField" name="is_image">False</field> | ||
231 | </object> | ||
232 | <object pk="3" model="orm.recipe"> | ||
233 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel"><None></None></field> | ||
234 | <field type="IntegerField" name="up_id"><None></None></field> | ||
235 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
236 | <field type="CharField" name="name">a custom recipe</field> | ||
237 | <field type="CharField" name="version"></field> | ||
238 | <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">2</field> | ||
239 | <field type="TextField" name="summary"></field> | ||
240 | <field type="TextField" name="description"></field> | ||
241 | <field type="CharField" name="section"></field> | ||
242 | <field type="CharField" name="license"></field> | ||
243 | <field type="CharField" name="homepage"></field> | ||
244 | <field type="CharField" name="bugtracker"></field> | ||
245 | <field type="FilePathField" name="file_path">custr</field> | ||
246 | <field type="CharField" name="pathflags"></field> | ||
247 | <field type="BooleanField" name="is_image">False</field> | ||
248 | </object> | ||
249 | <object pk="4" model="orm.recipe"> | ||
250 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel">1</field> | ||
251 | <field type="IntegerField" name="up_id"><None></None></field> | ||
252 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
253 | <field type="CharField" name="name">a image recipe</field> | ||
254 | <field type="CharField" name="version">1.2</field> | ||
255 | <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">1</field> | ||
256 | <field type="TextField" name="summary">one recipe</field> | ||
257 | <field type="TextField" name="description">recipe</field> | ||
258 | <field type="CharField" name="section">A</field> | ||
259 | <field type="CharField" name="license">A</field> | ||
260 | <field type="CharField" name="homepage"></field> | ||
261 | <field type="CharField" name="bugtracker"></field> | ||
262 | <field type="FilePathField" name="file_path">/one/</field> | ||
263 | <field type="CharField" name="pathflags"></field> | ||
264 | <field type="BooleanField" name="is_image">True</field> | ||
265 | </object> | ||
266 | <object pk="5" model="orm.recipe"> | ||
267 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel">1</field> | ||
268 | <field type="IntegerField" name="up_id"><None></None></field> | ||
269 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
270 | <field type="CharField" name="name">z image recipe</field> | ||
271 | <field type="CharField" name="version">1.3</field> | ||
272 | <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">2</field> | ||
273 | <field type="TextField" name="summary">two image recipe</field> | ||
274 | <field type="TextField" name="description">recipe two</field> | ||
275 | <field type="CharField" name="section">B</field> | ||
276 | <field type="CharField" name="license">Z</field> | ||
277 | <field type="CharField" name="homepage"></field> | ||
278 | <field type="CharField" name="bugtracker"></field> | ||
279 | <field type="FilePathField" name="file_path">/two/</field> | ||
280 | <field type="CharField" name="pathflags"></field> | ||
281 | <field type="BooleanField" name="is_image">True</field> | ||
282 | </object> | ||
283 | <object pk="6" model="orm.recipe"> | ||
284 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel"><None></None></field> | ||
285 | <field type="IntegerField" name="up_id"><None></None></field> | ||
286 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
287 | <field type="CharField" name="name">z custom recipe</field> | ||
288 | <field type="CharField" name="version"></field> | ||
289 | <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">2</field> | ||
290 | <field type="TextField" name="summary"></field> | ||
291 | <field type="TextField" name="description"></field> | ||
292 | <field type="CharField" name="section"></field> | ||
293 | <field type="CharField" name="license"></field> | ||
294 | <field type="CharField" name="homepage"></field> | ||
295 | <field type="CharField" name="bugtracker"></field> | ||
296 | <field type="FilePathField" name="file_path">zzzz</field> | ||
297 | <field type="CharField" name="pathflags"></field> | ||
298 | <field type="BooleanField" name="is_image">False</field> | ||
299 | </object> | ||
300 | <object pk="1" model="orm.machine"> | ||
301 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel"><None></None></field> | ||
302 | <field type="IntegerField" name="up_id"><None></None></field> | ||
303 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
304 | <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">1</field> | ||
305 | <field type="CharField" name="name">a machine</field> | ||
306 | <field type="CharField" name="description">a machine</field> | ||
307 | </object> | ||
308 | <object pk="2" model="orm.machine"> | ||
309 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel"><None></None></field> | ||
310 | <field type="IntegerField" name="up_id"><None></None></field> | ||
311 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
312 | <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">2</field> | ||
313 | <field type="CharField" name="name">z machine</field> | ||
314 | <field type="CharField" name="description">z machine</field> | ||
315 | </object> | ||
316 | <object pk="3" model="orm.machine"> | ||
317 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel"><None></None></field> | ||
318 | <field type="IntegerField" name="up_id"><None></None></field> | ||
319 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
320 | <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">1</field> | ||
321 | <field type="CharField" name="name">g machine</field> | ||
322 | <field type="CharField" name="description">g machine</field> | ||
323 | </object> | ||
324 | <object pk="1" model="orm.layersource"> | ||
325 | <field type="CharField" name="name">local</field> | ||
326 | <field type="IntegerField" name="sourcetype">1</field> | ||
327 | <field type="CharField" name="apiurl"></field> | ||
328 | </object> | ||
329 | <object pk="1" model="orm.bitbakeversion"> | ||
330 | <field type="CharField" name="name">test bbv</field> | ||
331 | <field type="CharField" name="giturl">/tmp/</field> | ||
332 | <field type="CharField" name="branch">master</field> | ||
333 | <field type="CharField" name="dirpath"></field> | ||
334 | </object> | ||
335 | <object pk="1" model="orm.release"> | ||
336 | <field type="CharField" name="name">test release</field> | ||
337 | <field type="CharField" name="description"></field> | ||
338 | <field to="orm.bitbakeversion" name="bitbake_version" rel="ManyToOneRel">1</field> | ||
339 | <field type="CharField" name="branch_name">master</field> | ||
340 | <field type="TextField" name="helptext"><None></None></field> | ||
341 | </object> | ||
342 | <object pk="2" model="orm.release"> | ||
343 | <field type="CharField" name="name">test release 2</field> | ||
344 | <field type="CharField" name="description"></field> | ||
345 | <field to="orm.bitbakeversion" name="bitbake_version" rel="ManyToOneRel">1</field> | ||
346 | <field type="CharField" name="branch_name">master</field> | ||
347 | <field type="TextField" name="helptext"><None></None></field> | ||
348 | </object> | ||
349 | <object pk="1" model="orm.releaselayersourcepriority"> | ||
350 | <field to="orm.release" name="release" rel="ManyToOneRel">1</field> | ||
351 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel">1</field> | ||
352 | <field type="IntegerField" name="priority">0</field> | ||
353 | </object> | ||
354 | <object pk="1" model="orm.branch"> | ||
355 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel">1</field> | ||
356 | <field type="IntegerField" name="up_id"><None></None></field> | ||
357 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
358 | <field type="CharField" name="name">master</field> | ||
359 | <field type="CharField" name="short_description"></field> | ||
360 | </object> | ||
361 | <object pk="1" model="orm.layer"> | ||
362 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel"><None></None></field> | ||
363 | <field type="IntegerField" name="up_id"><None></None></field> | ||
364 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
365 | <field type="CharField" name="name">a layer</field> | ||
366 | <field type="CharField" name="layer_index_url"></field> | ||
367 | <field type="CharField" name="vcs_url">/tmp/</field> | ||
368 | <field type="CharField" name="vcs_web_url"><None></None></field> | ||
369 | <field type="CharField" name="vcs_web_tree_base_url"><None></None></field> | ||
370 | <field type="CharField" name="vcs_web_file_base_url"><None></None></field> | ||
371 | <field type="TextField" name="summary"><None></None></field> | ||
372 | <field type="TextField" name="description"><None></None></field> | ||
373 | </object> | ||
374 | <object pk="2" model="orm.layer"> | ||
375 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel">1</field> | ||
376 | <field type="IntegerField" name="up_id"><None></None></field> | ||
377 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
378 | <field type="CharField" name="name">z layer</field> | ||
379 | <field type="CharField" name="layer_index_url"></field> | ||
380 | <field type="CharField" name="vcs_url">git://two/</field> | ||
381 | <field type="CharField" name="vcs_web_url"><None></None></field> | ||
382 | <field type="CharField" name="vcs_web_tree_base_url"><None></None></field> | ||
383 | <field type="CharField" name="vcs_web_file_base_url"><None></None></field> | ||
384 | <field type="TextField" name="summary"><None></None></field> | ||
385 | <field type="TextField" name="description"><None></None></field> | ||
386 | </object> | ||
387 | <object pk="1" model="orm.layer_version"> | ||
388 | <field to="orm.build" name="build" rel="ManyToOneRel"><None></None></field> | ||
389 | <field to="orm.layer" name="layer" rel="ManyToOneRel">1</field> | ||
390 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel">1</field> | ||
391 | <field type="IntegerField" name="up_id"><None></None></field> | ||
392 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
393 | <field to="orm.branch" name="up_branch" rel="ManyToOneRel">1</field> | ||
394 | <field type="CharField" name="branch"></field> | ||
395 | <field type="CharField" name="commit">master</field> | ||
396 | <field type="CharField" name="dirpath">/tmp/</field> | ||
397 | <field type="IntegerField" name="priority">0</field> | ||
398 | <field type="FilePathField" name="local_path">/</field> | ||
399 | <field to="orm.project" name="project" rel="ManyToOneRel">1</field> | ||
400 | </object> | ||
401 | <object pk="2" model="orm.layer_version"> | ||
402 | <field to="orm.build" name="build" rel="ManyToOneRel"><None></None></field> | ||
403 | <field to="orm.layer" name="layer" rel="ManyToOneRel">2</field> | ||
404 | <field to="orm.layersource" name="layer_source" rel="ManyToOneRel">1</field> | ||
405 | <field type="IntegerField" name="up_id"><None></None></field> | ||
406 | <field type="DateTimeField" name="up_date"><None></None></field> | ||
407 | <field to="orm.branch" name="up_branch" rel="ManyToOneRel">1</field> | ||
408 | <field type="CharField" name="branch"></field> | ||
409 | <field type="CharField" name="commit">master</field> | ||
410 | <field type="CharField" name="dirpath"><None></None></field> | ||
411 | <field type="IntegerField" name="priority">0</field> | ||
412 | <field type="FilePathField" name="local_path">/</field> | ||
413 | <field to="orm.project" name="project" rel="ManyToOneRel"><None></None></field> | ||
414 | </object> | ||
415 | <object pk="1" model="orm.projectlayer"> | ||
416 | <field to="orm.project" name="project" rel="ManyToOneRel">1</field> | ||
417 | <field to="orm.layer_version" name="layercommit" rel="ManyToOneRel">1</field> | ||
418 | <field type="BooleanField" name="optional">True</field> | ||
419 | </object> | ||
420 | <object pk="3" model="orm.customimagerecipe"> | ||
421 | <field to="orm.recipe" name="base_recipe" rel="ManyToOneRel">2</field> | ||
422 | <field to="orm.project" name="project" rel="ManyToOneRel">1</field> | ||
423 | <field type="DateTimeField" name="last_updated"><None></None></field> | ||
424 | </object> | ||
425 | <object pk="6" model="orm.customimagerecipe"> | ||
426 | <field to="orm.recipe" name="base_recipe" rel="ManyToOneRel">4</field> | ||
427 | <field to="orm.project" name="project" rel="ManyToOneRel">1</field> | ||
428 | <field type="DateTimeField" name="last_updated"><None></None></field> | ||
429 | </object> | ||
430 | <object pk="1" model="orm.logmessage"> | ||
431 | <field to="orm.build" name="build" rel="ManyToOneRel">2</field> | ||
432 | <field to="orm.task" name="task" rel="ManyToOneRel"><None></None></field> | ||
433 | <field type="IntegerField" name="level">1</field> | ||
434 | <field type="TextField" name="message"><None></None></field> | ||
435 | <field type="FilePathField" name="pathname"></field> | ||
436 | <field type="IntegerField" name="lineno"><None></None></field> | ||
437 | </object> | ||
438 | <object pk="2" model="orm.logmessage"> | ||
439 | <field to="orm.build" name="build" rel="ManyToOneRel">2</field> | ||
440 | <field to="orm.task" name="task" rel="ManyToOneRel"><None></None></field> | ||
441 | <field type="IntegerField" name="level">2</field> | ||
442 | <field type="TextField" name="message"><None></None></field> | ||
443 | <field type="FilePathField" name="pathname"></field> | ||
444 | <field type="IntegerField" name="lineno"><None></None></field> | ||
445 | </object> | ||
446 | </django-objects> | ||
diff --git a/bitbake/lib/toaster/toastergui/tests.py b/bitbake/lib/toaster/toastergui/tests.py index 56a7d7e860..1b6e78d517 100644 --- a/bitbake/lib/toaster/toastergui/tests.py +++ b/bitbake/lib/toaster/toastergui/tests.py | |||
@@ -51,205 +51,17 @@ CLI_BUILDS_PROJECT_NAME = 'Command line builds' | |||
51 | class ViewTests(TestCase): | 51 | class ViewTests(TestCase): |
52 | """Tests to verify view APIs.""" | 52 | """Tests to verify view APIs.""" |
53 | 53 | ||
54 | def setUp(self): | 54 | fixtures = ['toastergui-unittest-data'] |
55 | bbv = BitbakeVersion.objects.create(name="test bbv", giturl="/tmp/", | ||
56 | branch="master", dirpath="") | ||
57 | release = Release.objects.create(name="test release", | ||
58 | branch_name="master", | ||
59 | bitbake_version=bbv) | ||
60 | release2 = Release.objects.create(name="test release 2", | ||
61 | branch_name="master", | ||
62 | bitbake_version=bbv) | ||
63 | |||
64 | self.project = Project.objects.create_project(name=PROJECT_NAME, | ||
65 | release=release) | ||
66 | |||
67 | self.project2 = Project.objects.create_project(name=PROJECT_NAME2, | ||
68 | release=release2) | ||
69 | |||
70 | now = timezone.now() | ||
71 | later = now + timedelta(days=1) | ||
72 | |||
73 | build = Build.objects.create(project=self.project, | ||
74 | started_on=now, | ||
75 | completed_on=now, | ||
76 | outcome=Build.SUCCEEDED) | ||
77 | |||
78 | # for testing BuildsTable | ||
79 | build1 = Build.objects.create(project=self.project, | ||
80 | started_on=now, | ||
81 | completed_on=now, | ||
82 | outcome=Build.SUCCEEDED, | ||
83 | machine="raspberrypi2") | ||
84 | |||
85 | Build.objects.create(project=self.project, | ||
86 | started_on=later, | ||
87 | completed_on=later, | ||
88 | outcome=Build.FAILED, | ||
89 | machine="qemux86") | ||
90 | |||
91 | Build.objects.create(project=self.project2, | ||
92 | started_on=later, | ||
93 | completed_on=later, | ||
94 | outcome=Build.SUCCEEDED, | ||
95 | machine="qemux86") | ||
96 | |||
97 | # to test sorting by errors and warnings in BuildsTable | ||
98 | LogMessage.objects.create(build=build1, level=LogMessage.WARNING) | ||
99 | LogMessage.objects.create(build=build1, level=LogMessage.ERROR) | ||
100 | |||
101 | layersrc = LayerSource.objects.create(sourcetype=LayerSource.TYPE_IMPORTED) | ||
102 | self.priority = ReleaseLayerSourcePriority.objects.create(release=release, | ||
103 | layer_source=layersrc) | ||
104 | layer = Layer.objects.create(name="base-layer", layer_source=layersrc, | ||
105 | vcs_url="/tmp/") | ||
106 | |||
107 | layer_two = Layer.objects.create(name="z-layer", | ||
108 | layer_source=layersrc, | ||
109 | vcs_url="git://two/") | ||
110 | |||
111 | |||
112 | branch = Branch.objects.create(name="master", layer_source=layersrc) | ||
113 | |||
114 | self.lver = Layer_Version.objects.create(layer=layer, | ||
115 | project=self.project, | ||
116 | layer_source=layersrc, | ||
117 | commit="master", | ||
118 | dirpath="/tmp/", | ||
119 | up_branch=branch) | ||
120 | |||
121 | lver_two = Layer_Version.objects.create(layer=layer_two, | ||
122 | layer_source=layersrc, | ||
123 | commit="master", | ||
124 | up_branch=branch) | ||
125 | |||
126 | Recipe.objects.create(layer_source=layersrc, | ||
127 | name="z recipe", | ||
128 | version="5.2", | ||
129 | summary="z recipe", | ||
130 | description="G recipe", | ||
131 | license="Z GPL", | ||
132 | section="h section", | ||
133 | layer_version=lver_two) | ||
134 | |||
135 | # Create a dummy recipe file for the custom image generation to read | ||
136 | open("/tmp/my_recipe.bb", 'wa').close() | ||
137 | self.recipe1 = Recipe.objects.create(layer_source=layersrc, | ||
138 | name="base-recipe", | ||
139 | version="1.2", | ||
140 | summary="one recipe", | ||
141 | description="recipe", | ||
142 | section="A section", | ||
143 | license="Apache", | ||
144 | layer_version=self.lver, | ||
145 | file_path="my_recipe.bb") | ||
146 | |||
147 | Machine.objects.create(layer_version=self.lver, name="wisk", | ||
148 | description="wisking machine") | ||
149 | Machine.objects.create(layer_version=self.lver, name="zap", | ||
150 | description="zap machine") | ||
151 | Machine.objects.create(layer_version=lver_two, name="xray", | ||
152 | description="xray machine") | ||
153 | |||
154 | |||
155 | |||
156 | ProjectLayer.objects.create(project=self.project, layercommit=self.lver) | ||
157 | |||
158 | lver_custom = Layer_Version.objects.create(layer=layer, | ||
159 | project=self.project, | ||
160 | layer_source=layersrc, | ||
161 | commit="mymaster", | ||
162 | up_branch=branch) | ||
163 | |||
164 | self.customr = CustomImageRecipe.objects.create(\ | ||
165 | name="custom recipe", project=self.project, | ||
166 | base_recipe=self.recipe1, | ||
167 | file_path="custr", | ||
168 | layer_version=lver_custom) | ||
169 | |||
170 | self.package = Package.objects.create(name='pkg1', | ||
171 | size=999, | ||
172 | recipe=self.recipe1, | ||
173 | license="HHH", | ||
174 | build=build) | ||
175 | |||
176 | Package.objects.create(name='A pkg1', | ||
177 | size=777, | ||
178 | recipe=self.recipe1, | ||
179 | build=build) | ||
180 | |||
181 | Package.objects.create(name='zpkg1', | ||
182 | recipe=self.recipe1, | ||
183 | build=build, | ||
184 | size=4, | ||
185 | license="ZZ") | ||
186 | |||
187 | self.cust_package = CustomImagePackage.objects.create( | ||
188 | name="A pkg", | ||
189 | recipe=self.recipe1, | ||
190 | size=10, | ||
191 | license="AAA") | ||
192 | |||
193 | self.customr.appends_set.add(self.cust_package) | ||
194 | |||
195 | # recipe with project for testing AvailableRecipe table | ||
196 | self.recipe2 = Recipe.objects.create(layer_source=layersrc, | ||
197 | name="fancy-recipe", | ||
198 | version="1.4", | ||
199 | summary="a fancy recipe", | ||
200 | description="fancy recipe", | ||
201 | license="MIT", | ||
202 | layer_version=self.lver, | ||
203 | section="Z section", | ||
204 | file_path='/home/foo') | ||
205 | |||
206 | # additional package for the sorting for the SelectPackagesTable | ||
207 | cust_package_two = CustomImagePackage.objects.create(name="ZZ pkg", | ||
208 | size=5, | ||
209 | recipe=self.recipe2) | ||
210 | |||
211 | self.customr.appends_set.add(cust_package_two) | ||
212 | |||
213 | Package.objects.create(name='one1', | ||
214 | recipe=self.recipe2, | ||
215 | build=build, | ||
216 | size=2, | ||
217 | license="L") | ||
218 | |||
219 | Recipe.objects.create(layer_source=layersrc, | ||
220 | is_image=True, | ||
221 | name="Test image one", | ||
222 | version="1.2", | ||
223 | summary="one recipe", | ||
224 | description="recipe", | ||
225 | section="A", | ||
226 | license="A", | ||
227 | file_path="/one/", | ||
228 | layer_version=self.lver) | ||
229 | |||
230 | zrecipe = Recipe.objects.create(layer_source=layersrc, | ||
231 | is_image=True, | ||
232 | name="Z Test image two", | ||
233 | version="1.3", | ||
234 | summary="two image recipe", | ||
235 | description="recipe two", | ||
236 | section="B", | ||
237 | license="Z", | ||
238 | file_path="/two/", | ||
239 | layer_version=lver_two) | ||
240 | |||
241 | CustomImageRecipe.objects.create(name="z custom recipe", | ||
242 | project=self.project, | ||
243 | base_recipe=zrecipe, | ||
244 | file_path="zzzz", | ||
245 | layer_version=lver_custom) | ||
246 | |||
247 | # Packages in PackagesTable requre that the recipe has been built so | ||
248 | # we need to create a target and build pair | ||
249 | target = Target.objects.create(target=self.recipe1.name, | ||
250 | build=build) | ||
251 | 55 | ||
56 | def setUp(self): | ||
252 | 57 | ||
58 | self.project = Project.objects.first() | ||
59 | self.recipe1 = Recipe.objects.get(pk=2) | ||
60 | self.recipe2 = Recipe.objects.last() | ||
61 | self.customr = CustomImageRecipe.objects.first() | ||
62 | self.cust_package = CustomImagePackage.objects.first() | ||
63 | self.package = Package.objects.first() | ||
64 | self.lver = Layer_Version.objects.first() | ||
253 | 65 | ||
254 | def test_get_base_call_returns_html(self): | 66 | def test_get_base_call_returns_html(self): |
255 | """Basic test for all-projects view""" | 67 | """Basic test for all-projects view""" |
@@ -271,7 +83,7 @@ class ViewTests(TestCase): | |||
271 | self.assertEqual(data["error"], "ok") | 83 | self.assertEqual(data["error"], "ok") |
272 | self.assertTrue("rows" in data) | 84 | self.assertTrue("rows" in data) |
273 | 85 | ||
274 | self.assertTrue(PROJECT_NAME in [x["name"] for x in data["rows"]]) | 86 | self.assertTrue(self.project.name in [x["name"] for x in data["rows"]]) |
275 | self.assertTrue("id" in data["rows"][0]) | 87 | self.assertTrue("id" in data["rows"][0]) |
276 | 88 | ||
277 | def test_typeaheads(self): | 89 | def test_typeaheads(self): |
@@ -333,11 +145,13 @@ class ViewTests(TestCase): | |||
333 | 145 | ||
334 | def test_xhr_import_layer(self): | 146 | def test_xhr_import_layer(self): |
335 | """Test xhr_importlayer API""" | 147 | """Test xhr_importlayer API""" |
148 | LayerSource.objects.create(sourcetype=LayerSource.TYPE_IMPORTED) | ||
336 | #Test for importing an already existing layer | 149 | #Test for importing an already existing layer |
337 | args = {'vcs_url' : "git://git.example.com/test", | 150 | args = {'vcs_url' : "git://git.example.com/test", |
338 | 'name' : "base-layer", | 151 | 'name' : "base-layer", |
339 | 'git_ref': "c12b9596afd236116b25ce26dbe0d793de9dc7ce", | 152 | 'git_ref': "c12b9596afd236116b25ce26dbe0d793de9dc7ce", |
340 | 'project_id': 1, 'dir_path' : "/path/in/repository"} | 153 | 'project_id': self.project.id, |
154 | 'dir_path' : "/path/in/repository"} | ||
341 | response = self.client.post(reverse('xhr_importlayer'), args) | 155 | response = self.client.post(reverse('xhr_importlayer'), args) |
342 | data = json.loads(response.content) | 156 | data = json.loads(response.content) |
343 | self.assertEqual(response.status_code, 200) | 157 | self.assertEqual(response.status_code, 200) |
@@ -407,13 +221,12 @@ class ViewTests(TestCase): | |||
407 | 221 | ||
408 | def test_xhr_custom_details(self): | 222 | def test_xhr_custom_details(self): |
409 | """Test getting custom recipe details""" | 223 | """Test getting custom recipe details""" |
410 | name = "custom recipe" | ||
411 | url = reverse('xhr_customrecipe_id', args=(self.customr.id,)) | 224 | url = reverse('xhr_customrecipe_id', args=(self.customr.id,)) |
412 | response = self.client.get(url) | 225 | response = self.client.get(url) |
413 | self.assertEqual(response.status_code, 200) | 226 | self.assertEqual(response.status_code, 200) |
414 | expected = {"error": "ok", | 227 | expected = {"error": "ok", |
415 | "info": {'id': self.customr.id, | 228 | "info": {'id': self.customr.id, |
416 | 'name': name, | 229 | 'name': self.customr.name, |
417 | 'base_recipe_id': self.recipe1.id, | 230 | 'base_recipe_id': self.recipe1.id, |
418 | 'project_id': self.project.id, | 231 | 'project_id': self.project.id, |
419 | } | 232 | } |
@@ -484,6 +297,10 @@ class ViewTests(TestCase): | |||
484 | {"error": "ok"}) | 297 | {"error": "ok"}) |
485 | 298 | ||
486 | def test_download_custom_recipe(self): | 299 | def test_download_custom_recipe(self): |
300 | """Download the recipe file generated for the custom image""" | ||
301 | |||
302 | # Create a dummy recipe file for the custom image generation to read | ||
303 | open("/tmp/a_recipe.bb", 'wa').close() | ||
487 | response = self.client.get(reverse('customrecipedownload', | 304 | response = self.client.get(reverse('customrecipedownload', |
488 | args=(self.project.id, | 305 | args=(self.project.id, |
489 | self.customr.id))) | 306 | self.customr.id))) |
@@ -503,8 +320,6 @@ class ViewTests(TestCase): | |||
503 | row2 = next(x for x in rows if x['name'] == self.recipe2.name) | 320 | row2 = next(x for x in rows if x['name'] == self.recipe2.name) |
504 | 321 | ||
505 | self.assertEqual(response.status_code, 200, 'should be 200 OK status') | 322 | self.assertEqual(response.status_code, 200, 'should be 200 OK status') |
506 | # All recipes in the setUp | ||
507 | self.assertEqual(len(rows), 5, 'should be 5 recipes') | ||
508 | 323 | ||
509 | # check other columns have been populated correctly | 324 | # check other columns have been populated correctly |
510 | self.assertEqual(row1['name'], self.recipe1.name) | 325 | self.assertEqual(row1['name'], self.recipe1.name) |
@@ -529,13 +344,20 @@ class ViewTests(TestCase): | |||
529 | options['format'] = "json" | 344 | options['format'] = "json" |
530 | options['nocache'] = "true" | 345 | options['nocache'] = "true" |
531 | request = RequestFactory().get('/', options) | 346 | request = RequestFactory().get('/', options) |
347 | |||
348 | # This is the image recipe needed for a package list for | ||
349 | # PackagesTable do this here to throw a non exist exception | ||
350 | image_recipe = Recipe.objects.get(pk=4) | ||
351 | |||
532 | # Add any kwargs that are needed by any of the possible tables | 352 | # Add any kwargs that are needed by any of the possible tables |
533 | response = table.get(request, | 353 | args = {'pid': self.project.id, |
534 | pid=self.project.id, | 354 | 'layerid': self.lver.pk, |
535 | layerid=self.lver.pk, | 355 | 'recipeid': self.recipe1.pk, |
536 | recipeid=self.recipe1.pk, | 356 | 'recipe_id': image_recipe.pk, |
537 | recipe_id=self.recipe1.pk, | 357 | 'custrecipeid': self.customr.pk |
538 | custrecipeid=self.customr.pk) | 358 | } |
359 | |||
360 | response = table.get(request, **args) | ||
539 | return json.loads(response.content) | 361 | return json.loads(response.content) |
540 | 362 | ||
541 | # Get a list of classes in tables module | 363 | # Get a list of classes in tables module |
@@ -562,10 +384,14 @@ class ViewTests(TestCase): | |||
562 | 384 | ||
563 | if '-' in table.default_orderby: | 385 | if '-' in table.default_orderby: |
564 | self.assertTrue(row_one >= row_two, | 386 | self.assertTrue(row_one >= row_two, |
565 | "Default ordering not working on %s" % name) | 387 | "Default ordering not working on %s" |
388 | " '%s' should be >= '%s'" % | ||
389 | (name, row_one, row_two)) | ||
566 | else: | 390 | else: |
567 | self.assertTrue(row_one <= row_two, | 391 | self.assertTrue(row_one <= row_two, |
568 | "Default ordering not working on %s" % name) | 392 | "Default ordering not working on %s" |
393 | " '%s' should be <= '%s'" % | ||
394 | (name, row_one, row_two)) | ||
569 | 395 | ||
570 | # Test the column ordering and filtering functionality | 396 | # Test the column ordering and filtering functionality |
571 | for column in table.columns: | 397 | for column in table.columns: |
@@ -580,7 +406,9 @@ class ViewTests(TestCase): | |||
580 | 406 | ||
581 | self.assertTrue(row_one <= row_two, | 407 | self.assertTrue(row_one <= row_two, |
582 | "Ascending sort applied but row 0 is less " | 408 | "Ascending sort applied but row 0 is less " |
583 | "than row 1") | 409 | "than row 1 %s %s " % |
410 | (column['field_name'], name)) | ||
411 | |||
584 | 412 | ||
585 | descending = get_data(table_cls(), | 413 | descending = get_data(table_cls(), |
586 | {"orderby" : | 414 | {"orderby" : |
@@ -591,7 +419,8 @@ class ViewTests(TestCase): | |||
591 | 419 | ||
592 | self.assertTrue(row_one >= row_two, | 420 | self.assertTrue(row_one >= row_two, |
593 | "Descending sort applied but row 0 is " | 421 | "Descending sort applied but row 0 is " |
594 | "greater than row 1") | 422 | "greater than row 1 %s %s" % |
423 | (column['field_name'], name)) | ||
595 | 424 | ||
596 | # If the two start rows are the same we haven't actually | 425 | # If the two start rows are the same we haven't actually |
597 | # changed the order | 426 | # changed the order |