blob: f5dd1c046dabec2b9743d8dd3608cc0e4bf6b08a [file] [log] [blame]
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from flask import Flask
import json
import six
import unittest
import webtest
from google.appengine.ext import ndb
from dashboard import short_uri
from dashboard.common import testing_common
from dashboard.models import graph_data
from dashboard.models import page_state
flask_app = Flask(__name__)
@flask_app.route('/short_uri', methods=['GET'])
def ShortUriHandlerGet():
return short_uri.ShortUriHandlerGet()
@flask_app.route('/short_uri', methods=['POST'])
def ShortUriHandlerPost():
return short_uri.ShortUriHandlerPost()
class ShortUriTest(testing_common.TestCase):
def setUp(self):
super().setUp()
self.testapp = webtest.TestApp(flask_app)
def testUpgradeOld(self):
t = graph_data.TestMetadata(
has_rows=True, id='master/bot/suite/measurement/case')
t.UpdateSheriff()
t.put()
page_state.PageState(
id='test_sid',
value=six.ensure_binary(
json.dumps(
{'charts': [[
['master/bot/suite/measurement', ['all']],
],]}))).put()
response = self.testapp.get('/short_uri', {'sid': 'test_sid', 'v2': 'true'})
expected = {
'testSuites': ['suite'],
'measurements': ['measurement'],
'bots': ['master:bot'],
'testCases': ['case'],
}
actual = json.loads(response.body)['chartSections'][0]['parameters']
self.assertEqual(expected, actual)
self.assertEqual(response.body,
ndb.Key('PageState', 'test_sid').get().value_v2)
def testUpgradeNew(self):
t = graph_data.TestMetadata(
has_rows=True, id='master/bot/suite/measurement/case')
t.UpdateSheriff()
t.put()
page_state.PageState(
id='test_sid',
value=six.ensure_binary(
json.dumps({
'charts': [{
'seriesGroups': [
['master/bot/suite/measurement', ['measurement']],
],
},],
}))).put()
response = self.testapp.get('/short_uri', {'sid': 'test_sid', 'v2': 'true'})
expected = {
'testSuites': ['suite'],
'measurements': ['measurement'],
'bots': ['master:bot'],
'testCases': [],
}
actual = json.loads(response.body)['chartSections'][0]['parameters']
self.assertEqual(expected, actual)
self.assertEqual(response.body,
ndb.Key('PageState', 'test_sid').get().value_v2)
def testPostAndGet(self):
sample_page_state = {
'charts': [['Chromium/win/sunspider/total', 'important']]
}
response = self.testapp.post('/short_uri',
{'page_state': json.dumps(sample_page_state)})
page_state_id = json.loads(response.body)['sid']
self.assertIsNotNone(page_state_id)
response = self.testapp.get('/short_uri', {'sid': page_state_id})
self.assertEqual(sample_page_state, json.loads(response.body))
def testGet_InvalidSID(self):
self.testapp.get('/short_uri', {'sid': '123xyz'}, status=400)
def testGet_NoSID(self):
self.testapp.get('/short_uri', status=400)
def testPost_NoPageState(self):
self.testapp.post('/short_uri', status=400)
if __name__ == '__main__':
unittest.main()