from __future__ import absolute_import
from tests.init import *

from django.test import RequestFactory

import os
import pytest
from lxml import etree
from cas_server.views import ValidateService, Proxy
from cas_server import models

from tests.dummy import *

@pytest.mark.django_db
@dummy_ticket(models.ProxyGrantingTicket, '', "PGT-random")
@dummy_service_pattern(proxy=True)
@dummy_user(username="test", session_key="test_session")
@dummy_ticket(models.ProxyTicket, "https://www.example.com", "PT-random")
@dummy_proxy
def test_proxy_ok():
    factory = RequestFactory()
    request = factory.get('/proxy?pgt=PGT-random&targetService=https://www.example.com')

    request.session = DummySession()

    proxy = Proxy()
    response = proxy.get(request)

    assert response.status_code == 200

    root = etree.fromstring(response.content)
    proxy_tickets = root.xpath("//cas:proxyTicket", namespaces={'cas': "http://www.yale.edu/tp/cas"})

    assert len(proxy_tickets) == 1

    factory = RequestFactory()
    request = factory.get('/proxyValidate?ticket=PT-random&service=https://www.example.com')

    validate = ValidateService()
    validate.allow_proxy_ticket = True
    response = validate.get(request)
    
    assert response.status_code == 200

    root = etree.fromstring(response.content)
    users = root.xpath("//cas:user", namespaces={'cas': "http://www.yale.edu/tp/cas"})

    assert len(users) == 1
    assert users[0].text == "test"