Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TO MAIN] DESENG-511 - Survey Translation model and API #2410

Merged
merged 8 commits into from
Mar 8, 2024
Prev Previous commit
Next Next commit
DESENG-511: Fixing lint
ratheesh-aot committed Mar 7, 2024
commit e0542f56426ac34a52e872a5d088232f07fee3d3
2 changes: 1 addition & 1 deletion met-api/src/met_api/models/__init__.py
Original file line number Diff line number Diff line change
@@ -59,4 +59,4 @@
from .poll_answers import PollAnswer
from .poll_responses import PollResponse
from .language import Language
from .survey_translation import SurveyTranslation
from .survey_translation import SurveyTranslation
6 changes: 4 additions & 2 deletions met-api/src/met_api/models/survey_translation.py
Original file line number Diff line number Diff line change
@@ -4,10 +4,12 @@
"""

from __future__ import annotations
from .base_model import BaseModel

from sqlalchemy import UniqueConstraint
from sqlalchemy.dialects import postgresql

from .base_model import BaseModel
from .db import db
from sqlalchemy import UniqueConstraint


class SurveyTranslation(BaseModel):
10 changes: 5 additions & 5 deletions met-api/src/met_api/resources/survey_translation.py
Original file line number Diff line number Diff line change
@@ -5,19 +5,18 @@

from http import HTTPStatus

from flask import jsonify, request
from flask import request
from flask_cors import cross_origin
from flask_restx import Namespace, Resource
from marshmallow import ValidationError

from met_api.auth import jwt as _jwt
from met_api.exceptions.business_exception import BusinessException
from met_api.schemas import utils as schema_utils
from met_api.schemas.survey_translation_schema import SurveyTranslationSchema
from met_api.services.survey_translation_service import (
SurveyTranslationService,
)
from met_api.services.survey_translation_service import SurveyTranslationService
from met_api.utils.util import allowedorigins, cors_preflight
from met_api.exceptions.business_exception import BusinessException


API = Namespace(
'survey_translations',
@@ -32,6 +31,7 @@ class SurveyTranslationResource(Resource):

@staticmethod
@cross_origin(origins=allowedorigins())
# pylint: disable=unused-argument
def get(survey_id, survey_translation_id):
"""Fetch a survey translation by id."""
try:
7 changes: 5 additions & 2 deletions met-api/src/met_api/schemas/survey_translation_schema.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
# survey_translation_schema.py
"""SurveyTranslation schema."""

from marshmallow import fields, Schema
from marshmallow import fields
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema

from met_api.models.survey_translation import SurveyTranslation


class SurveyTranslationSchema(SQLAlchemyAutoSchema):
"""Schema for SurveyTranslation serialization and deserialization."""

class Meta:
"""SurveyTranslationSchema metadata."""

model = SurveyTranslation
load_instance = True # Optional: deserialize to model instances

11 changes: 4 additions & 7 deletions met-api/src/met_api/services/survey_translation_service.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
"""Service for SurveyTranslation management."""

from http import HTTPStatus
from met_api.models import language

from sqlalchemy.exc import IntegrityError
from met_api.services import authorization
from met_api.constants.membership_type import MembershipType
from met_api.utils.roles import Role
from met_api.exceptions.business_exception import BusinessException
from met_api.models.survey_translation import SurveyTranslation
from met_api.schemas.survey_translation_schema import SurveyTranslationSchema
from met_api.services.survey_service import SurveyService
from met_api.services import authorization
from met_api.services.language_service import LanguageService
from met_api.services.survey_service import SurveyService
from met_api.utils.roles import Role


class SurveyTranslationService:
@@ -81,7 +80,6 @@ def update_survey_translation(
survey_id, survey_translation_id, data: dict
):
"""Update survey translation partially."""

survey = SurveyService.get(survey_id)

one_of_roles = (
@@ -105,7 +103,6 @@ def update_survey_translation(
@staticmethod
def delete_survey_translation(survey_id, survey_translation_id):
"""Delete survey translation."""

survey = SurveyService.get(survey_id)

one_of_roles = (
8 changes: 2 additions & 6 deletions met-api/tests/unit/api/test_survey_translation.py
Original file line number Diff line number Diff line change
@@ -8,12 +8,8 @@

from met_api.utils.enums import ContentType
from tests.utilities.factory_utils import (
factory_auth_header,
factory_survey_translation_and_engagement_model,
factory_survey_and_eng_model,
factory_language_model,
)
from tests.utilities.factory_scenarios import TestJwtClaims
factory_auth_header, factory_language_model, factory_survey_and_eng_model,
factory_survey_translation_and_engagement_model)


def test_get_survey_translation(client, jwt, session):
7 changes: 2 additions & 5 deletions met-api/tests/unit/models/test_survey_translation.py
Original file line number Diff line number Diff line change
@@ -4,12 +4,9 @@
"""

from met_api.models.survey_translation import SurveyTranslation
from tests.utilities.factory_utils import factory_language_model
from tests.utilities.factory_utils import factory_survey_translation_model
from tests.utilities.factory_utils import (
factory_survey_and_eng_model,
factory_survey_translation_and_engagement_model,
)
factory_language_model, factory_survey_and_eng_model, factory_survey_translation_and_engagement_model,
factory_survey_translation_model)


