def test_generate_phone_verification_rate_limit_exceeded( session, mock_normalize_number): vc_obj = VerificationCodeFactory.build() vc_obj.updated_at = utcnow() + datetime.timedelta(seconds=9) session.add(vc_obj) session.commit() phone = vc_obj.phone with pytest.raises(PhoneVerificationError) as service_err: VerificationService.generate_phone_verification_code(phone) assert str(service_err.value) == ('Please wait briefly before requesting a' ' new verification code.')
def test_verify_phone_phone_not_found(session, mock_normalize_number): vc_obj = VerificationCodeFactory.build() session.add(vc_obj) session.commit() args = { 'eth_address': str_eth(sample_eth_address), 'phone': 'garbage', 'code': vc_obj.code } with pytest.raises(PhoneVerificationError) as service_err: VerificationService.verify_phone(**args) assert str(service_err.value) == 'The given phone number was not found.'
def test_verify_phone_wrong_code(session, mock_normalize_number): vc_obj = VerificationCodeFactory.build() session.add(vc_obj) session.commit() args = { 'eth_address': str_eth(sample_eth_address), 'phone': vc_obj.phone, 'code': 'garbage' } with pytest.raises(PhoneVerificationError) as service_err: VerificationService.verify_phone(**args) assert str(service_err.value) == 'The code you provided is invalid.'
def test_verify_phone_expired_code(session, mock_normalize_number): vc_obj = VerificationCodeFactory.build() vc_obj.expires_at = utcnow() - datetime.timedelta(days=1) session.add(vc_obj) session.commit() args = { 'eth_address': str_eth(sample_eth_address), 'phone': vc_obj.phone, 'code': vc_obj.code } with pytest.raises(PhoneVerificationError) as service_err: VerificationService.verify_phone(**args) assert str(service_err.value) == 'The code you provided has expired.'
def test_verify_email_email_not_found(mock_now, session): vc_obj = VerificationCodeFactory.build() session.add(vc_obj) session.commit() args = { 'eth_address': str_eth(sample_eth_address), 'email': 'garbage', 'code': vc_obj.code } mock_now.return_value = vc_obj.expires_at - datetime.timedelta(minutes=1) with pytest.raises(EmailVerificationError) as service_err: VerificationService.verify_email(**args) assert str(service_err.value) == 'The given email was not found.'
def test_verify_email_wrong_code(mock_now, session): vc_obj = VerificationCodeFactory.build() session.add(vc_obj) session.commit() req = { 'eth_address': str_eth(sample_eth_address), 'email': vc_obj.email, 'code': 'garbage' } mock_now.return_value = vc_obj.expires_at - datetime.timedelta(minutes=1) with pytest.raises(EmailVerificationError) as service_err: VerificationService.verify_email(**req) assert str(service_err.value) == 'The code you provided is invalid.'
def test_verify_email_valid_code(mock_now, session): vc_obj = VerificationCodeFactory.build() session.add(vc_obj) session.commit() req = { 'eth_address': str_eth(sample_eth_address), 'email': vc_obj.email.upper(), 'code': vc_obj.code } mock_now.return_value = vc_obj.expires_at - datetime.timedelta(minutes=1) resp = VerificationService.verify_email(**req) resp_data = resp.data assert len(resp_data['signature']) == SIGNATURE_LENGTH assert resp_data['claim_type'] == CLAIM_TYPES['email'] assert resp_data['data'] == 'email verified'
def test_verify_phone_valid_code(session, mock_normalize_number): vc_obj = VerificationCodeFactory.build() session.add(vc_obj) session.commit() args = { 'eth_address': str_eth(sample_eth_address), 'phone': vc_obj.phone, 'code': vc_obj.code } resp = VerificationService.verify_phone(**args) assert isinstance(resp, VerificationServiceResponse) resp_data = resp.data assert len(resp_data['signature']) == SIGNATURE_LENGTH assert resp_data['claim_type'] == CLAIM_TYPES['phone'] assert resp_data['data'] == 'phone verified'
def test_generate_email_verification_code_email_already_in_db( MockHttpClient, session): vc_obj = VerificationCodeFactory.build() expires_at = vc_obj.expires_at vc_obj.created_at = utcnow() - datetime.timedelta(seconds=10) vc_obj.updated_at = utcnow() - datetime.timedelta(seconds=10) session.add(vc_obj) session.commit() email = vc_obj.email resp = VerificationService.generate_email_verification_code(email) assert isinstance(resp, VerificationServiceResponse) assert VC.query.filter(VC.email == email).count() == 1 db_code = VC.query.filter(VC.email == email).first() assert db_code is not None assert db_code.code is not None assert len(db_code.code) == 6 assert db_code.expires_at is not None assert db_code.created_at is not None assert db_code.updated_at is not None assert db_code.updated_at >= db_code.created_at assert db_code.expires_at > expires_at
def test_generate_phone_verification_code_phone_already_in_db( mock_send_sms, session, mock_normalize_number): vc_obj = VerificationCodeFactory.build() expires_at = vc_obj.expires_at vc_obj.created_at = utcnow() - datetime.timedelta(seconds=10) vc_obj.updated_at = utcnow() - datetime.timedelta(seconds=10) session.add(vc_obj) session.commit() phone = vc_obj.phone resp = VerificationService.generate_phone_verification_code(phone) assert isinstance(resp, VerificationServiceResponse) assert VC.query.filter(VC.phone == phone).count() == 1 db_code = VC.query.filter(VC.phone == phone).first() assert db_code is not None assert db_code.code is not None assert len(db_code.code) == 6 assert db_code.expires_at is not None assert db_code.created_at is not None assert db_code.updated_at is not None assert db_code.updated_at >= db_code.created_at assert db_code.expires_at > expires_at