Add backref in InboundNumber model

This commit is contained in:
Ken Tsang
2017-08-04 12:13:10 +01:00
parent 4efb3238db
commit 3c392596a3
4 changed files with 42 additions and 25 deletions

View File

@@ -249,10 +249,20 @@ class InboundNumber(db.Model):
number = db.Column(db.String(11), unique=True, nullable=False)
provider = db.Column(db.String(), nullable=False)
service_id = db.Column(UUID(as_uuid=True), db.ForeignKey('services.id'), unique=True, index=True, nullable=True)
service = db.relationship('Service')
service = db.relationship(Service, backref=db.backref("inbound_number", uselist=False))
active = db.Column(db.Boolean, index=False, unique=False, nullable=False, default=True)
created_at = db.Column(db.DateTime, default=datetime.datetime.utcnow, nullable=False)
def serialize(self):
serialized = {
"id": str(self.id),
"number": self.number,
"provider": self.provider,
"service_id": self.service_id,
"active": self.active,
"created_at": self.created_at.strftime(DATETIME_FORMAT),
}
class ServicePermission(db.Model):
__tablename__ = "service_permissions"

View File

@@ -39,7 +39,7 @@ from app.dao.invited_user_dao import save_invited_user
from app.dao.provider_rates_dao import create_provider_rates
from app.clients.sms.firetext import FiretextClient
from tests import create_authorization_header
from tests.app.db import create_user, create_template, create_notification, create_api_key
from tests.app.db import create_user, create_template, create_notification, create_api_key, create_inbound_number
@pytest.yield_fixture
@@ -983,6 +983,15 @@ def sample_provider_rate(notify_db, notify_db_session, valid_from=None, rate=Non
)
@pytest.fixture
def sample_inbound_numbers(notify_db, notify_db_session, sample_service):
inbound_numbers = []
inbound_numbers.append(create_inbound_number(number='1', provider='mmg'))
inbound_numbers.append(create_inbound_number(number='2', provider='mmg', active=False))
inbound_numbers.append(create_inbound_number(number='3', provider='firetext', service_id=sample_service.id))
return inbound_numbers
@pytest.fixture
def restore_provider_details(notify_db, notify_db_session):
"""

View File

@@ -8,24 +8,10 @@ from app.dao.inbound_numbers_dao import (
)
from app.models import InboundNumber
from tests.app.db import create_inbound_number, create_service
from tests.app.db import create_service
@pytest.fixture
def service_1(notify_db, notify_db_session):
return create_service()
@pytest.fixture
def sample_inbound_numbers(notify_db, notify_db_session, service_1):
inbound_numbers = []
inbound_numbers.append(create_inbound_number(number='1', provider='mmg'))
inbound_numbers.append(create_inbound_number(number='2', provider='mmg', active=False))
inbound_numbers.append(create_inbound_number(number='3', provider='firetext', service_id=service_1.id))
return inbound_numbers
def test_get_inbound_numbers(notify_db, notify_db_session, sample_inbound_numbers, service_1):
def test_get_inbound_numbers(notify_db, notify_db_session, sample_inbound_numbers):
res = dao_get_inbound_numbers()
assert len(res) == 3
@@ -39,8 +25,7 @@ def test_get_available_inbound_numbers(notify_db, notify_db_session, sample_inbo
assert res[0] == sample_inbound_numbers[0]
def test_allocate_inbound_number_to_service(
notify_db, notify_db_session, sample_inbound_numbers):
def test_allocate_inbound_number_to_service(notify_db, notify_db_session, sample_inbound_numbers):
service = create_service(service_name='test service')
dao_allocate_inbound_number_to_service(service.id)
@@ -51,8 +36,7 @@ def test_allocate_inbound_number_to_service(
assert res[0].service_id == service.id
def test_allocating_a_service_twice_will_raise_an_error(
notify_db, notify_db_session, sample_inbound_numbers):
def test_allocating_a_service_twice_will_raise_an_error(notify_db, notify_db_session, sample_inbound_numbers):
service = create_service(service_name='test service')
dao_allocate_inbound_number_to_service(service.id)
@@ -67,8 +51,8 @@ def test_allocating_a_service_twice_will_raise_an_error(
assert str(e.value) == 'No inbound numbers available'
def test_get_inbound_number_for_service(notify_db, notify_db_session, sample_inbound_numbers, service_1):
res = dao_get_inbound_number_for_service(service_1.id)
def test_get_inbound_number_for_service(notify_db, notify_db_session, sample_inbound_numbers, sample_service):
res = dao_get_inbound_number_for_service(sample_service.id)
assert len(res) == 1
assert res[0] == sample_inbound_numbers[2]
assert res[0].service_id == sample_service.id

View File

@@ -7,6 +7,10 @@ from sqlalchemy.orm.exc import FlushError, NoResultFound
from sqlalchemy.exc import IntegrityError
from freezegun import freeze_time
from app import db
from app.dao.inbound_numbers_dao import (
dao_allocate_inbound_number_to_service,
dao_get_available_inbound_numbers
)
from app.dao.services_dao import (
dao_create_service,
dao_add_user_to_service,
@@ -896,3 +900,13 @@ def test_dao_fetch_services_by_sms_sender(notify_db_session):
services = dao_fetch_services_by_sms_sender('foo')
assert {foo1.id, foo2.id} == {x.id for x in services}
def test_dao_allocating_inbound_number_shows_on_service(notify_db_session, sample_inbound_numbers):
inbound_numbers = dao_get_available_inbound_numbers()
service = create_service(service_name='test service')
dao_allocate_inbound_number_to_service(service.id)
assert service.inbound_number.number == inbound_numbers[0].number