def test_create_survey_translation(session):
17 changes: 4 additions & 13 deletions met-api/tests/unit/services/test_survey_translation_service.py
Original file line number Diff line number Diff line change
@@ -3,20 +3,11 @@
Test suite to ensure that the SurveyTranslationService routines are working as expected.
"""

from met_api.services.survey_translation_service import (
SurveyTranslationService,
)
from tests.utilities.factory_utils import factory_language_model
from tests.utilities.factory_utils import factory_survey_and_eng_model
from tests.utilities.factory_utils import (
factory_survey_translation_and_engagement_model,
)
from met_api.exceptions.business_exception import BusinessException
from met_api.services.survey_translation_service import SurveyTranslationService
from tests.utilities.factory_scenarios import TestJwtClaims
from tests.utilities.factory_utils import (
factory_staff_user_model,
patch_token_info,
)
factory_language_model, factory_staff_user_model, factory_survey_and_eng_model,
factory_survey_translation_and_engagement_model, patch_token_info)


def test_get_survey_translation_by_id(session):
@@ -75,7 +66,7 @@ def test_update_survey_translation(session, monkeypatch):
"""Assert that a survey translation can be updated."""
patch_token_info(TestJwtClaims.staff_admin_role, monkeypatch)
factory_staff_user_model(external_id=TestJwtClaims.staff_admin_role['sub'])

translation, _, _ = factory_survey_translation_and_engagement_model()

updated_data = {'name': 'Updated Survey Translation'}
57 changes: 12 additions & 45 deletions met-api/tests/utilities/factory_utils.py
Original file line number Diff line number Diff line change
@@ -26,23 +26,14 @@
from met_api.constants.engagement_status import Status
from met_api.constants.widget import WidgetType
from met_api.models import Tenant
from met_api.models import language
from met_api.models.comment import Comment as CommentModel
from met_api.models.email_verification import (
EmailVerification as EmailVerificationModel,
)
from met_api.models.email_verification import EmailVerification as EmailVerificationModel
from met_api.models.engagement import Engagement as EngagementModel
from met_api.models.engagement_metadata import (
EngagementMetadata,
MetadataTaxon,
)
from met_api.models.engagement_metadata import EngagementMetadata, MetadataTaxon
from met_api.models.engagement_settings import EngagementSettingsModel
from met_api.models.engagement_slug import (
EngagementSlug as EngagementSlugModel,
)
from met_api.models.engagement_slug import EngagementSlug as EngagementSlugModel
from met_api.models.feedback import Feedback as FeedbackModel
from met_api.models.language import Language as LanguageModel
from met_api.models.survey_translation import SurveyTranslation as SurveyTranslationModel
from met_api.models.membership import Membership as MembershipModel
from met_api.models.participant import Participant as ParticipantModel
from met_api.models.poll_answers import PollAnswer as PollAnswerModel
@@ -52,46 +43,23 @@
from met_api.models.submission import Submission as SubmissionModel
from met_api.models.subscription import Subscription as SubscriptionModel
from met_api.models.survey import Survey as SurveyModel
from met_api.models.survey_translation import SurveyTranslation as SurveyTranslationModel
from met_api.models.timeline_event import TimelineEvent as TimelineEventModel
from met_api.models.widget import Widget as WidgetModal
from met_api.models.widget_documents import (
WidgetDocuments as WidgetDocumentModel,
)
from met_api.models.widget_documents import WidgetDocuments as WidgetDocumentModel
from met_api.models.widget_item import WidgetItem as WidgetItemModal
from met_api.models.widget_map import WidgetMap as WidgetMapModel
from met_api.models.widget_poll import Poll as WidgetPollModel
from met_api.models.widget_timeline import (
WidgetTimeline as WidgetTimelineModel,
)
from met_api.models.widget_timeline import WidgetTimeline as WidgetTimelineModel
from met_api.models.widget_video import WidgetVideo as WidgetVideoModel
from met_api.utils.constants import TENANT_ID_HEADER
from met_api.utils.enums import MembershipStatus
from tests.utilities.factory_scenarios import (
TestCommentInfo,
TestEngagementInfo,
TestEngagementMetadataInfo,
TestEngagementMetadataTaxonInfo,
TestEngagementSlugInfo,
TestFeedbackInfo,
TestJwtClaims,
TestLanguageInfo,
TestParticipantInfo,
TestPollAnswerInfo,
TestPollResponseInfo,
TestReportSettingInfo,
TestSubmissionInfo,
TestSurveyInfo,
TestTenantInfo,
TestTimelineInfo,
TestUserInfo,
TestWidgetDocumentInfo,
TestWidgetInfo,
TestWidgetItemInfo,
TestWidgetMap,
TestWidgetPollInfo,
TestWidgetVideo,
TestSurveyTranslationInfo,
)
TestCommentInfo, TestEngagementInfo, TestEngagementMetadataInfo, TestEngagementMetadataTaxonInfo,
TestEngagementSlugInfo, TestFeedbackInfo, TestJwtClaims, TestLanguageInfo, TestParticipantInfo, TestPollAnswerInfo,
TestPollResponseInfo, TestReportSettingInfo, TestSubmissionInfo, TestSurveyInfo, TestSurveyTranslationInfo,
TestTenantInfo, TestTimelineInfo, TestUserInfo, TestWidgetDocumentInfo, TestWidgetInfo, TestWidgetItemInfo,
TestWidgetMap, TestWidgetPollInfo, TestWidgetVideo)


fake = Faker()
@@ -353,8 +321,7 @@ def factory_feedback_model(
def factory_auth_header(jwt, claims, tenant_id=None):
"""Produce JWT tokens for use in tests."""
return {
'Authorization': 'Bearer '
+ jwt.create_jwt(claims=claims, header=JWT_HEADER),
'Authorization': 'Bearer ' + jwt.create_jwt(claims=claims, header=JWT_HEADER),
TENANT_ID_HEADER: (
tenant_id or current_app.config.get('DEFAULT_TENANT_SHORT_NAME')
),