# -*- coding: utf-8 -*-

import datetime
import random
import django.contrib.auth
from unittest import TestCase
from django.test import Client
from django.core.urlresolvers import reverse, resolve
from django.core.management import call_command

from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, PrilohaReseni, Soustredeni, Nastaveni
from seminar.testutils import create_test_data
from seminar import ovvpfile
from seminar import utils

class SeminarBasicTests(TestCase):
	def setUp(self):
		create_test_data(size=2)
		self.client = Client()

	def tearDown(self):
		call_command('flush', noinput=True, verbosity=0, interactive=False)
		self.cleint = None

	def test_rocniky(self):
		r19 = Rocnik.objects.get(rocnik=21)
		self.assertEqual(r19.roman(), 'XXI')

	def test_render_cislo_e2e(self):
		cs = Cislo.objects.all()
		for c in cs[:4]:
			url = c.verejne_url()
			r = self.client.get(url)
			assert r.status_code == 200
			assert len(r.content) >= 100
			# TODO: Validate cntent as HTML

	def test_render_problem_e2e(self):
		ps = Problem.objects.all()
		for p in ps[:4]:
			url = p.verejne_url()
			r = self.client.get(url)
			assert r.status_code == 200
			assert len(r.content) >= 100
			# TODO: Validate cntent as HTML

	def test_export_e2e(self):
		i_url = '/aesop-export/index.csv'
		i_r = self.client.get(i_url)
		assert i_r.status_code == 200
		ls = i_r.content.strip().split('\n')

		for u in [ls[0], ls[-1]]:
			ex_r = self.client.get('/aesop-export/' + u)
			assert ex_r.status_code == 200
			assert len(ex_r.content) >= 100
			o = ovvpfile.parse(ex_r.content)
			assert o.headers['version'] == '1'

	def test_admin_url(self):
		for m in [Skola, Resitel, Rocnik, Cislo, Problem, Reseni, Nastaveni]:
			o = m.objects.first()
			url = o.admin_url()
			assert url
			view = resolve(url)
			assert view

	def test_verejne_url(self):
		for m in [Rocnik, Cislo, Problem]:
			p = Problem.objects.first()
			url = p.verejne_url()
			assert url
			view = resolve(url)
			assert view

	def test_ovvpfile(self):
		filetext = "H1\ta\nH2\tb\tc\n\nx\ty\tz\n0\t1\t2\n3\t4\t5\n"
		o = ovvpfile.parse(filetext)
		assert len(o.headers) == 2
		assert o.headers['H2'] == 'b\tc'

		assert o.columns == ['x','y','z']
		assert len(o.rows) == 2
		assert o.rows[0]['z'] == '2'

		t = o.to_string()
		assert t == filetext

	def test_roman(self):
		for i in [0, 1, 23, 2015, 1999, 42, 4, 400, 78, 4321, 8765, 999]:
			r = utils.roman(i)
			fr = utils.from_roman(r)
			assert fr == i