14a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# Copyright 2015 The Chromium Authors. All rights reserved.
24a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# Use of this source code is governed by a BSD-style license that can be
34a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair# found in the LICENSE file.
44a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
54a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairimport json
64a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairimport unittest
74a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
84a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairimport webapp2
94a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairimport webtest
104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom dashboard import list_monitored_tests
124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom dashboard import testing_common
134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom dashboard.models import graph_data
144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairfrom dashboard.models import sheriff
154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
164a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
174a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairclass ListMonitoredTestsTest(testing_common.TestCase):
184a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
194a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def setUp(self):
204a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    super(ListMonitoredTestsTest, self).setUp()
214a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    app = webapp2.WSGIApplication(
224a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        [('/list_monitored_tests',
234a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair          list_monitored_tests.ListMonitoredTestsHandler)])
244a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.testapp = webtest.TestApp(app)
254a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
264a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def _AddSampleTestData(self):
274a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    """Adds some sample data used in the tests below."""
284a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    master = graph_data.Master(id='TheMaster').put()
294a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    bot = graph_data.Bot(id='TheBot', parent=master).put()
304a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    suite1 = graph_data.Test(id='Suite1', parent=bot).put()
314a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    suite2 = graph_data.Test(id='Suite2', parent=bot).put()
324a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    graph_data.Test(id='aaa', parent=suite1, has_rows=True).put()
334a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    graph_data.Test(id='bbb', parent=suite1, has_rows=True).put()
344a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    graph_data.Test(id='ccc', parent=suite2, has_rows=True).put()
354a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    graph_data.Test(id='ddd', parent=suite2, has_rows=True).put()
364a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
374a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def _AddSheriff(self, name, email=None, url=None,
384a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair                  internal_only=False, summarize=False, patterns=None):
394a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    """Adds a Sheriff entity to the datastore."""
404a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    sheriff.Sheriff(
414a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        id=name, email=email, url=url, internal_only=internal_only,
424a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        summarize=summarize, patterns=patterns or []).put()
434a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
4446b43bff003ceda46cf9a5d40a47f7674996d2e0Zhen Wang  def testGet_ValidSheriff_ReturnsJSONListOfTests(self):
454a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self._AddSheriff('X', patterns=['*/*/Suite1/*'])
464a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self._AddSampleTestData()
474a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    response = self.testapp.get(
484a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        '/list_monitored_tests', {'get-sheriffed-by': 'X'})
494a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertEqual(
504a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        ['TheMaster/TheBot/Suite1/aaa', 'TheMaster/TheBot/Suite1/bbb'],
514a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        json.loads(response.body))
524a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
534a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def testGet_NoParameterGiven_ReturnsError(self):
544a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    # This would raise an exception (and fail the test) if the status
554a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    # doesn't match the given status.
564a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.testapp.get('/list_monitored_tests', status=400)
574a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
584a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  def testGet_NonExistentSheriff_ReturnsJSONEmptyList(self):
594a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    response = self.testapp.get(
604a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair        '/list_monitored_tests', {'get-sheriffed-by': 'Bogus Sheriff'})
614a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair    self.assertEqual([], json.loads(response.body))
624a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
634a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair
644a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclairif __name__ == '__main__':
654a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair  unittest.main()
66