Beispiel #1
0
 def setUp(self):
   super(WordPressTest, self).setUp()
   self.auth_entity = WordPressAuth(id='my.wp.com',
                                    user_json=json.dumps({
                                      'display_name': 'Ryan',
                                      'username': '******',
                                      'avatar_URL': 'http://ava/tar'}),
                                    blog_id='123',
                                    blog_url='http://my.wp.com/',
                                    access_token_str='my token')
   self.auth_entity.put()
   self.wp = WordPress(id='my.wp.com',
                       auth_entity=self.auth_entity.key,
                       url='http://my.wp.com/',
                       domains=['my.wp.com'])
Beispiel #2
0
 def setUp(self):
     super(WordPressTest, self).setUp()
     self.auth_entity = WordPressAuth(
         id="my.wp.com",
         user_json=json.dumps({"display_name": "Ryan", "username": "******", "avatar_URL": "http://ava/tar"}),
         blog_id="123",
         blog_url="http://my.wp.com/",
         access_token_str="my token",
     )
     self.auth_entity.put()
     self.wp = WordPress(
         id="my.wp.com", auth_entity=self.auth_entity.key, url="http://my.wp.com/", domains=["my.wp.com"]
     )
Beispiel #3
0
 def setUp(self):
   super(WordPressTest, self).setUp()
   self.auth_entity = WordPressAuth(id='my.wp.com',
                                    user_json=json.dumps({
                                      'display_name': 'Ryan',
                                      'username': '******',
                                      'avatar_URL': 'http://ava/tar'}),
                                    blog_id='123',
                                    blog_url='http://my.wp.com/',
                                    access_token_str='my token')
   self.auth_entity.put()
   self.wp = WordPress(id='my.wp.com',
                       auth_entity=self.auth_entity.key,
                       url='http://my.wp.com/',
                       domains=['my.wp.com'])
