blob: ffcc861cd0991580afc88069527f50c9514df8b7 [file]
# Copyright 2014 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.
import json
from third_party.testing_utils import testing
from webtest.app import AppError
import main
from model.password import Password
from model.record import Record
from shared.config import CQ_BOT_PASSWORD_KEY
from shared import utils
class TestPost(testing.AppengineTestCase):
app_module = main.app
def test_post_disallowed(self):
self.mock_current_user(is_admin=False)
# 403 status response crashes webtest.
self.assertRaises(AppError, lambda: self.test_app.post('/post'))
response = self.test_app.get('/post')
self.assertEquals('302 Moved Temporarily', response.status)
self.assertEquals(
'https://www.google.com/accounts/Login?'
'continue=http%3A//testbed.example.com/',
response.location)
def test_post_single_empty(self):
self.mock_current_user(is_admin=True)
old_count = Record.query().count()
response = self.test_app.get('/post')
self.assertEquals('Empty record entries disallowed', response.body)
self.assertEquals(old_count, Record.query().count())
def test_post_single_packet(self):
self.mock_current_user(is_admin=True)
response = self.test_app.get('/post', params={
'key': 'single_packet',
'tags': 'tagA,tagB,tagC',
'fields': '{"some": "random", "json": ["data"], "project": "prj"}',
})
self.assertEquals('', response.body)
record = Record.get_by_id('single_packet')
self.assertTrue(record != None)
self.assertEquals(set(['tagA', 'tagB', 'tagC', 'project=prj']),
set(record.tags))
self.assertEquals({'some': 'random', 'json': ['data'], 'project': 'prj'},
record.fields)
def test_post_single_auto_tagged(self):
self.mock_current_user(is_admin=True)
response = self.test_app.get('/post', params={
'key': 'single_auto_tagged',
'tags': 'existingTag,issue=hello',
'fields': '{"issue": "hello", "patchset": "world", "project": "prj"}',
})
self.assertEquals('', response.body)
record = Record.get_by_id('single_auto_tagged')
self.assertTrue(record != None)
self.assertEquals(
set(['existingTag', 'issue=hello', 'patchset=world', 'project=prj']),
set(record.tags))
self.assertEquals(
{'issue': 'hello', 'patchset': 'world', 'project': 'prj'},
record.fields)
def test_post_single_key_update(self):
self.mock_current_user(is_admin=True)
response = self.test_app.get('/post', params={
'key': 'single_key_update',
'fields': '{"project": "prj"}',
})
self.assertEquals('', response.body)
record = Record.get_by_id('single_key_update')
self.assertTrue(record != None)
self.assertEquals(['project=prj'], record.tags)
self.assertEquals({'project': 'prj'}, record.fields)
old_count = Record.query().count()
response = self.test_app.get('/post', params={
'key': 'single_key_update',
'tags': '1,2,3',
'fields': '{"update": "the", "same": "record", "project": "prj"}',
})
self.assertEquals('', response.body)
self.assertEquals(old_count, Record.query().count())
record = Record.get_by_id('single_key_update')
self.assertTrue(record != None)
self.assertEquals(set(['1', '2', '3', 'project=prj']), set(record.tags))
self.assertEquals({'update': 'the', 'same': 'record', 'project': 'prj'},
record.fields)
def test_post_multiple_empty(self):
self.mock_current_user(is_admin=False)
password = 'passwd'
Password(id=CQ_BOT_PASSWORD_KEY, sha1=utils.password_sha1(password)).put()
old_count = Record.query().count()
response = self.test_app.post('/post', params={'password': password})
self.assertEquals('', response.body)
self.assertEquals(old_count, Record.query().count())
response = self.test_app.post('/post', params={
'p': '{}', 'password': password})
self.assertEquals('Empty record entries disallowed', response.body)
self.assertEquals(old_count, Record.query().count())
def test_post_multiple(self):
self.mock_current_user(is_admin=True)
old_count = Record.query().count()
response = self.test_app.post('/post', params=[
('p', json.dumps({
'key': 'multiple_0',
'tags': ['hello', 'world'],
'fields': {'hello': 'world', 'project': 'prj'},
})),
('p', json.dumps({
'key': 'multiple_1',
'fields': {'issue': 'autotagged', 'project': 'prj'},
})),
('p', json.dumps({
'key': 'multiple_2',
'tags': ['empty', 'fields'],
'fields': {'project': 'prj'},
})),
])
self.assertEquals('', response.body)
self.assertEquals(old_count + 3, Record.query().count())
record = Record.get_by_id('multiple_0')
self.assertEquals(set(['hello', 'world', 'project=prj']), set(record.tags))
self.assertEquals({'hello': 'world', 'project': 'prj'}, record.fields)
record = Record.get_by_id('multiple_1')
self.assertEquals(['issue=autotagged', 'project=prj'], record.tags)
self.assertEquals({'issue': 'autotagged', 'project': 'prj'}, record.fields)
record = Record.get_by_id('multiple_2')
self.assertEquals(set(['empty', 'fields', 'project=prj']),
set(record.tags))
self.assertEquals({'project': 'prj'}, record.fields)
def test_post_project_missing(self):
self.mock_current_user(is_admin=True)
response = self.test_app.get('/post', params={
'key': 'single_packet',
'fields': '{"some": "random"}',
})
self.assertEquals('"Project" field missing', response.body)
record = Record.get_by_id('single_packet')
self.assertIsNone(record)