import pytest

from auth.signedgrant import validate_signed_grant, generate_signed_token, SIGNATURE_PREFIX
from auth.validateresult import AuthKind, ValidateResult


@pytest.mark.parametrize('header, expected_result', [
  ('', ValidateResult(AuthKind.signed_grant, missing=True)),
  ('somerandomtoken', ValidateResult(AuthKind.signed_grant, missing=True)),
  ('token somerandomtoken', ValidateResult(AuthKind.signed_grant, missing=True)),
  ('token ' + SIGNATURE_PREFIX + 'foo',
   ValidateResult(AuthKind.signed_grant, error_message='Signed grant could not be validated')),
  ('token ' + generate_signed_token({
    'a': 'b'}, {'c': 'd'}), ValidateResult(AuthKind.signed_grant, signed_data={
      'grants': {
        'a': 'b'},
      'user_context': {
        'c': 'd'}})),])
def test_token(header, expected_result):
  assert validate_signed_grant(header) == expected_result