mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-21 16:01:15 -05:00
Add organisations model and create dao
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
from app import db
|
||||||
|
from app.dao.dao_utils import transactional
|
||||||
from app.models import Organisation
|
from app.models import Organisation
|
||||||
|
|
||||||
|
|
||||||
@@ -7,3 +9,8 @@ def dao_get_organisations():
|
|||||||
|
|
||||||
def dao_get_organisation_by_id(org_id):
|
def dao_get_organisation_by_id(org_id):
|
||||||
return Organisation.query.filter_by(id=org_id).one()
|
return Organisation.query.filter_by(id=org_id).one()
|
||||||
|
|
||||||
|
|
||||||
|
@transactional
|
||||||
|
def dao_create_organisation(organisation):
|
||||||
|
db.session.add(organisation)
|
||||||
@@ -137,6 +137,19 @@ class Organisation(db.Model):
|
|||||||
logo = db.Column(db.String(255), nullable=True)
|
logo = db.Column(db.String(255), nullable=True)
|
||||||
name = db.Column(db.String(255), nullable=True)
|
name = db.Column(db.String(255), nullable=True)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_json(cls, data):
|
||||||
|
"""
|
||||||
|
Assumption: data has been validated appropriately.
|
||||||
|
|
||||||
|
Returns a Service object based on the provided data. Deserialises created_by to created_by_id as marshmallow
|
||||||
|
would.
|
||||||
|
"""
|
||||||
|
# validate json with marshmallow
|
||||||
|
fields = data.copy()
|
||||||
|
|
||||||
|
return cls(**fields)
|
||||||
|
|
||||||
|
|
||||||
DVLA_ORG_HM_GOVERNMENT = '001'
|
DVLA_ORG_HM_GOVERNMENT = '001'
|
||||||
DVLA_ORG_LAND_REGISTRY = '500'
|
DVLA_ORG_LAND_REGISTRY = '500'
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
from flask import Blueprint, jsonify
|
from flask import Blueprint, jsonify, request
|
||||||
|
|
||||||
from app.dao.organisation_dao import dao_get_organisations, dao_get_organisation_by_id
|
from app.dao.organisations_dao import dao_get_organisations, dao_get_organisation_by_id, dao_create_organisation
|
||||||
from app.schemas import organisation_schema
|
from app.schemas import organisation_schema
|
||||||
from app.errors import register_errors
|
from app.errors import (
|
||||||
|
InvalidRequest,
|
||||||
|
register_errors
|
||||||
|
)
|
||||||
|
from app.models import Organisation
|
||||||
|
|
||||||
organisation_blueprint = Blueprint('organisation', __name__)
|
organisation_blueprint = Blueprint('organisation', __name__)
|
||||||
register_errors(organisation_blueprint)
|
register_errors(organisation_blueprint)
|
||||||
@@ -18,3 +22,20 @@ def get_organisations():
|
|||||||
def get_organisation_by_id(org_id):
|
def get_organisation_by_id(org_id):
|
||||||
data = organisation_schema.dump(dao_get_organisation_by_id(org_id)).data
|
data = organisation_schema.dump(dao_get_organisation_by_id(org_id)).data
|
||||||
return jsonify(organisation=data)
|
return jsonify(organisation=data)
|
||||||
|
|
||||||
|
|
||||||
|
@organisation_blueprint.route('', methods=['POST'])
|
||||||
|
def post_organisation():
|
||||||
|
data = request.get_json()
|
||||||
|
if not data.get('name', None):
|
||||||
|
errors = {'name': ['Missing data for required field.']}
|
||||||
|
raise InvalidRequest(errors, status_code=400)
|
||||||
|
|
||||||
|
# validate json with marshmallow
|
||||||
|
organisation_schema.load(request.get_json())
|
||||||
|
|
||||||
|
# unpack valid json into service object
|
||||||
|
valid_organisation = Organisation.from_json(data)
|
||||||
|
|
||||||
|
dao_create_organisation(valid_organisation)
|
||||||
|
return jsonify(data=organisation_schema.dump(valid_organisation).data), 201
|
||||||
|
|||||||
14
tests/app/dao/test_organisations_dao.py
Normal file
14
tests/app/dao/test_organisations_dao.py
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from app.dao.organisations_dao import dao_create_organisation
|
||||||
|
from app.models import Organisation
|
||||||
|
|
||||||
|
from tests.app.db import create_organisation
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_organisation(notify_db, notify_db_session):
|
||||||
|
organisation = create_organisation()
|
||||||
|
|
||||||
|
assert Organisation.query.count() == 1
|
||||||
|
organisation_from_db = Organisation.query.first()
|
||||||
|
assert organisation == organisation_from_db
|
||||||
@@ -13,6 +13,7 @@ from app.models import (
|
|||||||
ServicePermission,
|
ServicePermission,
|
||||||
Job,
|
Job,
|
||||||
InboundSms,
|
InboundSms,
|
||||||
|
Organisation,
|
||||||
EMAIL_TYPE,
|
EMAIL_TYPE,
|
||||||
SMS_TYPE,
|
SMS_TYPE,
|
||||||
KEY_TYPE_NORMAL,
|
KEY_TYPE_NORMAL,
|
||||||
@@ -23,6 +24,7 @@ from app.dao.templates_dao import dao_create_template
|
|||||||
from app.dao.services_dao import dao_create_service
|
from app.dao.services_dao import dao_create_service
|
||||||
from app.dao.service_permissions_dao import dao_add_service_permission
|
from app.dao.service_permissions_dao import dao_add_service_permission
|
||||||
from app.dao.inbound_sms_dao import dao_create_inbound_sms
|
from app.dao.inbound_sms_dao import dao_create_inbound_sms
|
||||||
|
from app.dao.organisations_dao import dao_create_organisation
|
||||||
|
|
||||||
|
|
||||||
def create_user(mobile_number="+447700900986", email="notify@digital.cabinet-office.gov.uk", state='active'):
|
def create_user(mobile_number="+447700900986", email="notify@digital.cabinet-office.gov.uk", state='active'):
|
||||||
@@ -225,3 +227,15 @@ def create_service_inbound_api(
|
|||||||
)
|
)
|
||||||
save_service_inbound_api(service_inbound_api)
|
save_service_inbound_api(service_inbound_api)
|
||||||
return service_inbound_api
|
return service_inbound_api
|
||||||
|
|
||||||
|
|
||||||
|
def create_organisation(colour='blue', logo='test_x2.png', name='test_logo'):
|
||||||
|
data = {
|
||||||
|
'colour': colour,
|
||||||
|
'logo': logo,
|
||||||
|
'name': name
|
||||||
|
}
|
||||||
|
organisation = Organisation(**data)
|
||||||
|
dao_create_organisation(organisation)
|
||||||
|
|
||||||
|
return organisation
|
||||||
|
|||||||
Reference in New Issue
Block a user