diff options
Diffstat (limited to 'bitbake/lib/toaster/toastergui/tests.py')
-rw-r--r-- | bitbake/lib/toaster/toastergui/tests.py | 91 |
1 files changed, 88 insertions, 3 deletions
diff --git a/bitbake/lib/toaster/toastergui/tests.py b/bitbake/lib/toaster/toastergui/tests.py index 1a8b4787dd..4d1549b0a9 100644 --- a/bitbake/lib/toaster/toastergui/tests.py +++ b/bitbake/lib/toaster/toastergui/tests.py | |||
@@ -24,10 +24,11 @@ | |||
24 | from django.test import TestCase | 24 | from django.test import TestCase |
25 | from django.core.urlresolvers import reverse | 25 | from django.core.urlresolvers import reverse |
26 | from django.utils import timezone | 26 | from django.utils import timezone |
27 | from orm.models import Project, Release, BitbakeVersion, Build | 27 | from orm.models import Project, Release, BitbakeVersion, ProjectTarget |
28 | from orm.models import ReleaseLayerSourcePriority, LayerSource, Layer | 28 | from orm.models import ReleaseLayerSourcePriority, LayerSource, Layer, Build |
29 | from orm.models import Layer_Version, Recipe, Machine, ProjectLayer | 29 | from orm.models import Layer_Version, Recipe, Machine, ProjectLayer |
30 | import json | 30 | import json |
31 | from bs4 import BeautifulSoup | ||
31 | 32 | ||
32 | PROJECT_NAME = "test project" | 33 | PROJECT_NAME = "test project" |
33 | 34 | ||
@@ -41,7 +42,6 @@ class ViewTests(TestCase): | |||
41 | bitbake_version=bbv) | 42 | bitbake_version=bbv) |
42 | self.project = Project.objects.create_project(name=PROJECT_NAME, | 43 | self.project = Project.objects.create_project(name=PROJECT_NAME, |
43 | release=release) | 44 | release=release) |
44 | |||
45 | layersrc = LayerSource.objects.create(sourcetype=LayerSource.TYPE_IMPORTED) | 45 | layersrc = LayerSource.objects.create(sourcetype=LayerSource.TYPE_IMPORTED) |
46 | self.priority = ReleaseLayerSourcePriority.objects.create(release=release, | 46 | self.priority = ReleaseLayerSourcePriority.objects.create(release=release, |
47 | layer_source=layersrc) | 47 | layer_source=layersrc) |
@@ -292,3 +292,88 @@ class ProjectsPageTests(TestCase): | |||
292 | 'should be a project row in the page') | 292 | 'should be a project row in the page') |
293 | self.assertTrue(self.PROJECT_NAME in response.content, | 293 | self.assertTrue(self.PROJECT_NAME in response.content, |
294 | 'default project "cli builds" should be in page') | 294 | 'default project "cli builds" should be in page') |
295 | |||
296 | class ProjectBuildsDisplayTest(TestCase): | ||
297 | """ Test data at /project/X/builds is displayed correctly """ | ||
298 | |||
299 | def setUp(self): | ||
300 | bbv = BitbakeVersion.objects.create(name="bbv1", giturl="/tmp/", | ||
301 | branch="master", dirpath="") | ||
302 | release = Release.objects.create(name="release1", | ||
303 | bitbake_version=bbv) | ||
304 | self.project1 = Project.objects.create_project(name=PROJECT_NAME, | ||
305 | release=release) | ||
306 | self.project2 = Project.objects.create_project(name=PROJECT_NAME, | ||
307 | release=release) | ||
308 | |||
309 | # parameters for builds to associate with the projects | ||
310 | now = timezone.now() | ||
311 | |||
312 | self.project1_build_success = { | ||
313 | "project": self.project1, | ||
314 | "started_on": now, | ||
315 | "completed_on": now, | ||
316 | "outcome": Build.SUCCEEDED | ||
317 | } | ||
318 | |||
319 | self.project1_build_in_progress = { | ||
320 | "project": self.project1, | ||
321 | "started_on": now, | ||
322 | "completed_on": now, | ||
323 | "outcome": Build.IN_PROGRESS | ||
324 | } | ||
325 | |||
326 | self.project2_build_success = { | ||
327 | "project": self.project2, | ||
328 | "started_on": now, | ||
329 | "completed_on": now, | ||
330 | "outcome": Build.SUCCEEDED | ||
331 | } | ||
332 | |||
333 | self.project2_build_in_progress = { | ||
334 | "project": self.project2, | ||
335 | "started_on": now, | ||
336 | "completed_on": now, | ||
337 | "outcome": Build.IN_PROGRESS | ||
338 | } | ||
339 | |||
340 | def _get_rows_for_project(self, project_id): | ||
341 | url = reverse("projectbuilds", args=(project_id,)) | ||
342 | response = self.client.get(url, follow=True) | ||
343 | soup = BeautifulSoup(response.content) | ||
344 | return soup.select('tr[class="data"]') | ||
345 | |||
346 | def test_show_builds_for_project(self): | ||
347 | """ Builds for a project should be displayed """ | ||
348 | build1a = Build.objects.create(**self.project1_build_success) | ||
349 | build1b = Build.objects.create(**self.project1_build_success) | ||
350 | build_rows = self._get_rows_for_project(self.project1.id) | ||
351 | self.assertEqual(len(build_rows), 2) | ||
352 | |||
353 | def test_show_builds_for_project_only(self): | ||
354 | """ Builds for other projects should be excluded """ | ||
355 | build1a = Build.objects.create(**self.project1_build_success) | ||
356 | build1b = Build.objects.create(**self.project1_build_success) | ||
357 | build1c = Build.objects.create(**self.project1_build_success) | ||
358 | |||
359 | # shouldn't see these two | ||
360 | build2a = Build.objects.create(**self.project2_build_success) | ||
361 | build2b = Build.objects.create(**self.project2_build_in_progress) | ||
362 | |||
363 | build_rows = self._get_rows_for_project(self.project1.id) | ||
364 | self.assertEqual(len(build_rows), 3) | ||
365 | |||
366 | def test_show_builds_exclude_in_progress(self): | ||
367 | """ "in progress" builds should not be shown """ | ||
368 | build1a = Build.objects.create(**self.project1_build_success) | ||
369 | build1b = Build.objects.create(**self.project1_build_success) | ||
370 | |||
371 | # shouldn't see this one | ||
372 | build1c = Build.objects.create(**self.project1_build_in_progress) | ||
373 | |||
374 | # shouldn't see these two either, as they belong to a different project | ||
375 | build2a = Build.objects.create(**self.project2_build_success) | ||
376 | build2b = Build.objects.create(**self.project2_build_in_progress) | ||
377 | |||
378 | build_rows = self._get_rows_for_project(self.project1.id) | ||
379 | self.assertEqual(len(build_rows), 2) \ No newline at end of file | ||