This repository has been archived by the owner on May 1, 2023. It is now read-only.
generated from cds-snc/project-template
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add template scan trigger model (#99)
* feat: add template scan trigger model * fix: change data to callback
- Loading branch information
1 parent
4d8c7fe
commit 8c3f020
Showing
10 changed files
with
161 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
api/db_migrations/versions/db98eafe1333_create_template_scan_triggers_table.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
"""create template scan triggers table | ||
Revision ID: db98eafe1333 | ||
Revises: e6ec4f01db2f | ||
Create Date: 2021-08-24 17:21:59.537651 | ||
""" | ||
from alembic import op | ||
import sqlalchemy as sa | ||
from sqlalchemy.dialects import postgresql | ||
|
||
# revision identifiers, used by Alembic. | ||
revision = "db98eafe1333" | ||
down_revision = "e6ec4f01db2f" | ||
branch_labels = None | ||
depends_on = None | ||
|
||
|
||
def upgrade(): | ||
op.create_table( | ||
"template_scan_triggers", | ||
sa.Column("id", postgresql.UUID(as_uuid=True), primary_key=True), | ||
sa.Column("template_scan_id", postgresql.UUID(as_uuid=True), nullable=False), | ||
sa.Column("callback", postgresql.JSONB(), nullable=False), | ||
sa.Column("created_at", sa.DateTime, default=sa.func.utc_timestamp()), | ||
sa.Column("updated_at", sa.DateTime, onupdate=sa.func.utc_timestamp()), | ||
sa.ForeignKeyConstraint( | ||
["template_scan_id"], | ||
["template_scans.id"], | ||
), | ||
) | ||
|
||
|
||
def downgrade(): | ||
op.drop_table("template_scan_triggers") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import datetime | ||
import uuid | ||
|
||
from sqlalchemy import DateTime, Column, ForeignKey | ||
from sqlalchemy.dialects.postgresql import JSONB, UUID | ||
from sqlalchemy.orm import relationship, validates | ||
|
||
from models import Base | ||
from models.TemplateScan import TemplateScan | ||
|
||
|
||
class TemplateScanTrigger(Base): | ||
__tablename__ = "template_scan_triggers" | ||
|
||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) | ||
callback = Column(JSONB, nullable=False) | ||
created_at = Column( | ||
DateTime, | ||
index=False, | ||
unique=False, | ||
nullable=False, | ||
default=datetime.datetime.utcnow, | ||
) | ||
updated_at = Column( | ||
DateTime, | ||
index=False, | ||
unique=False, | ||
nullable=True, | ||
onupdate=datetime.datetime.utcnow, | ||
) | ||
template_scan_id = Column( | ||
UUID(as_uuid=True), ForeignKey(TemplateScan.id), index=True, nullable=False | ||
) | ||
template_scan = relationship( | ||
"TemplateScan", back_populates="template_scan_triggers" | ||
) | ||
|
||
@validates("callback") | ||
def validate_callback(self, _key, value): | ||
assert value != "" | ||
return value |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
import pytest | ||
|
||
from sqlalchemy.exc import IntegrityError | ||
|
||
from models.TemplateScanTrigger import TemplateScanTrigger | ||
|
||
|
||
def test_template_scan_trigger_belongs_to_an_template_scan( | ||
template_scan_fixture, session | ||
): | ||
template_scan_trigger = TemplateScanTrigger( | ||
callback={"jsonb": "data"}, | ||
template_scan=template_scan_fixture, | ||
) | ||
session.add(template_scan_trigger) | ||
session.commit() | ||
assert ( | ||
template_scan_fixture.template_scan_triggers[0].id == template_scan_trigger.id | ||
) | ||
session.delete(template_scan_trigger) | ||
session.commit() | ||
|
||
|
||
def test_template_scan_trigger_model(template_scan_fixture): | ||
template_scan_trigger = TemplateScanTrigger( | ||
callback={"jsonb": "data"}, | ||
template_scan=template_scan_fixture, | ||
) | ||
assert template_scan_trigger.callback == {"jsonb": "data"} | ||
assert template_scan_trigger.template_scan is not None | ||
|
||
|
||
def test_template_scan_trigger_model_saved( | ||
assert_new_model_saved, template_scan_fixture, session | ||
): | ||
template_scan_trigger = TemplateScanTrigger( | ||
callback={"jsonb": "data"}, | ||
template_scan=template_scan_fixture, | ||
) | ||
session.add(template_scan_trigger) | ||
session.commit() | ||
assert template_scan_trigger.callback == {"jsonb": "data"} | ||
assert_new_model_saved(template_scan_trigger) | ||
session.delete(template_scan_trigger) | ||
session.commit() | ||
|
||
|
||
def test_template_scan_trigger_empty_data_fails(template_scan_fixture, session): | ||
template_scan_trigger = TemplateScanTrigger( | ||
template_scan=template_scan_fixture, | ||
) | ||
session.add(template_scan_trigger) | ||
with pytest.raises(IntegrityError): | ||
session.commit() | ||
session.rollback() | ||
|
||
|
||
def test_template_scan_trigger_empty_template_scan_fails(session): | ||
template_scan_trigger = TemplateScanTrigger( | ||
callback={"jsonb": "data"}, | ||
) | ||
session.add(template_scan_trigger) | ||
with pytest.raises(IntegrityError): | ||
session.commit() | ||
session.rollback() |