Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(329)

Side by Side Diff: chrome/common/extensions/docs/server2/sidenav_data_source_test.py

Issue 22824042: Docserver: SidenavDataSource refactor, transition to DataSourceRegistry (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import json 6 import json
7 import os 7 import logging
8 import sys
9 import unittest 8 import unittest
10 9
11 from compiled_file_system import CompiledFileSystem 10 from compiled_file_system import CompiledFileSystem
12 from local_file_system import LocalFileSystem
13 from object_store_creator import ObjectStoreCreator 11 from object_store_creator import ObjectStoreCreator
14 from sidenav_data_source import SidenavDataSource 12 from servlet import Request
13 from sidenav_data_source import (
14 SidenavDataSource, _AddLevels, _AddSelected, _QualifyHrefs)
15 from test_file_system import TestFileSystem
16
17
18 class FakeServerInstance(object):
19 def __init__(self, file_system):
20 self.compiled_host_fs_factory = CompiledFileSystem.Factory(
21 file_system, ObjectStoreCreator.ForTest())
22 self.sidenav_json_base_path = ''
23
15 24
16 class SamplesDataSourceTest(unittest.TestCase): 25 class SamplesDataSourceTest(unittest.TestCase):
17 def setUp(self): 26 def testAddLevels(self):
18 self._json_path = 'docs/server2/test_data/sidenav_data_source' 27 sidenav_json = [{
19 self._compiled_fs_factory = CompiledFileSystem.Factory( 28 'title': 'H2',
20 LocalFileSystem.Create(), 29 'items': [{
21 ObjectStoreCreator.ForTest()) 30 'title': 'H3',
31 'items': [{ 'title': 'X1' }]
32 }]
33 }]
22 34
23 def _CheckLevels(self, items, level=2): 35 expected = [{
24 for item in items: 36 'level': 1,
25 self.assertEqual(level, item['level']) 37 'title': 'H2',
26 if 'items' in item: 38 'items': [{
27 self._CheckLevels(item['items'], level=level + 1) 39 'level': 2,
40 'title': 'H3',
41 'items': [{ 'level': 3, 'title': 'X1' }]
42 }]
43 }]
28 44
29 def _ReadLocalFile(self, filename): 45 _AddLevels(sidenav_json, 1)
30 with open(os.path.join(sys.path[0], 46 self.assertEqual(expected, sidenav_json)
31 'test_data',
32 'sidenav_data_source',
33 filename), 'r') as f:
34 return f.read()
35 47
36 def testLevels(self): 48 def testAddSelected(self):
37 sidenav_data_source = SidenavDataSource.Factory(self._compiled_fs_factory, 49 sidenav_json = [
38 self._json_path).Create('') 50 { 'href': '/AH2.html' },
39 sidenav_json = sidenav_data_source.get('test') 51 {
40 self._CheckLevels(sidenav_json) 52 'href': '/H2.html',
53 'items': [{
54 'href': '/H3.html'
55 }]
56 }
57 ]
41 58
42 def testSelected(self): 59 expected = [
43 sidenav_data_source = SidenavDataSource.Factory( 60 { 'href': '/AH2.html' },
44 self._compiled_fs_factory, 61 {
45 self._json_path).Create('www.b.com') 62 'child_selected': True,
46 sidenav_json = sidenav_data_source.get('test') 63 'href': '/H2.html',
47 # This will be prettier once JSON is loaded with an OrderedDict. 64 'items': [{
48 for item in sidenav_json: 65 'href': '/H3.html',
49 if item['title'] == 'Jim': 66 'selected': True
50 self.assertTrue(item.get('child_selected', False)) 67 }]
51 for next_item in item['items']: 68 }
52 if next_item['title'] == 'B': 69 ]
53 self.assertTrue(next_item.get('selected', False))
54 return
55 # If we didn't return already, we should fail.
56 self.fail()
57 70
58 def testAbsolutePath(self): 71 _AddSelected(sidenav_json, 'H3.html')
59 sidenav_data_source = SidenavDataSource.Factory( 72 self.assertEqual(expected, sidenav_json)
60 self._compiled_fs_factory, 73
61 self._json_path).Create('absolute_path/test.html') 74 def testQualifyHrefs(self):
62 sidenav_json = sidenav_data_source.get('absolute_path') 75 sidenav_json = [
63 self.assertEqual( 76 { 'href': '/qualified/H1.html' },
64 sidenav_json, 77 { 'href': 'https://qualified/X1.html' },
65 json.loads(self._ReadLocalFile('absolute_path_sidenav_expected.json'))) 78 {
79 'href': 'H2.html',
80 'items': [{
81 'href': 'H3.html'
82 }]
83 }
84 ]
85
86 expected = [
87 { 'href': '/qualified/H1.html' },
88 { 'href': 'https://qualified/X1.html' },
89 {
90 'href': '/H2.html',
91 'items': [{
92 'href': '/H3.html'
93 }]
94 }
95 ]
96
97 logging.disable('warning')
Jeffrey Yasskin 2013/08/28 19:12:37 We should test that the warnings are generated ...
jshumway 2013/08/29 00:13:09 Okay, wasn't too sure what the best way to actuall
98 _QualifyHrefs(sidenav_json)
99 logging.disable(logging.NOTSET)
100
101 self.assertEqual(expected, sidenav_json)
102
103 def testSidenavDataSource(self):
104 file_system = TestFileSystem({
105 'apps_sidenav.json': json.dumps([{
106 'title': 'H1',
107 'href': 'H1.html',
108 'items': [{
109 'title': 'H2',
110 'href': '/H2.html'
111 }]
112 }])
113 })
114
115 expected = [{
116 'level': 2,
117 'child_selected': True,
118 'title': 'H1',
119 'href': '/H1.html',
120 'items': [{
121 'level': 3,
122 'selected': True,
123 'title': 'H2',
124 'href': '/H2.html'
125 }]
126 }]
127
128 sidenav_data_source = SidenavDataSource(
129 FakeServerInstance(file_system), Request.ForTest('/H2.html'))
130
131 logging.disable('warning')
132 self.assertEqual(expected, sidenav_data_source.get('apps'))
133 logging.disable(logging.NOTSET)
134
135 def testCron(self):
136 file_system = TestFileSystem({
137 'apps_sidenav.json': '[{ "title": "H1" }]' ,
138 'extensions_sidenav.json': '[{ "title": "H2" }]'
139 })
140
141 # Ensure Cron doesn't rely on request.
142 sidenav_data_source = SidenavDataSource(
143 FakeServerInstance(file_system), request=None)
144 sidenav_data_source.Cron()
Jeffrey Yasskin 2013/08/28 19:12:37 Is there anything you can do to assert that Cron()
jshumway 2013/08/29 00:13:09 There is a bad way that requires lots of private v
not at google - send to devlin 2013/08/29 16:30:13 We have an integration test which runs the cron jo
145
66 146
67 if __name__ == '__main__': 147 if __name__ == '__main__':
68 unittest.main() 148 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698