Re-enable test_crd_check_unknown test

Since it is possible for createJobTree() to have an unknown project,
we need to properly hand that for project_configs().

Change-Id: I29f10110027c24e9a47a371a3b608262137d5b60
Signed-off-by: Paul Belanger <pabelanger@redhat.com>
diff --git a/tests/fixtures/config/single-tenant/git/org_unknown/README b/tests/fixtures/config/single-tenant/git/org_unknown/README
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/tests/fixtures/config/single-tenant/git/org_unknown/README
@@ -0,0 +1 @@
+test
diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py
index fb35d6c..0b0808b 100755
--- a/tests/test_scheduler.py
+++ b/tests/test_scheduler.py
@@ -4356,7 +4356,6 @@
         self.waitUntilSettled()
         self.assertEqual(self.history[-1].changes, '3,2 2,1 1,2')
 
-    @skip("Disabled for early v3 development")
     def test_crd_check_unknown(self):
         "Test unknown projects in independent pipeline"
         self.init_repo("org/unknown")
diff --git a/zuul/model.py b/zuul/model.py
index acd7d41..ddb0dde 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -1771,11 +1771,12 @@
             self._createJobTree(change, tree.job_trees, frozen_tree)
 
     def createJobTree(self, item):
-        project_config = self.project_configs[item.change.project.name]
+        project_config = self.project_configs.get(
+            item.change.project.name, None)
         ret = JobTree(None)
         # NOTE(pabelanger): It is possible for a foreign project not to have a
         # configured pipeline, if so return an empty JobTree.
-        if item.pipeline.name in project_config.pipelines:
+        if project_config and item.pipeline.name in project_config.pipelines:
             project_tree = \
                 project_config.pipelines[item.pipeline.name].job_tree
             self._createJobTree(item.change, project_tree.job_trees, ret)