예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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()
예제 #5
0
    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.
예제 #6
0
    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)
예제 #7
0
  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)
예제 #8
0
  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()
예제 #9
0
    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.
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
 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()
예제 #13
0
 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()
예제 #14
0
 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)