class WordPressTest(testutil.HandlerTest):
    def setUp(self):
        super(WordPressTest, self).setUp()
        self.auth_entity = WordPressAuth(id='my.wp.com',
                                         user_json=json_dumps({
                                             'display_name':
                                             'Ryan',
                                             'username':
                                             '******',
                                             'avatar_URL':
                                             'http://ava/tar'
                                         }),
                                         blog_id='123',
                                         blog_url='http://my.wp.com/',
                                         access_token_str='my token')
        self.auth_entity.put()
        self.wp = WordPress(id='my.wp.com',
                            auth_entity=self.auth_entity.key,
                            url='http://my.wp.com/',
                            domains=['my.wp.com'])

    def expect_new_reply(
            self,
            url='https://public-api.wordpress.com/rest/v1/sites/123/posts/456/replies/new?pretty=true',
            content='<a href="http://who">name</a>: foo bar',
            response='{}',
            status=200,
            **kwargs):
        self.expect_urlopen(url,
                            response,
                            data=urllib.parse.urlencode({'content': content}),
                            status=status,
                            **kwargs)
        self.mox.ReplayAll()

    def test_new(self):
        self.expect_urlopen(
            'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
            json_dumps({}))
        self.mox.ReplayAll()

        w = WordPress.new(self.handler, auth_entity=self.auth_entity)
        self.assertEquals(self.auth_entity.key, w.auth_entity)
        self.assertEquals('my.wp.com', w.key.id())
        self.assertEquals('Ryan', w.name)
        self.assertEquals(['http://my.wp.com/'], w.domain_urls)
        self.assertEquals(['my.wp.com'], w.domains)
        self.assertEquals('http://ava/tar', w.picture)

    def test_new_with_site_domain(self):
        self.expect_urlopen(
            'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
            json_dumps({
                'ID': 123,
                'URL': 'https://vanity.domain/'
            }))
        self.mox.ReplayAll()

        w = WordPress.new(self.handler, auth_entity=self.auth_entity)
        self.assertEquals('vanity.domain', w.key.id())
        self.assertEquals('https://vanity.domain/', w.url)
        self.assertEquals(['https://vanity.domain/', 'http://my.wp.com/'],
                          w.domain_urls)
        self.assertEquals(['vanity.domain', 'my.wp.com'], w.domains)

    def test_new_site_domain_same_gr_blog_url(self):
        self.expect_urlopen(
            'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
            json_dumps({
                'ID': 123,
                'URL': 'http://my.wp.com/'
            }))
        self.mox.ReplayAll()

        w = WordPress.new(self.handler, auth_entity=self.auth_entity)
        self.assertEquals(['http://my.wp.com/'], w.domain_urls)
        self.assertEquals(['my.wp.com'], w.domains)

    def test_site_lookup_fails(self):
        self.expect_urlopen(
            'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
            'my resp body',
            status=402)
        self.mox.ReplayAll()
        self.assertRaises(urllib_error_py2.HTTPError,
                          WordPress.new,
                          self.handler,
                          auth_entity=self.auth_entity)

    def test_site_lookup_api_disabled_error_start(self):
        self.expect_urlopen(
            'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
            '{"error": "unauthorized",'
            ' "message": "API calls to this blog have been disabled."}',
            status=403)
        self.mox.ReplayAll()

        self.assertIsNone(
            WordPress.new(self.handler, auth_entity=self.auth_entity))
        self.assertIsNone(WordPress.query().get())
        self.assertIn('enable the Jetpack JSON API',
                      next(iter(self.handler.messages)))

    def test_site_lookup_api_disabled_error_finish(self):
        self.expect_urlopen(
            'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
            '{"error": "unauthorized",'
            ' "message": "API calls to this blog have been disabled."}',
            status=403)
        self.mox.ReplayAll()

        handler = AddWordPress(self.request, self.response)
        handler.finish(self.auth_entity)
        self.assertIsNone(WordPress.query().get())
        self.assertIn('enable the Jetpack JSON API',
                      next(iter(handler.messages)))

    def test_create_comment_with_slug_lookup(self):
        self.expect_urlopen(
            'https://public-api.wordpress.com/rest/v1/sites/123/posts/'
            'slug:the-slug?pretty=true', json_dumps({'ID': 456}))
        self.expect_new_reply(response=json_dumps({'ID': 789, 'ok': 'sgtm'}))

        resp = self.wp.create_comment(
            'http://primary/post/123999/the-slug?asdf', 'name', 'http://who',
            'foo bar')
        # ID field gets converted to lower case id
        self.assertEquals({'id': 789, 'ok': 'sgtm'}, resp)

    def test_create_comment_with_unicode_chars(self):
        self.expect_new_reply(
            content='<a href="http://who">Degenève</a>: foo Degenève bar')

        resp = self.wp.create_comment('http://primary/post/456', 'Degenève',
                                      'http://who', 'foo Degenève bar')
        self.assertEquals({'id': None}, resp)

    def test_create_comment_with_unicode_chars_in_slug(self):
        self.expect_urlopen(
            'https://public-api.wordpress.com/rest/v1/sites/123/posts/slug:✁?pretty=true',
            json_dumps({'ID': 456}))
        self.expect_new_reply()

        resp = self.wp.create_comment('http://primary/post/✁', 'name',
                                      'http://who', 'foo bar')
        self.assertEquals({'id': None}, resp)

    def test_create_comment_gives_up_on_invalid_input_error(self):
        # see https://github.com/snarfed/bridgy/issues/161
        self.expect_new_reply(status=400,
                              response=json_dumps({'error': 'invalid_input'}))

        resp = self.wp.create_comment('http://primary/post/456', 'name',
                                      'http://who', 'foo bar')
        # shouldn't raise an exception
        self.assertEquals({'error': 'invalid_input'}, resp)

    def test_create_comment_gives_up_on_coments_closed(self):
        resp = {
            'error': 'unauthorized',
            'message': 'Comments on this post are closed'
        }
        self.expect_new_reply(status=403, response=json_dumps(resp))

        # shouldn't raise an exception
        got = self.wp.create_comment('http://primary/post/456', 'name',
                                     'http://who', 'foo bar')
        self.assertEquals(resp, got)

    def test_create_comment_returns_non_json(self):
        self.expect_new_reply(status=403, response='Forbidden')

        self.assertRaises(urllib_error_py2.HTTPError, self.wp.create_comment,
                          'http://primary/post/456', 'name', 'http://who',
                          'foo bar')
