diff --git a/bitbake/lib/toaster/toastergui/tests.py b/bitbake/lib/toaster/toastergui/tests.py index 77e80fe3a9..8a59af46ef 100644 --- a/bitbake/lib/toaster/toastergui/tests.py +++ b/bitbake/lib/toaster/toastergui/tests.py @@ -1,7 +1,8 @@ from django.test import TestCase from django.core.urlresolvers import reverse from orm.models import Project, Release, BitbakeVersion, Build -from orm.models import ReleaseLayerSourcePriority, LayerSource, Layer, Layer_Version +from orm.models import ReleaseLayerSourcePriority, LayerSource, Layer, Layer_Version, Recipe, Machine, ProjectLayer +import json class ProvisionedProjectTestCase(TestCase): TEST_PROJECT_NAME = "test project" @@ -27,7 +28,6 @@ class AllProjectsViewTestCase(ProvisionedProjectTestCase): self.assertTrue(response['Content-Type'].startswith('application/json')) try: - import json data = json.loads(response.content) except: self.fail("Response %s is not json-loadable" % response.content) @@ -44,6 +44,9 @@ class AllProjectsViewTestCase(ProvisionedProjectTestCase): class ProvisionedLayersProjectTestCase(ProvisionedProjectTestCase): LAYER_NAME = "base-layer" + RECIPE_NAME = "base-recipe" + + def setUp(self): super(ProvisionedLayersProjectTestCase, self).setUp() self.layersource, created = LayerSource.objects.get_or_create(sourcetype = LayerSource.TYPE_IMPORTED) @@ -51,6 +54,13 @@ class ProvisionedLayersProjectTestCase(ProvisionedProjectTestCase): self.layer, created = Layer.objects.get_or_create(name=XHRDataTypeAheadTestCase.LAYER_NAME, layer_source=self.layersource, vcs_url="/tmp/") self.lv, created = Layer_Version.objects.get_or_create(layer = self.layer, project = self.project, layer_source=self.layersource, commit="master") + self.recipe, created = Recipe.objects.get_or_create(layer_source=self.layersource, name=ProvisionedLayersProjectTestCase.RECIPE_NAME, version="1.2", summary="one recipe", description="recipe", layer_version=self.lv) + + self.machine, created = Machine.objects.get_or_create(layer_version=self.lv, name="wisk", description="wisking machine") + + ProjectLayer.objects.get_or_create(project = self.project, + layercommit = self.lv) + class XHRDataTypeAheadTestCase(ProvisionedLayersProjectTestCase): @@ -58,20 +68,60 @@ class XHRDataTypeAheadTestCase(ProvisionedLayersProjectTestCase): super(XHRDataTypeAheadTestCase, self).setUp() self.assertTrue(self.lv in self.project.compatible_layerversions()) - def test_xhr_datatypeahead_layer(self): - response = self.client.get(reverse('xhr_datatypeahead', args=(self.project.id,)), {"type": "layerdeps"}) - self.assertEqual(response.status_code, 200) - self.assertTrue(response['Content-Type'].startswith('application/json')) + def test_typeaheads(self): + layers_url = reverse('xhr_layerstypeahead', args=(self.project.id,)) + prj_url = reverse('xhr_projectstypeahead') - try: - import json - data = json.loads(response.content) - except: - self.fail("Response %s is not json-loadable" % response.content) + urls = [ layers_url, + prj_url, + reverse('xhr_recipestypeahead', args=(self.project.id,)), + reverse('xhr_machinestypeahead', args=(self.project.id,)), + ] - self.assertTrue("error" in data) - self.assertEqual(data["error"], "ok") - self.assertTrue("list" in data) - self.assertTrue(len(data["list"]) > 0) + def basic_reponse_check(reponse, url): + self.assertEqual(response.status_code, 200) + self.assertTrue(response['Content-Type'].startswith('application/json')) - self.assertTrue(XHRDataTypeAheadTestCase.LAYER_NAME in map(lambda x: x["name"], data["list"])) + try: + data = json.loads(response.content) + except: + self.fail("Response %s is not json-loadable" % response.content) + self.assertTrue("error" in data) + self.assertEqual(data["error"], "ok") + self.assertTrue("results" in data) + + # We got a result so now check the fields + if len(data['results']) > 0: + result = data['results'][0] + + self.assertTrue(len(result['name']) > 0) + self.assertTrue("detail" in result) + self.assertTrue(result['id'] > 0) + + # Special check for the layers typeahead's extra fields + if url == layers_url: + self.assertTrue(len(result['layerdetailurl']) > 0) + self.assertTrue(len(result['vcs_url']) > 0) + self.assertTrue(len(result['vcs_reference']) > 0) + # Special check for project typeahead extra fields + elif url == prj_url: + self.assertTrue(len(result['projectPageUrl']) > 0) + + return True + + return False + + import string + + for url in urls: + results = False + + for typeing in list(string.ascii_letters): + response = self.client.get(url, { 'search' : typeing }) + results = basic_reponse_check(response, url) + if results: + break + + # After "typeing" the alpabet we should have result true + # from each of the urls + self.assertTrue(results)