1# Copyright 2015 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 unittest 6 7import webapp2 8import webtest 9 10from google.appengine.api import users 11 12from dashboard import edit_test_owners 13from dashboard import layered_cache 14from dashboard import test_owner 15from dashboard import testing_common 16from dashboard import xsrf 17 18_SAMPLE_OWNER_DICT = { 19 'ChromiumPerf/speedometer': {'chris@google.com', 'chris@chromium.org'}, 20 'ChromiumPerf/octane': {'chris@chromium.org'}, 21} 22 23 24class EditTestOwnersTest(testing_common.TestCase): 25 26 def setUp(self): 27 super(EditTestOwnersTest, self).setUp() 28 app = webapp2.WSGIApplication( 29 [('/edit_test_owners', edit_test_owners.EditTestOwnersHandler)]) 30 self.testapp = webtest.TestApp(app) 31 32 def tearDown(self): 33 super(EditTestOwnersTest, self).tearDown() 34 self.UnsetCurrentUser() 35 36 def _SetOwnersDict(self, owner_dict): 37 layered_cache.SetExternal(test_owner._MASTER_OWNER_CACHE_KEY, 38 owner_dict) 39 40 def testGet_NonAdmin_OnlyUserInfoEmbeddedOnPage(self): 41 self.SetCurrentUser('chris@chromium.org', is_admin=False) 42 layered_cache.SetExternal(test_owner._MASTER_OWNER_CACHE_KEY, 43 _SAMPLE_OWNER_DICT) 44 45 response = self.testapp.get('/edit_test_owners') 46 owner_info = self.GetEmbeddedVariable(response, 'OWNER_INFO') 47 expected_owner_info = [ 48 {u'name': u'ChromiumPerf/octane'}, 49 {u'name': u'ChromiumPerf/speedometer'} 50 ] 51 self.assertEqual(expected_owner_info, owner_info) 52 53 def testGet_Admin_AllOwnerInfoEmbeddedOnPage(self): 54 self.SetCurrentUser('chris@chromium.org', is_admin=True) 55 self._SetOwnersDict(_SAMPLE_OWNER_DICT) 56 57 response = self.testapp.get('/edit_test_owners') 58 owner_info = self.GetEmbeddedVariable(response, 'OWNER_INFO') 59 self.assertEqual(2, len(owner_info)) 60 owner_info.sort(key=lambda x: x['name']) 61 for info in owner_info: 62 if 'sub_items' in info: 63 info['sub_items'].sort(key=lambda x: x['name']) 64 expected_owner_info = [ 65 { 66 'name': 'ChromiumPerf/octane', 67 'sub_items': [{'name': 'chris@chromium.org'}] 68 }, 69 { 70 'name': 'ChromiumPerf/speedometer', 71 'sub_items': [ 72 {'name': 'chris@chromium.org'}, 73 {'name': 'chris@google.com'}, 74 ], 75 }, 76 ] 77 self.assertEqual(expected_owner_info, owner_info) 78 79 def testPost_NonAdminAddsAndRemovesSelf_Succeeds(self): 80 self.SetCurrentUser('chris@chromium.org', is_admin=False) 81 self._SetOwnersDict(_SAMPLE_OWNER_DICT) 82 83 self.testapp.post('/edit_test_owners', { 84 'action': 'add', 85 'item': 'ChromiumPerf/spaceport', 86 'xsrf_token': xsrf.GenerateToken(users.get_current_user()), 87 }) 88 owner_dict = layered_cache.GetExternal(test_owner._MASTER_OWNER_CACHE_KEY) 89 self.assertIn('ChromiumPerf/spaceport', owner_dict) 90 self.assertIn('chris@chromium.org', owner_dict['ChromiumPerf/spaceport']) 91 92 self.testapp.post('/edit_test_owners', { 93 'action': 'remove', 94 'item': 'ChromiumPerf/spaceport', 95 'xsrf_token': xsrf.GenerateToken(users.get_current_user()), 96 }) 97 owner_dict = layered_cache.GetExternal(test_owner._MASTER_OWNER_CACHE_KEY) 98 self.assertNotIn('ChromiumPerf/spaceport', owner_dict) 99 100 def testPost_AdminAddsAndRemovesOther_Succeeds(self): 101 self.SetCurrentUser('chris@chromium.org', is_admin=True) 102 self._SetOwnersDict(_SAMPLE_OWNER_DICT) 103 104 # Test adding test owner. 105 self.testapp.post('/edit_test_owners', { 106 'action': 'add', 107 'item': 'ChromiumPerf/speedometer', 108 'sub_item': 'john@chromium.org', 109 'xsrf_token': xsrf.GenerateToken(users.get_current_user()), 110 }) 111 owner_dict = layered_cache.GetExternal(test_owner._MASTER_OWNER_CACHE_KEY) 112 self.assertIn('john@chromium.org', owner_dict['ChromiumPerf/speedometer']) 113 114 # Test removing test owner. 115 self.testapp.post('/edit_test_owners', { 116 'action': 'remove', 117 'item': 'ChromiumPerf/speedometer', 118 'sub_item': 'john@chromium.org', 119 'xsrf_token': xsrf.GenerateToken(users.get_current_user()), 120 }) 121 owner_dict = layered_cache.GetExternal(test_owner._MASTER_OWNER_CACHE_KEY) 122 self.assertNotIn( 123 'john@chromium.org', owner_dict['ChromiumPerf/speedometer']) 124 125 # Test removing all test owners for a test suite path. 126 self.testapp.post('/edit_test_owners', { 127 'action': 'remove', 128 'item': 'ChromiumPerf/speedometer', 129 'xsrf_token': xsrf.GenerateToken(users.get_current_user()), 130 }) 131 owner_dict = layered_cache.GetExternal(test_owner._MASTER_OWNER_CACHE_KEY) 132 self.assertNotIn('ChromiumPerf/speedometer', owner_dict) 133 134 135if __name__ == '__main__': 136 unittest.main() 137