예제 #1
0
 def test_mismatched_versions(self, mock_log):
     """Assert when libraries.io and Anitya disagree on version, it's logged"""
     project = Project(
         name="ImageMetaTag",
         homepage="https://pypi.org/project/ImageMetaTag/",
         ecosystem_name="pypi",
         backend="PyPI",
     )
     self.session.add(project)
     self.session.commit()
     event = sseclient.Event(
         data="{"
         '"name": "ImageMetaTag",'
         '"platform": "PyPi",'
         '"version": "0.6.11",'
         '"package_manager_url": "https://pypi.org/project/ImageMetaTag/"'
         "}"
     )
     self.client.process_message(event)
     project = self.session.query(Project).first()
     self.assertEqual("0.6.9", project.latest_version)
     self.assertIn(
         "libraries.io has found an update (version 0.6.11) for project ImageMetaTag",
         mock_log.info.call_args_list[0][0][0],
     )
예제 #2
0
    def test_existing_project(self):
        """Assert that a libraries.io event about an existing project updates that project"""
        project = Project(
            name="ImageMetaTag",
            homepage="https://pypi.org/project/ImageMetaTag/",
            ecosystem_name="pypi",
            backend="PyPI",
        )
        self.session.add(project)
        self.session.commit()
        event = sseclient.Event(
            data="{"
            '"name": "ImageMetaTag",'
            '"platform": "PyPi",'
            '"version": "0.6.9",'
            '"package_manager_url": "https://pypi.org/project/ImageMetaTag/"'
            "}"
        )

        self.assertEqual(1, self.session.query(Project).count())
        self.client.process_message(event)
        self.assertEqual(1, self.session.query(Project).count())
        project = self.session.query(Project).first()
        self.assertEqual("ImageMetaTag", project.name)
        self.assertEqual("pypi", project.ecosystem_name)
        self.assertEqual("0.6.9", project.latest_version)
예제 #3
0
    def test_existing_project_check_failure(self, mock_check):
        """Assert that when an existing project fails a version check nothing happens"""
        mock_check.side_effect = AnityaPluginException()
        project = Project(
            name="ImageMetaTag",
            homepage="https://pypi.python.org/pypi/ImageMetaTag",
            ecosystem_name="pypi",
            backend="PyPI",
        )
        self.session.add(project)
        self.session.commit()
        event = sseclient.Event(
            data="{"
            '"name": "ImageMetaTag",'
            '"platform": "PyPi",'
            '"version": "0.6.9",'
            '"package_manager_url": "https://pypi.org/project/ImageMetaTag/"'
            "}"
        )

        self.assertEqual(1, self.session.query(Project).count())
        self.client.process_message(event)
        self.assertEqual(1, self.session.query(Project).count())
        project = self.session.query(Project).first()
        self.assertIs(project.latest_version, None)
예제 #4
0
    def test_invalid_json(self, mock_log):
        """Assert that log message is logged when invalid json is received."""
        event = sseclient.Event(data="Invalid JSON")

        self.client.process_message(event)

        self.assertIn(
            "Dropping librariesio update message. Invalid json 'Invalid JSON'.",
            mock_log.warning.call_args_list[0][0][0],
        )
예제 #5
0
파일: events.py 프로젝트: yougov/vr.server
    def __next__(self):
        def is_message(msg):
            return msg['type'] == 'message'

        messages = filter(is_message, self.pubsub.listen())
        msg = next(messages)
        data = msg['data'].decode('utf-8')
        if data == 'flush':
            return ':\n'

        ev = sseclient.Event(data=data, retry=1000)
        return ev.dump()
예제 #6
0
    def test_new_project_configured_off(self):
        """libraries.io events shouldn't create projects if the configuration is off."""
        event = sseclient.Event(data="{"
                                '"name": "test",'
                                '"platform": "PyPi",'
                                '"version": "1.0",'
                                '"package_manager_url": "https://homepage.net"'
                                "}")

        with mock.patch.object(self.client, "whitelist", []):
            self.client.process_message(event)
        self.assertEqual(0, self.session.query(Project).count())
예제 #7
0
    def test_unknown_ecosystem(self, mock_log):
        """Assert that log message is logged when unknown ecosystem is received."""
        event = sseclient.Event(data="{"
                                '"name": "test",'
                                '"platform": "unknown",'
                                '"version": "1.0",'
                                '"package_manager_url": "https://homepage.net"'
                                "}")
        self.client.process_message(event)

        self.assertIn(
            "Dropped librariesio update to 1.0 for test (https://homepage.net) since"
            " it is on the unsupported unknown platform",
            mock_log.debug.call_args_list[0][0][0],
        )
예제 #8
0
    def test_new_project_configured_on(self):
        """Assert that a libraries.io event about an unknown project creates that project"""
        event = sseclient.Event(
            data="{"
            '"name": "ImageMetaTag",'
            '"platform": "PyPi",'
            '"version": "0.6.9",'
            '"package_manager_url": "https://pypi.org/project/ImageMetaTag/"'
            "}"
        )

        with mock.patch.object(self.client, "whitelist", ["pypi"]):
            self.client.process_message(event)
        self.assertEqual(1, self.session.query(Project).count())
        project = self.session.query(Project).first()
        self.assertEqual("ImageMetaTag", project.name)
        self.assertEqual("pypi", project.ecosystem_name)
        self.assertEqual("0.6.9", project.latest_version)
예제 #9
0
    def test_new_project_failure(self, mock_create, mock_log):
        """Assert failures to create projects are logged as errors."""
        mock_create.side_effect = AnityaException("boop")
        event = sseclient.Event(
            data="{"
            '"name": "ImageMetaTag",'
            '"platform": "PyPi",'
            '"version": "0.6.9",'
            '"package_manager_url": "https://pypi.org/project/ImageMetaTag/"'
            "}")

        with mock.patch.object(self.client, "whitelist", ["pypi"]):
            self.client.process_message(event)
        self.assertEqual(0, self.session.query(Project).count())
        self.assertIn(
            "A new project was discovered via libraries.io, ImageMetaTag,"
            ' but we failed with "boop"',
            mock_log.error.call_args_list[0][0][0],
        )
예제 #10
0
 def next(self):
     # Remove the trailing newline from the data
     data = super(SSETailer, self).next()[:-1]
     e = sseclient.Event(data=data)
     return e.dump()