Beispiel #5
0
class WordPressTest(testutil.HandlerTest):

  def setUp(self):
    super(WordPressTest, self).setUp()
    self.auth_entity = WordPressAuth(id='my.wp.com',
                                     user_json=json.dumps({
                                       'display_name': 'Ryan',
                                       'username': '******',
                                       'avatar_URL': 'http://ava/tar'}),
                                     blog_id='123',
                                     blog_url='http://my.wp.com/',
                                     access_token_str='my token')
    self.auth_entity.put()
    self.wp = WordPress(id='my.wp.com',
                        auth_entity=self.auth_entity.key,
                        url='http://my.wp.com/',
                        domains=['my.wp.com'])

  def expect_new_reply(
      self,
      url='https://public-api.wordpress.com/rest/v1/sites/123/posts/456/replies/new?pretty=true',
      content='<a href="http://who">name</a>: foo bar',
      response='{}', status=200, **kwargs):
    self.expect_urlopen(
      url, response, data=urllib.parse.urlencode({'content': content}),
      status=status, **kwargs)
    self.mox.ReplayAll()

  def test_new(self):
    self.expect_urlopen(
      'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
      json.dumps({}))
    self.mox.ReplayAll()

    w = WordPress.new(self.handler, auth_entity=self.auth_entity)
    self.assertEquals(self.auth_entity.key, w.auth_entity)
    self.assertEquals('my.wp.com', w.key.id())
    self.assertEquals('Ryan', w.name)
    self.assertEquals(['http://my.wp.com/'], w.domain_urls)
    self.assertEquals(['my.wp.com'], w.domains)
    self.assertEquals('http://ava/tar', w.picture)

  def test_new_with_site_domain(self):
    self.expect_urlopen(
      'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
      json.dumps({'ID': 123, 'URL': 'https://vanity.domain/'}))
    self.mox.ReplayAll()

    w = WordPress.new(self.handler, auth_entity=self.auth_entity)
    self.assertEquals('vanity.domain', w.key.id())
    self.assertEquals('https://vanity.domain/', w.url)
    self.assertEquals(['https://vanity.domain/', 'http://my.wp.com/'],
                      w.domain_urls)
    self.assertEquals(['vanity.domain', 'my.wp.com'], w.domains)

  def test_new_site_domain_same_gr_blog_url(self):
    self.expect_urlopen(
      'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
      json.dumps({'ID': 123, 'URL': 'http://my.wp.com/'}))
    self.mox.ReplayAll()

    w = WordPress.new(self.handler, auth_entity=self.auth_entity)
    self.assertEquals(['http://my.wp.com/'], w.domain_urls)
    self.assertEquals(['my.wp.com'], w.domains)

  def test_site_lookup_fails(self):
    self.expect_urlopen(
      'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
      'my resp body', status=402)
    self.mox.ReplayAll()
    self.assertRaises(urllib2.HTTPError, WordPress.new, self.handler,
                      auth_entity=self.auth_entity)

  def test_site_lookup_api_disabled_error_start(self):
    self.expect_urlopen(
      'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
      '{"error": "unauthorized",'
      ' "message": "API calls to this blog have been disabled."}',
      status=403)
    self.mox.ReplayAll()

    self.assertIsNone(WordPress.new(self.handler, auth_entity=self.auth_entity))
    self.assertIsNone(WordPress.query().get())
    self.assertIn('enable the Jetpack JSON API', next(iter(self.handler.messages)))

  def test_site_lookup_api_disabled_error_finish(self):
    self.expect_urlopen(
      'https://public-api.wordpress.com/rest/v1/sites/123?pretty=true',
      '{"error": "unauthorized",'
      ' "message": "API calls to this blog have been disabled."}',
      status=403)
    self.mox.ReplayAll()

    handler = AddWordPress(self.request, self.response)
    handler.finish(self.auth_entity)
    self.assertIsNone(WordPress.query().get())
    self.assertIn('enable the Jetpack JSON API', next(iter(handler.messages)))

  def test_create_comment_with_slug_lookup(self):
    self.expect_urlopen(
      'https://public-api.wordpress.com/rest/v1/sites/123/posts/'
        'slug:the-slug?pretty=true',
      json.dumps({'ID': 456}))
    self.expect_new_reply(response=json.dumps({'ID': 789, 'ok': 'sgtm'}))

    resp = self.wp.create_comment('http://primary/post/123999/the-slug?asdf',
                                  'name', 'http://who', 'foo bar')
    # ID field gets converted to lower case id
    self.assertEquals({'id': 789, 'ok': 'sgtm'}, resp)

  def test_create_comment_with_unicode_chars(self):
    self.expect_new_reply(content='<a href="http://who">Degenève</a>: foo Degenève bar')

    resp = self.wp.create_comment('http://primary/post/456', 'Degenève',
                                  'http://who', 'foo Degenève bar')
    self.assertEquals({'id': None}, resp)

  def test_create_comment_with_unicode_chars_in_slug(self):
    self.expect_urlopen(
      'https://public-api.wordpress.com/rest/v1/sites/123/posts/slug:✁?pretty=true',
      json.dumps({'ID': 456}))
    self.expect_new_reply()

    resp = self.wp.create_comment('http://primary/post/✁', 'name',
                                  'http://who', 'foo bar')
    self.assertEquals({'id': None}, resp)

  def test_create_comment_gives_up_on_invalid_input_error(self):
    # see https://github.com/snarfed/bridgy/issues/161
    self.expect_new_reply(status=400,
                          response=json.dumps({'error': 'invalid_input'}))

    resp = self.wp.create_comment('http://primary/post/456', 'name',
                                  'http://who', 'foo bar')
    # shouldn't raise an exception
    self.assertEquals({'error': 'invalid_input'}, resp)

  def test_create_comment_gives_up_on_coments_closed(self):
    resp = {'error': 'unauthorized',
            'message': 'Comments on this post are closed'}
    self.expect_new_reply(status=403, response=json.dumps(resp))

    # shouldn't raise an exception
    got = self.wp.create_comment('http://primary/post/456', 'name',
                                 'http://who', 'foo bar')
    self.assertEquals(resp, got)

  def test_create_comment_returns_non_json(self):
    self.expect_new_reply(status=403, response='Forbidden')

    self.assertRaises(urllib2.HTTPError, self.wp.create_comment,
                      'http://primary/post/456', 'name', 'http://who', 'foo bar')
