Skip to content

Commit 54f8148

Browse files
Store publish date (jsocol#150)
* Store publish date * PR review
1 parent d9d6a7a commit 54f8148

File tree

14 files changed

+88
-8
lines changed

14 files changed

+88
-8
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""Add published_at in UseCaseVersion
2+
3+
Revision ID: 7aa804ae672a
4+
Revises: 8deee2aef34b
5+
Create Date: 2022-05-31 15:20:15.856959
6+
7+
"""
8+
import sqlalchemy as sa
9+
10+
from alembic import op
11+
12+
revision = "7aa804ae672a"
13+
down_revision = "8deee2aef34b"
14+
branch_labels = None
15+
depends_on = None
16+
17+
18+
def upgrade():
19+
op.add_column(
20+
"use_case_versions",
21+
sa.Column("published_at", sa.DateTime, nullable=True),
22+
)
23+
24+
op.execute(
25+
"""
26+
update use_case_versions set published_at = created_at
27+
where use_case_versions.id in (
28+
select production_version_id from use_cases where production_version_id is not null
29+
);
30+
"""
31+
)
32+
33+
34+
def downgrade():
35+
op.drop_column("use_case_versions", "published_at")

tests/api/namespace/use_case/test_create_flow.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,11 @@ def test_create_flow_with_existing_flow(
125125
is_production_version,
126126
):
127127
use_case = UseCaseFactory()
128-
created_at = datetime.utcnow()
128+
published_at = datetime.utcnow()
129129
UseCaseVersionFactory(
130130
use_case=use_case,
131131
is_production_version=is_production_version,
132-
created_at=created_at,
132+
published_at=published_at,
133133
)
134134
response = client.post(
135135
f"/use_cases/{use_case.uuid}/flows", json=reference_flow, params=params
@@ -146,7 +146,7 @@ def test_create_flow_with_existing_flow(
146146
assert response.json() == {
147147
"meta": {
148148
"has_pending_changes": True,
149-
"last_published_date": common.add_utc_tz(created_at)
149+
"last_published_date": common.add_utc_tz(published_at)
150150
if is_production_version
151151
else None,
152152
"latest_version_date": common.add_utc_tz(latest_version.created_at),

tests/api/namespace/use_case/test_publish_use_case.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
# pylint: disable=redefined-outer-name
2+
import datetime as dt
3+
24
import pytest
35

46
from tests.api.namespace.use_case import common
57
from tests.factories.use_case_factory import UseCaseFactory
8+
from tests.factories.use_case_version_factory import UseCaseVersionFactory
69
from tests.fixtures.valid_flow_json import * # noqa: F401, F403, pylint: disable=wildcard-import,unused-wildcard-import
710
from use_case_executor.domain.flow.schema_version import SchemaVersion
811

@@ -84,7 +87,7 @@ def test_publish_use_case_sets_latest_flow_as_production(
8487
assert response.json() == {
8588
"meta": {
8689
"has_pending_changes": False,
87-
"last_published_date": common.add_utc_tz(published_version.created_at),
90+
"last_published_date": common.add_utc_tz(published_version.published_at),
8891
"latest_version_date": common.add_utc_tz(published_version.created_at),
8992
},
9093
"data": common.make_flow_variant(
@@ -94,3 +97,27 @@ def test_publish_use_case_sets_latest_flow_as_production(
9497

9598
session.expire_all()
9699
assert use_case.production_version_id == versions[-1].id
100+
101+
102+
def test_publish_use_case_updates_published_at_even_if_the_use_case_is_already_published(
103+
non_debug_client,
104+
use_case,
105+
session,
106+
params,
107+
):
108+
initial_published_at = dt.datetime.utcnow()
109+
UseCaseVersionFactory(
110+
use_case=use_case, published_at=initial_published_at, is_production_version=True
111+
)
112+
assert initial_published_at == use_case.production_version.published_at
113+
114+
response = non_debug_client.post(
115+
f"/use_cases/{use_case.uuid}/flows/latest/publish", params=params
116+
)
117+
118+
assert response.status_code == 200
119+
published_at = response.json()["meta"]["last_published_date"]
120+
assert published_at != initial_published_at
121+
122+
session.expire_all()
123+
assert published_at == common.add_utc_tz(use_case.production_version.published_at)

tests/api/namespace/use_case/test_read_flow.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def test_get_latest_flow_returns_latest_flow(
116116
"meta": {
117117
"has_pending_changes": production_version_index != len(versions) - 1,
118118
"last_published_date": common.add_utc_tz(
119-
versions[production_version_index].created_at
119+
versions[production_version_index].published_at
120120
)
121121
if production_version_index is not None
122122
else None,
@@ -160,7 +160,7 @@ def test_get_production_flow_returns_production_flow(
160160
"meta": {
161161
"has_pending_changes": production_version_index != len(versions) - 1,
162162
"last_published_date": common.add_utc_tz(
163-
versions[production_version_index].created_at
163+
versions[production_version_index].published_at
164164
)
165165
if production_version_index is not None
166166
else None,

tests/api/namespace/use_case/test_reset_production_state.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def test_production_version_is_republished(
134134
assert response.json() == {
135135
"meta": {
136136
"has_pending_changes": False,
137-
"last_published_date": common.add_utc_tz(new_version.created_at),
137+
"last_published_date": common.add_utc_tz(new_version.published_at),
138138
"latest_version_date": common.add_utc_tz(new_version.created_at),
139139
},
140140
"data": common.make_flow_variant(

tests/domain/execute_use_case_and_send_answer/test_incoming_message_returns_a_fallback_message.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ def test_user_event_sender_exceptions_results_in_fallback_message_being_sent(
141141
use_case_uuid=use_case.uuid,
142142
created_at=dt.datetime.utcnow(),
143143
flow=flow,
144+
published_at=None,
144145
),
145146
)
146147
mock_repository.set_are_all_variables_declared_on_instance_return_value(

tests/domain/execute_use_case_and_send_answer/test_position.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ def test_position_is_passed_to_execute_flow_from_position( # pylint: disable=to
8888
use_case_uuid=use_case.uuid,
8989
created_at=dt.datetime.utcnow(),
9090
flow=flow,
91+
published_at=None,
9192
),
9293
)
9394
mock_repository.set_are_all_variables_declared_on_instance_return_value(
@@ -173,6 +174,7 @@ def test_next_position_is_saved_in_the_repository( # pylint: disable=too-many-a
173174
use_case_uuid=use_case.uuid,
174175
created_at=dt.datetime.utcnow(),
175176
flow=flow,
177+
published_at=None,
176178
),
177179
)
178180
mock_repository.set_are_all_variables_declared_on_instance_return_value(

tests/domain/execute_use_case_and_send_answer/test_production_vs_latest.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def test_flow_returns_answer_text_in_the_content_language(
4040
use_case_uuid=use_case.uuid,
4141
created_at=dt.datetime.utcnow(),
4242
flow=flow,
43+
published_at=None,
4344
),
4445
)
4546
else:
@@ -57,6 +58,7 @@ def test_flow_returns_answer_text_in_the_content_language(
5758
use_case_uuid=use_case.uuid,
5859
created_at=dt.datetime.utcnow(),
5960
flow=flow,
61+
published_at=dt.datetime.utcnow(),
6062
),
6163
)
6264
mock_repository.set_are_all_variables_declared_on_instance_return_value(

tests/domain/execute_use_case_and_send_answer/test_variables_validation.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ def test_unknown_variable_in_user_input_node_raises_invalid_flow_configuration_e
9999
use_case_uuid=use_case.uuid,
100100
created_at=dt.datetime.utcnow(),
101101
flow=flow,
102+
published_at=None,
102103
),
103104
)
104105
mock_repository.set_are_all_variables_declared_on_instance_return_value(
@@ -178,6 +179,7 @@ def test_unknown_variable_in_variable_text_piece_data_raises_invalid_flow_config
178179
use_case_uuid=use_case.uuid,
179180
created_at=dt.datetime.utcnow(),
180181
flow=flow,
182+
published_at=None,
181183
),
182184
)
183185
mock_repository.set_are_all_variables_declared_on_instance_return_value(
@@ -281,6 +283,7 @@ def test_unknown_variable_in_variable_text_piece_data_in_create_ticket_raises_in
281283
use_case_uuid=use_case.uuid,
282284
created_at=dt.datetime.utcnow(),
283285
flow=flow,
286+
published_at=None,
284287
),
285288
)
286289
mock_repository.set_are_all_variables_declared_on_instance_return_value(
@@ -377,6 +380,7 @@ def test_unknown_variable_in_variable_text_piece_data_in_create_ticket_success_r
377380
use_case_uuid=use_case.uuid,
378381
created_at=dt.datetime.utcnow(),
379382
flow=flow,
383+
published_at=None,
380384
),
381385
)
382386
mock_repository.set_are_all_variables_declared_on_instance_return_value(

tests/factories/use_case_version_factory.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,15 @@ class Meta:
2424
created_at = factory.LazyFunction(dt.datetime.utcnow)
2525
use_case = factory.SubFactory(UseCaseFactory)
2626
flow = factory.LazyFunction(make_flow)
27+
published_at = None
2728

2829
@factory.post_generation
2930
def is_production_version(self, create, extracted, **kwargs):
3031
if not extracted:
3132
return
3233

34+
if self.published_at is None:
35+
self.published_at = dt.datetime.utcnow()
3336
self.use_case.production_version = self
3437
if create:
3538
common.test_session.commit()

0 commit comments

Comments
 (0)