Example #1
0
    def test(self):
        with pytest.raises(Release.DoesNotExist):
            # no releases exist period
            environment = None
            get_latest_release([self.project], environment)

        old = Release.objects.create(
            organization_id=self.project.organization_id,
            version='old'
        )
        old.add_project(self.project)

        new_date = old.date_added + timedelta(minutes=1)
        new = Release.objects.create(
            version='new-but-in-environment',
            organization_id=self.project.organization_id,
            date_released=new_date,
        )
        new.add_project(self.project)
        ReleaseEnvironment.get_or_create(
            project=self.project,
            release=new,
            environment=self.environment,
            datetime=new_date,
        )
        ReleaseProjectEnvironment.get_or_create(
            project=self.project,
            release=new,
            environment=self.environment,
            datetime=new_date,
        )

        newest = Release.objects.create(
            version='newest-overall',
            organization_id=self.project.organization_id,
            date_released=old.date_added + timedelta(minutes=5),
        )
        newest.add_project(self.project)

        # latest overall (no environment filter)
        environment = None
        result = get_latest_release([self.project], environment)
        assert result == newest.version

        # latest in environment
        environment = self.environment
        result = get_latest_release([self.project], [environment])
        assert result == new.version

        with pytest.raises(Release.DoesNotExist):
            # environment with no releases
            environment = self.create_environment()
            result = get_latest_release([self.project], [environment])
            assert result == new.version
Example #2
0
    def test(self):
        with pytest.raises(Release.DoesNotExist):
            # no releases exist period
            environment = None
            get_latest_release([self.project], environment)

        old = Release.objects.create(
            organization_id=self.project.organization_id, version="old")
        old.add_project(self.project)

        new_date = old.date_added + timedelta(minutes=1)
        new = Release.objects.create(
            version="new-but-in-environment",
            organization_id=self.project.organization_id,
            date_released=new_date,
        )
        new.add_project(self.project)
        ReleaseEnvironment.get_or_create(project=self.project,
                                         release=new,
                                         environment=self.environment,
                                         datetime=new_date)
        ReleaseProjectEnvironment.get_or_create(project=self.project,
                                                release=new,
                                                environment=self.environment,
                                                datetime=new_date)

        newest = Release.objects.create(
            version="newest-overall",
            organization_id=self.project.organization_id,
            date_released=old.date_added + timedelta(minutes=5),
        )
        newest.add_project(self.project)

        # latest overall (no environment filter)
        environment = None
        result = get_latest_release([self.project], environment)
        assert result == newest.version

        # latest in environment
        environment = self.environment
        result = get_latest_release([self.project], [environment])
        assert result == new.version

        assert get_latest_release([self.project.id], [environment]) == ""
        assert (get_latest_release(
            [self.project.id], [environment],
            self.project.organization_id) == new.version)

        # Verify that not passing an environment correctly gets the latest one
        assert get_latest_release([self.project], None) == newest.version
        assert get_latest_release([self.project], []) == newest.version

        with pytest.raises(Release.DoesNotExist):
            # environment with no releases
            environment = self.create_environment()
            result = get_latest_release([self.project], [environment])
            assert result == new.version
Example #3
0
    def test_semver(self):
        project_2 = self.create_project()
        release_1 = self.create_release(version="[email protected]")
        self.create_release(version="[email protected]")
        self.create_release(version="[email protected]")

        # Check when we're using a single project that we sort by semver
        assert get_latest_release([self.project], None) == [release_1.version]
        assert get_latest_release([project_2, self.project],
                                  None) == [release_1.version]
        release_4 = self.create_release(project_2, version="[email protected]")
        assert get_latest_release([project_2, self.project], None) == [
            release_4.version,
            release_1.version,
        ]
Example #4
0
 def get_latest_release(self, event: Event) -> Release | None:
     environment_id = None if self.rule is None else self.rule.environment_id
     cache_key = get_project_release_cache_key(event.group.project_id,
                                               environment_id)
     latest_release = cache.get(cache_key)
     if latest_release is None:
         organization_id = event.group.project.organization_id
         environments = None
         if environment_id:
             environments = [Environment.objects.get(id=environment_id)]
         try:
             latest_release_versions = get_latest_release(
                 [event.group.project],
                 environments,
                 organization_id,
             )
         except Release.DoesNotExist:
             return None
         latest_releases = list(
             Release.objects.filter(version=latest_release_versions[0],
                                    organization_id=organization_id))
         if latest_releases:
             cache.set(cache_key, latest_releases[0], 600)
             return latest_releases[0]
         else:
             cache.set(cache_key, False, 600)
     return latest_release
Example #5
0
 def test_multiple_projects_mixed_versions(self):
     project_2 = self.create_project()
     release_1 = self.create_release(version="[email protected]")
     self.create_release(project_2, version="not_semver")
     release_2 = self.create_release(project_2, version="not_semver_2")
     self.create_release(version="[email protected]")
     assert get_latest_release([project_2, self.project], None) == [
         release_2.version,
         release_1.version,
     ]
Example #6
0
    def test(self):
        with pytest.raises(Release.DoesNotExist):
            # no releases exist period
            environment = None
            get_latest_release([self.project], environment)

        old = self.create_release(version="old")
        new_date = old.date_added + timedelta(minutes=1)
        new = self.create_release(
            version="new-but-in-environment",
            environments=[self.environment],
            date_released=new_date,
        )
        newest = self.create_release(version="newest-overall",
                                     date_released=old.date_added +
                                     timedelta(minutes=5))

        # latest overall (no environment filter)
        environment = None
        result = get_latest_release([self.project], environment)
        assert result == [newest.version]

        # latest in environment
        environment = self.environment
        result = get_latest_release([self.project], [environment])
        assert result == [new.version]

        assert get_latest_release([self.project.id], [environment]) == []
        assert get_latest_release(
            [self.project.id], [environment],
            self.project.organization_id) == [new.version]

        # Verify that not passing an environment correctly gets the latest one
        assert get_latest_release([self.project], None) == [newest.version]
        assert get_latest_release([self.project], []) == [newest.version]

        with pytest.raises(Release.DoesNotExist):
            # environment with no releases
            new_environment = self.create_environment()
            get_latest_release([self.project], [new_environment])

        project_2 = self.create_project()
        other_project_env_release = self.create_release(
            project_2,
            version="other_project_env",
            environments=[self.environment])
        other_project_release = self.create_release(project_2,
                                                    version="other_project")
        assert get_latest_release([project_2],
                                  None) == [other_project_release.version]
        assert get_latest_release(
            [project_2], [environment]) == [other_project_env_release.version]
        assert get_latest_release([self.project, project_2], None) == [
            newest.version,
            other_project_release.version,
        ]
        assert get_latest_release([self.project, project_2],
                                  [environment]) == [
                                      new.version,
                                      other_project_env_release.version,
                                  ]