Skip to content

Commit

Permalink
Merge pull request #13 from cloudblue/LITE-27892-create-ppr-version-m…
Browse files Browse the repository at this point in the history
…odel

LITE-27892 Create ppr version model
  • Loading branch information
d3rky authored Jul 11, 2023
2 parents 884aae7 + 38c6c33 commit 1e29f60
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 0 deletions.
7 changes: 7 additions & 0 deletions connect_ext_ppr/models/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,10 @@ class ConfigurationStateChoices(str, enum.Enum):
ACTIVE = 'active'
INACTIVE = 'inactive'
DELETED = 'deleted'


class PPRStatusChoices(str, enum.Enum):
PENDING = 'pending'
PROCESSING = 'processing'
READY = 'ready'
FAILED = 'failed'
44 changes: 44 additions & 0 deletions connect_ext_ppr/models/ppr.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from datetime import datetime

import sqlalchemy as db
from sqlalchemy.sql import desc, select

from connect_ext_ppr.db import Model
from connect_ext_ppr.models.configuration import Configuration
from connect_ext_ppr.models.deployment import Deployment
from connect_ext_ppr.models.enums import PPRStatusChoices
from connect_ext_ppr.models.file import File


def make_version(context):
dep_id = context.get_current_parameters()['deployment']
stm = (
select([PPRVersion.version])
.where(PPRVersion.deployment == dep_id)
.order_by(desc(PPRVersion.version))
.limit(1)
.with_for_update()
)
result = context.connection.execute(stm).scalar() or 0
result += 1
return result


class PPRVersion(Model):
__tablename__ = 'ppr_version'

PREFIX = 'PPRFL'

id = db.Column(db.String(20), primary_key=True)
file = db.Column(db.ForeignKey(File.id))
deployment = db.Column(db.ForeignKey(Deployment.id))
configuration = db.Column(db.ForeignKey(Configuration.id), nullable=True)
version = db.Column(db.Integer, default=make_version)
description = db.Column(db.Text)
summary = db.Column(db.JSON)
status = db.Column(
db.Enum(PPRStatusChoices, validate_strings=True),
default=PPRStatusChoices.PENDING,
)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
created_by = db.Column(db.String(20))
21 changes: 21 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,27 @@ def deployment(dbsession):
return dep


@pytest.fixture
def deployment_factory():
def _build_deployment(
dbsession,
product_id='PRD-XXX-XXX-XXX',
account_id='PA-000-000',
vendor_id='VA-000-000',
hub_id='HB-0000-0000',
):
dep = Deployment(
product_id=product_id,
account_id=account_id,
vendor_id=vendor_id,
hub_id=hub_id,
)
dbsession.set_verbose(dep)
dbsession.commit()
return dep
return _build_deployment


@pytest.fixture
def file(dbsession, media_response):
file = File(
Expand Down
49 changes: 49 additions & 0 deletions tests/models.py/test_ppr.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import pytest

from connect_ext_ppr.models.ppr import PPRVersion


@pytest.mark.parametrize(
'status',
PPRVersion.status.type.python_type,
)
def test_create_ppr(dbsession, file, deployment, status):

ppr = PPRVersion(
file=file.id,
deployment=deployment.id,
summary={},
description='Some',
created_by='SU-295-689-628',
status=status,
)

dbsession.set_verbose(ppr)
dbsession.commit()
dbsession.refresh(ppr)
assert ppr.status == status
assert ppr.version == 1
assert ppr.id.startswith(PPRVersion.PREFIX)


def test_multiple_versions(dbsession, file, deployment_factory):
dep_1 = deployment_factory(dbsession, product_id='PRD-111-222-333')
dep_2 = deployment_factory(dbsession, product_id='PRD-111-222-444')

for version in range(1, 4):
for dep in (dep_1, dep_2):
ppr = PPRVersion(
file=file.id,
deployment=dep.id,
summary={},
description='Some',
created_by='SU-295-689-628',
)

dbsession.set_verbose(ppr)
dbsession.commit()
dbsession.refresh(ppr)
assert ppr.status == 'pending'
assert ppr.version == version
assert ppr.id.startswith(PPRVersion.PREFIX)

0 comments on commit 1e29f60

Please sign in to comment.