app_unittest.py revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import json
6import unittest
7
8from google.appengine.api import files
9from google.appengine.ext import ndb
10from google.appengine.ext import testbed
11from google.appengine.ext.blobstore import BlobInfo
12
13import services
14
15
16class ServicesTest(unittest.TestCase):
17  @staticmethod
18  def CreateBlob(path):
19    # Initialize blob dictionary to return.
20    blob = {}
21
22    # Read sample file.
23    blob['json_str'] = open(path, 'r').read()
24
25    # Create file in blobstore according to sample file.
26    file_name = files.blobstore.create(mime_type='text/plain')
27    with files.open(file_name, 'a') as f:
28      f.write(blob['json_str'])
29    files.finalize(file_name)
30
31    # Get BlobInfo of sample file.
32    blob['blob_info'] = BlobInfo.get(files.blobstore.get_blob_key(file_name))
33
34    return blob
35
36  def setUp(self):
37    self.testbed = testbed.Testbed()
38    self.testbed.activate()
39    self.testbed.init_all_stubs()
40
41    # Read sample file.
42    self.correct_blob = ServicesTest.CreateBlob('testdata/sample.json')
43    self.error_blob = ServicesTest.CreateBlob('testdata/error_sample.json')
44
45  def tearDown(self):
46    self.testbed.deactivate()
47
48  def testProfiler(self):
49    correct_blob = self.correct_blob
50    # Call services function to create Profiler entity.
51    run_id = services.CreateProfiler(correct_blob['blob_info'])
52
53    # Test GetProfiler
54    self.assertEqual(services.GetProfiler(run_id), correct_blob['json_str'])
55
56    # Create Profiler entity with the same file again and check uniqueness.
57    services.CreateProfiler(correct_blob['blob_info'])
58    self.assertEqual(services.Profiler.query().count(), 1)
59
60  def testTemplate(self):
61    correct_blob = self.correct_blob
62    # Call services function to create template entities.
63    services.CreateTemplates(correct_blob['blob_info'])
64
65    # Test templates being stored in database correctly.
66    json_obj = json.loads(correct_blob['json_str'])
67    for content in json_obj['templates'].values():
68      template_entity = ndb.Key('Template', json.dumps(content)).get()
69      self.assertEqual(template_entity.content, content)
70
71    # Create template entities with the same file again and check uniqueness.
72    services.CreateTemplates(correct_blob['blob_info'])
73    self.assertEqual(services.Template.query().count(), 2)
74
75  def testErrorBlob(self):
76    error_blob = self.error_blob
77    # Test None when default template not indicated or found in templates.
78    dflt_tmpl = services.CreateTemplates(error_blob['blob_info'])
79    self.assertIsNone(dflt_tmpl)
80