def test_verify_email_invalid_email():
    session_dict = {
        'email_attestation': {
            'email': generate_password_hash('*****@*****.**'),
            'code': '12345',
            'expiry': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
        }
    }

    args = {
        'eth_address': str_eth(sample_eth_address),
        'email': '*****@*****.**',
        'code': '54321'
    }

    with mock.patch('logic.attestation_service.session', session_dict):
        with pytest.raises(EmailVerificationError) as verification_err:
            VerificationService.verify_email(**args)

    assert(verification_err.value.message) == \
        'No verification code was found for that email.'

    # Verify attestation not stored
    attestations = Attestation.query.all()
    assert(len(attestations)) == 0
def test_verify_email_invalid_code(mock_session):
    session_dict = {
        'email_attestation': {
            'email': generate_password_hash('*****@*****.**'),
            'code': '12345',
            'expiry': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
        }
    }

    args = {
        'eth_address': str_eth(sample_eth_address),
        'email': '*****@*****.**',
        'code': '54321'
    }

    with mock.patch('logic.attestation_service.session', session_dict):
        with pytest.raises(ValidationError) as validation_err:
            VerificationService.verify_email(**args)

    assert(validation_err.value.messages[0]
           ) == 'Verification code is incorrect.'
    assert(validation_err.value.field_names[0]) == 'code'

    # Verify attestation not stored
    attestations = Attestation.query.all()
    assert(len(attestations)) == 0
예제 #3
0
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.'
예제 #4
0
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_session):
    session_dict = {
        'email_attestation': {
            'email': generate_password_hash('*****@*****.**'),
            'code': '12345',
            'expiry': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
        }
    }

    args = {
        'eth_address': str_eth(sample_eth_address),
        'email': '*****@*****.**',
        'code': '12345'
    }

    with mock.patch('logic.attestation_service.session', session_dict):
        response = VerificationService.verify_email(**args)

    assert isinstance(response, VerificationServiceResponse)

    assert len(response.data['signature']) == SIGNATURE_LENGTH
    assert response.data['claim_type'] == CLAIM_TYPES['email']
    assert response.data['data'] == 'email verified'

    # Verify attestation stored in database
    attestations = Attestation.query.all()
    assert(len(attestations)) == 1
    assert(attestations[0].method) == AttestationTypes.EMAIL
    assert(attestations[0].value) == "*****@*****.**"
def test_verify_email_no_verification_sent():
    args = {
        'eth_address': str_eth(sample_eth_address),
        'email': '*****@*****.**',
        'code': '54321'
    }

    with mock.patch('logic.attestation_service.session', dict()):
        with pytest.raises(EmailVerificationError) as verification_err:
            VerificationService.verify_email(**args)

    assert(verification_err.value.message) == \
        'No verification code was found.'

    # Verify attestation not stored
    attestations = Attestation.query.all()
    assert(len(attestations)) == 0
예제 #7
0
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'
예제 #8
0
def test_verify_email_valid_code(mock_session, app):
    session_dict = {
        'email_attestation': {
            'email': generate_password_hash('*****@*****.**'),
            'code': '12345',
            'expiry':
            datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
        }
    }

    args = {
        'eth_address': str_eth(sample_eth_address),
        'email': '*****@*****.**',
        'code': '12345'
    }

    with mock.patch('logic.attestation_service.session', session_dict):
        with app.test_request_context():
            response = VerificationService.verify_email(**args)

    assert isinstance(response, VerificationServiceResponse)

    assert response.data['signature']['version'] == '1.0.0'
    assert len(response.data['signature']['bytes']) == SIGNATURE_LENGTH
    assert response.data[
        'schemaId'] == 'https://schema.originprotocol.com/attestation_1.0.0.json'
    validate_issuer(response.data['data']['issuer'])
    assert response.data['data']['issueDate']
    assert response.data['data']['attestation']['verificationMethod']['email']
    assert response.data['data']['attestation']['email']['verified']

    # Verify attestation stored in database
    attestations = Attestation.query.all()
    assert (len(attestations)) == 1
    assert (attestations[0].method) == AttestationTypes.EMAIL
    assert (attestations[0].value) == "*****@*****.**"