def test_post__some_stars(self): """User has starred some features.""" email = '*****@*****.**' feature_1_id = self.feature_1.key().id() testing_config.sign_in(email, 123567890) notifier.FeatureStar.set_star(email, feature_1_id) self.handler.post() self.assertEqual('{"featureIds":[%d]}' % feature_1_id, self.handler.response.body)
def test_get__normal(self, mock_render): """Allowed users render a page with a django form.""" testing_config.sign_in('*****@*****.**', 1234567890) self.handler.get('/guide/stage', self.feature_1.key().id(), self.stage) self.assertEqual('200 OK', self.handler.response.status) mock_render.assert_called_once() template_data = mock_render.call_args.kwargs['data'] self.assertTrue('feature' in template_data) self.assertTrue('feature_id' in template_data) self.assertTrue('feature_form' in template_data)
def test_get__normal(self, mock_render): """Allowed users render a page with a process overview.""" testing_config.sign_in('*****@*****.**', 1234567890) self.handler.get('/guide/edit', self.feature_1.key().id()) self.assertEqual('200 OK', self.handler.response.status) mock_render.assert_called_once() template_data = mock_render.call_args.kwargs['data'] self.assertTrue('overview_form' in template_data) self.assertTrue('process_json' in template_data) self.assertTrue('progress_so_far' in template_data)
def test_post__no_existing(self, mock_redirect): """Trying to edit a feature that does not exist redirects.""" testing_config.sign_in('*****@*****.**', 123567890) mock_redirect.return_value = 'fake redirect return value' bad_feature_id = self.feature_1.key().id() + 1 path = '/admin/features/edit/%d' % bad_feature_id self.handler.request = webapp2.Request.blank(path) actual = self.handler.post(path, feature_id=bad_feature_id) self.assertEqual('fake redirect return value', actual) mock_redirect.assert_called_once()
def test_post__unmatched_unstar(self): """User tries to unstar feature that they never starred: no-op.""" testing_config.sign_in('*****@*****.**', 123567890) feature_id = self.feature_1.key().id() # User never stars the feature in the first place. self.handler.request.body = ('{"featureId": %d, "starred": false}' % feature_id) self.handler.post() # Out-of-step request updated_feature = models.Feature.get_by_id(feature_id) self.assertEqual(0, updated_feature.star_count) # Still 0, not negative.
def test_post__normal(self): """User can star and unstar.""" testing_config.sign_in('*****@*****.**', 123567890) feature_id = self.feature_1.key().id() self.handler.request.body = '{"featureId": %d}' % feature_id self.handler.post() updated_feature = models.Feature.get_by_id(feature_id) self.assertEqual(1, updated_feature.star_count) self.handler.request.body = ('{"featureId": %d, "starred": false}' % feature_id) self.handler.post() updated_feature = models.Feature.get_by_id(feature_id) self.assertEqual(0, updated_feature.star_count)
def test_post__normal_valid(self): """Allowed user can edit a feature.""" testing_config.sign_in('*****@*****.**', 1234567890) self.handler.request = webapp2.Request.blank( '/guide/stage/%d/%d' % (self.feature_1.key().id(), self.stage), POST = { 'category': '2', 'name': 'Revised feature name', 'summary': 'Revised feature summary', }) self.handler.post('/guide/stage', self.feature_1.key().id(), self.stage) self.assertEqual('302 Moved Temporarily', self.handler.response.status) location = self.handler.response.headers['location'] self.assertEqual('http://localhost/guide/edit/%d' % self.feature_1.key().id(), location) revised_feature = models.Feature.get_by_id(self.feature_1.key().id()) self.assertEqual(2, revised_feature.category) self.assertEqual('Revised feature name', revised_feature.name) self.assertEqual('Revised feature summary', revised_feature.summary)
def test_post__normal_valid(self): """Allowed user can create a feature.""" testing_config.sign_in('*****@*****.**', 1234567890) self.handler.request = webapp2.Request.blank( '/guide/new', POST = { 'category': '1', 'name': 'Feature name', 'summary': 'Feature summary', }) self.handler.post(self.handler.request.path) self.assertEqual('302 Moved Temporarily', self.handler.response.status) location = self.handler.response.headers['location'] self.assertTrue(location.startswith('http://localhost/guide/edit/')) new_feature_id = int(location.split('/')[-1]) feature = models.Feature.get_by_id(new_feature_id) self.assertEqual(1, feature.category) self.assertEqual('Feature name', feature.name) self.assertEqual('Feature summary', feature.summary) feature.delete()
def test_post__duplicate(self): """User sends a duplicate request, which should be a no-op.""" testing_config.sign_in('*****@*****.**', 123567890) feature_id = self.feature_1.key().id() self.handler.request.body = '{"featureId": %d}' % feature_id self.handler.post() # Original request updated_feature = models.Feature.get_by_id(feature_id) self.assertEqual(1, updated_feature.star_count) self.handler.post() # Duplicate request updated_feature = models.Feature.get_by_id(feature_id) self.assertEqual(1, updated_feature.star_count) # Still 1, not 2. self.handler.request.body = ('{"featureId": %d, "starred": false}' % feature_id) self.handler.post() # Original request updated_feature = models.Feature.get_by_id(feature_id) self.assertEqual(0, updated_feature.star_count) self.handler.post() # Duplicate request updated_feature = models.Feature.get_by_id(feature_id) self.assertEqual(0, updated_feature.star_count) # Still 0, not negative.
def test_post__non_allowed(self): """Non-allowed cannot create features, gets a 401.""" testing_config.sign_in('*****@*****.**', 1234567890) self.handler.post(self.handler.request.path) self.assertEqual('401 Unauthorized', self.handler.response.status)
def test_post__non_allowed(self): """Non-allowed cannot edit features, gets a 401.""" testing_config.sign_in('*****@*****.**', 1234567890) self.handler.post('/guide/stage', self.feature_1.key().id(), self.stage) self.assertEqual('401 Unauthorized', self.handler.response.status)
def test_get__not_found(self, mock_render): """Allowed users get a 404 if there is no such feature.""" testing_config.sign_in('*****@*****.**', 1234567890) with self.assertRaises(exc.HTTPNotFound): self.handler.get('/guide/stage', 999, self.stage) mock_render.assert_not_called()
def test_get__non_allowed(self, mock_render): """Non-allowed cannot create features, gets a 401.""" testing_config.sign_in('*****@*****.**', 1234567890) self.handler.get('/guide/edit', self.feature_1.key().id()) self.assertEqual('401 Unauthorized', self.handler.response.status) mock_render.assert_not_called()
def test_post__no_stars(self): """User has not starred any features.""" testing_config.sign_in('*****@*****.**', 123567890) self.handler.post() self.assertEqual('{"featureIds":[]}', self.handler.response.body)