Beispiel #6
0
class WordPressTest(testutil.HandlerTest):
    def setUp(self):
        super(WordPressTest, self).setUp()
        self.auth_entity = WordPressAuth(
            id="my.wp.com",
            user_json=json.dumps({"display_name": "Ryan", "username": "******", "avatar_URL": "http://ava/tar"}),
            blog_id="123",
            blog_url="http://my.wp.com/",
            access_token_str="my token",
        )
        self.auth_entity.put()
        self.wp = WordPress(
            id="my.wp.com", auth_entity=self.auth_entity.key, url="http://my.wp.com/", domains=["my.wp.com"]
        )

    def expect_new_reply(
        self,
        url="https://public-api.wordpress.com/rest/v1/sites/123/posts/456/replies/new?pretty=true",
        content='<a href="http://who">name</a>: foo bar',
        response="{}",
        status=200,
        **kwargs
    ):
        self.expect_urlopen(url, response, data=urllib.urlencode({"content": content}), status=status, **kwargs)
        self.mox.ReplayAll()

    def test_new(self):
        self.expect_urlopen("https://public-api.wordpress.com/rest/v1/sites/123?pretty=true", json.dumps({}))
        self.mox.ReplayAll()

        w = WordPress.new(self.handler, auth_entity=self.auth_entity)
        self.assertEquals(self.auth_entity.key, w.auth_entity)
        self.assertEquals("my.wp.com", w.key.id())
        self.assertEquals("Ryan", w.name)
        self.assertEquals(["http://my.wp.com/"], w.domain_urls)
        self.assertEquals(["my.wp.com"], w.domains)
        self.assertEquals("http://ava/tar", w.picture)

    def test_new_with_site_domain(self):
        self.expect_urlopen(
            "https://public-api.wordpress.com/rest/v1/sites/123?pretty=true",
            json.dumps({"ID": 123, "URL": "https://vanity.domain/"}),
        )
        self.mox.ReplayAll()

        w = WordPress.new(self.handler, auth_entity=self.auth_entity)
        self.assertEquals("vanity.domain", w.key.id())
        self.assertEquals("https://vanity.domain/", w.url)
        self.assertEquals(["https://vanity.domain/", "http://my.wp.com/"], w.domain_urls)
        self.assertEquals(["vanity.domain", "my.wp.com"], w.domains)

    def test_new_site_domain_same_gr_blog_url(self):
        self.expect_urlopen(
            "https://public-api.wordpress.com/rest/v1/sites/123?pretty=true",
            json.dumps({"ID": 123, "URL": "http://my.wp.com/"}),
        )
        self.mox.ReplayAll()

        w = WordPress.new(self.handler, auth_entity=self.auth_entity)
        self.assertEquals(["http://my.wp.com/"], w.domain_urls)
        self.assertEquals(["my.wp.com"], w.domains)

    def test_site_lookup_fails(self):
        self.expect_urlopen(
            "https://public-api.wordpress.com/rest/v1/sites/123?pretty=true", "my resp body", status=402
        )
        self.mox.ReplayAll()
        self.assertRaises(urllib2.HTTPError, WordPress.new, self.handler, auth_entity=self.auth_entity)

    def test_site_lookup_api_disabled_error_start(self):
        self.expect_urlopen(
            "https://public-api.wordpress.com/rest/v1/sites/123?pretty=true",
            '{"error": "unauthorized",' ' "message": "API calls to this blog have been disabled."}',
            status=403,
        )
        self.mox.ReplayAll()

        self.assertIsNone(WordPress.new(self.handler, auth_entity=self.auth_entity))
        self.assertIsNone(WordPress.query().get())
        self.assertIn("enable the Jetpack JSON API", next(iter(self.handler.messages)))

    def test_site_lookup_api_disabled_error_finish(self):
        self.expect_urlopen(
            "https://public-api.wordpress.com/rest/v1/sites/123?pretty=true",
            '{"error": "unauthorized",' ' "message": "API calls to this blog have been disabled."}',
            status=403,
        )
        self.mox.ReplayAll()

        handler = AddWordPress(self.request, self.response)
        handler.finish(self.auth_entity)
        self.assertIsNone(WordPress.query().get())
        self.assertIn("enable the Jetpack JSON API", next(iter(handler.messages)))

    def test_create_comment_with_slug_lookup(self):
        self.expect_urlopen(
            "https://public-api.wordpress.com/rest/v1/sites/123/posts/" "slug:the-slug?pretty=true",
            json.dumps({"ID": 456}),
        )
        self.expect_new_reply(response=json.dumps({"ID": 789, "ok": "sgtm"}))

        resp = self.wp.create_comment("http://primary/post/123999/the-slug?asdf", "name", "http://who", "foo bar")
        # ID field gets converted to lower case id
        self.assertEquals({"id": 789, "ok": "sgtm"}, resp)

    def test_create_comment_with_unicode_chars(self):
        self.expect_new_reply(content='<a href="http://who">Degenève</a>: foo Degenève bar')

        resp = self.wp.create_comment("http://primary/post/456", u"Degenève", "http://who", u"foo Degenève bar")
        self.assertEquals({"id": None}, resp)

    def test_create_comment_with_unicode_chars_in_slug(self):
        self.expect_urlopen(
            u"https://public-api.wordpress.com/rest/v1/sites/123/posts/slug:✁?pretty=true", json.dumps({"ID": 456})
        )
        self.expect_new_reply()

        resp = self.wp.create_comment(u"http://primary/post/✁", "name", "http://who", "foo bar")
        self.assertEquals({"id": None}, resp)

    def test_create_comment_gives_up_on_invalid_input_error(self):
        # see https://github.com/snarfed/bridgy/issues/161
        self.expect_new_reply(status=400, response=json.dumps({"error": "invalid_input"}))

        resp = self.wp.create_comment("http://primary/post/456", "name", "http://who", "foo bar")
        # shouldn't raise an exception
        self.assertEquals({"error": "invalid_input"}, resp)

    def test_create_comment_gives_up_on_coments_closed(self):
        resp = {"error": "unauthorized", "message": "Comments on this post are closed"}
        self.expect_new_reply(status=403, response=json.dumps(resp))

        # shouldn't raise an exception
        got = self.wp.create_comment("http://primary/post/456", "name", "http://who", "foo bar")
        self.assertEquals(resp, got)

    def test_create_comment_returns_non_json(self):
        self.expect_new_reply(status=403, response="Forbidden")

        self.assertRaises(
            urllib2.HTTPError, self.wp.create_comment, "http://primary/post/456", "name", "http://who", "foo bar"
        )