class ConfigTest(base.RestTestCase): PATH = '/api/config' def makeTestGetConfig(extra_keys=None): extra_keys = set(extra_keys or []) def testGetConfig(self): with self.queryLimit(0): resp = self.client.get(self.PATH) self.assert200(resp) expected_keys = set(( 'teams', 'sbname', 'news_mechanism', 'news_poll_interval', 'csrf_token', 'rules', 'game_start', 'game_end', 'login_url', 'register_url', 'login_method', 'scoring', 'validators', 'proof_of_work_bits', )) expected_keys |= extra_keys self.assertEqual(expected_keys, set(resp.json.keys())) return testGetConfig testGetConfig = makeTestGetConfig() testGetConfigAuthenticated = base.authenticated_test(makeTestGetConfig()) testGetConfigAdmin = base.admin_test(makeTestGetConfig())
class NewsTest(base.RestTestCase): PATH = '/api/news' def setUp(self): super(NewsTest, self).setUp() models.News.broadcast('test', 'Test message.') models.News.unicast(self.authenticated_client.team.tid, 'test', 'Test team message.') models.commit() def testGetNews(self): with self.queryLimit(2): resp = self.client.get(self.PATH) self.assert200(resp) self.assertEqual(1, len(resp.json)) testGetNewsAdmin = base.admin_test(testGetNews) @base.authenticated_test def testGetNewsAuthenticated(self): with self.queryLimit(2): resp = self.client.get(self.PATH) self.assert200(resp) self.assertEqual(2, len(resp.json)) def testCreateNews(self): with self.queryLimit(0): resp = self.postJSON(self.PATH, { 'message': 'some message', }) self.assert403(resp) testCreateNewsAuthenticated = base.authenticated_test(testCreateNews) @base.admin_test def testCreateNewsAdmin(self): msg = 'some message' with self.queryLimit(3): resp = self.postJSON(self.PATH, { 'message': msg, }) self.assert200(resp) self.assertEqual(self.client.user.nick, resp.json['author']) self.assertEqual(msg, resp.json['message']) @base.admin_test def testCreateTeamNewsAdmin(self): msg = 'some message' tid = self.authenticated_client.team.tid with self.queryLimit(3): resp = self.postJSON(self.PATH, { 'message': msg, 'tid': tid, }) self.assert200(resp) self.assertEqual(self.client.user.nick, resp.json['author']) self.assertEqual(msg, resp.json['message']) self.assertEqual('Unicast', resp.json['news_type']) news = models.News.query.get(resp.json['nid']) self.assertEqual(tid, news.audience_team_tid)
class CategoryTest(base.RestTestCase): PATH_LIST = '/api/categories' PATH_SINGLE = '/api/categories/%s' def setUp(self): super(CategoryTest, self).setUp() self.challs, self.cats = makeTestChallenges() self.cat = self.cats[0] self.PATH_SINGLE %= self.cat.slug def _testGetList(self): with self.queryLimit(3): resp = self.client.get(self.PATH_LIST) self.assert200(resp) self.assertEqual(len(self.cats), len(resp.json['categories'])) # TODO: check that the expected fields are visible and that others are # not. testGetListAuthenticated = base.authenticated_test(_testGetList) testGetListAdmin = base.admin_test(_testGetList) def testGetListAnonymous(self): with self.queryLimit(0): resp = self.client.get(self.PATH_LIST) self.assert403(resp) def testCreateCategoryFails(self): data = { 'name': 'New', 'description': 'New Category', } with self.queryLimit(0): resp = self.postJSON(self.PATH_LIST, data) self.assert403(resp) self.assertEqual(len(self.cats), models.Category.query.count()) testCreateCategoryFailsAuthenticated = base.authenticated_test( testCreateCategoryFails) @base.admin_test def testCreateCategory(self): data = { 'name': 'New', 'description': 'New Category', } with self.queryLimit(6): resp = self.postJSON(self.PATH_LIST, data) self.assert200(resp) for f in ('name', 'description'): self.assertEqual(data[f], resp.json[f]) cat = models.Category.query.get(resp.json['slug']) for f in ('name', 'description'): self.assertEqual(data[f], getattr(cat, f)) def testDeleteCategoryFails(self): with self.queryLimit(0): resp = self.client.delete(self.PATH_SINGLE) self.assert403(resp) self.assertIsNotNone(models.Category.query.get(self.cat.slug)) testDeleteCategoryFailsAuthenticated = base.authenticated_test( testDeleteCategoryFails) @base.admin_test def testDeleteNonEmptyCategory(self): with self.queryLimit(3): resp = self.client.delete(self.PATH_SINGLE) self.assert400(resp) self.assertIsNotNone(models.Category.query.get(self.cat.slug)) @base.admin_test def testDeleteEmptyCategory(self): for i in self.cat.challenges: models.db.session.delete(i) models.db.session.commit() with self.queryLimit(3): resp = self.client.delete(self.PATH_SINGLE) self.assert200(resp) self.assertIsNone(models.Category.query.get(self.cat.slug)) def testGetCategoryAnonymous(self): with self.queryLimit(0): self.assert403(self.client.get(self.PATH_SINGLE)) def _testGetCategory(self): with self.queryLimit(None): resp = self.client.get(self.PATH_SINGLE) self.assert200(resp) testGetCategoryAuthenticated = base.authenticated_test(_testGetCategory) testGetCategoryAdmin = base.admin_test(_testGetCategory) def testUpdateCategoryAnonymous(self): with self.queryLimit(0): resp = self.putJSON(self.PATH_SINGLE, {'name': 'new name'}) self.assert403(resp) testUpdateCategoryAuthenticated = base.authenticated_test( testUpdateCategoryAnonymous) @base.admin_test def testUpdateCategoryAdmin(self): data = {'name': 'new name'} with self.queryLimit(None): resp = self.putJSON(self.PATH_SINGLE, data) self.assert200(resp) self.assertEqual(data['name'], resp.json['name']) cat = models.Category.query.get(self.cat.slug) self.assertEqual(data['name'], cat.name)