|
1 | 1 | import pytest |
| 2 | +from django.utils import timezone |
2 | 3 |
|
3 | 4 | from audit.constants import ( |
4 | 5 | RELEASE_PIPELINE_CREATED_MESSAGE, |
5 | 6 | RELEASE_PIPELINE_DELETED_MESSAGE, |
6 | 7 | ) |
7 | 8 | from environments.models import Environment |
| 9 | +from features.models import EnvironmentFeatureVersion, Feature |
8 | 10 | from features.release_pipelines.core.exceptions import InvalidPipelineStateError |
9 | 11 | from features.release_pipelines.core.models import ( |
10 | 12 | PipelineStage, |
@@ -138,6 +140,28 @@ def test_release_pipeline_get_delete_log_message( |
138 | 140 | assert release_pipeline.get_delete_log_message(release_pipeline) == expected_message |
139 | 141 |
|
140 | 142 |
|
| 143 | +def test_release_pipeline_unpublish( |
| 144 | + release_pipeline: ReleasePipeline, admin_user: FFAdminUser |
| 145 | +) -> None: |
| 146 | + # Given - the pipeline is already published |
| 147 | + release_pipeline.publish(admin_user) |
| 148 | + |
| 149 | + # When |
| 150 | + release_pipeline.unpublish(admin_user) |
| 151 | + |
| 152 | + # Then |
| 153 | + assert release_pipeline.published_at is None |
| 154 | + assert release_pipeline.published_by is None |
| 155 | + |
| 156 | + |
| 157 | +def test_should_raise_error_when_unpublishing_unpublished_pipeline( |
| 158 | + release_pipeline: ReleasePipeline, admin_user: FFAdminUser |
| 159 | +) -> None: |
| 160 | + # When/ Then |
| 161 | + with pytest.raises(InvalidPipelineStateError, match="Pipeline is not published."): |
| 162 | + release_pipeline.unpublish(admin_user) |
| 163 | + |
| 164 | + |
141 | 165 | def test_clone_release_pipeline( |
142 | 166 | release_pipeline: ReleasePipeline, |
143 | 167 | environment: Environment, |
@@ -241,3 +265,31 @@ def test_clone_release_pipeline( |
241 | 265 |
|
242 | 266 | # source action still points to the original stage |
243 | 267 | assert source_action.stage == source_stage |
| 268 | + |
| 269 | + |
| 270 | +def test_release_pipeline_has_feature_in_flight( |
| 271 | + release_pipeline: ReleasePipeline, |
| 272 | + environment: Environment, |
| 273 | + pipeline_stage_enable_feature_on_enter: PipelineStage, |
| 274 | + admin_user: FFAdminUser, |
| 275 | + feature: Feature, |
| 276 | +) -> None: |
| 277 | + # Given an unpublished environment feature version |
| 278 | + feature = release_pipeline.project.features.first() |
| 279 | + environment_version = EnvironmentFeatureVersion.objects.create( |
| 280 | + feature=feature, |
| 281 | + environment=environment, |
| 282 | + pipeline_stage=pipeline_stage_enable_feature_on_enter, |
| 283 | + published_at=None, |
| 284 | + ) |
| 285 | + |
| 286 | + # Then |
| 287 | + assert release_pipeline.has_feature_in_flight() is True |
| 288 | + |
| 289 | + # Next, publish the environment feature version |
| 290 | + environment_version.published_at = timezone.now() |
| 291 | + environment_version.published_by = admin_user |
| 292 | + environment_version.save() |
| 293 | + |
| 294 | + # Then |
| 295 | + assert release_pipeline.has_feature_in_flight() is False |
0 commit comments