import json

from django.core.urlresolvers import reverse

from seahub.base.models import FileComment
from seahub.test_utils import BaseTestCase

class FileCommentsCountsTest(BaseTestCase):
    def setUp(self):
        self.login_as(self.user)
        self.endpoint = reverse('api2-file-comments-counts', args=[self.repo.id]) + '?p=/'

        self.file2 = self.create_file(repo_id=self.repo.id, parent_dir='/',
                                      filename='test2.txt',
                                      username=self.user.username)

    def tearDown(self):
        self.remove_repo()

    def test_can_get(self):
        FileComment.objects.add_by_file_path(repo_id=self.repo.id,
                                             file_path=self.file,
                                             author=self.user.username,
                                             comment='test comment')

        FileComment.objects.add_by_file_path(repo_id=self.repo.id,
                                             file_path=self.file,
                                             author=self.user.username,
                                             comment='reply test comment')

        FileComment.objects.add_by_file_path(repo_id=self.repo.id,
                                             file_path=self.file2,
                                             author=self.user.username,
                                             comment='test comment on other file')

        resp = self.client.get(self.endpoint)
        self.assertEqual(200, resp.status_code)

        json_resp = json.loads(resp.content)
        assert len(json_resp) == 2
        for d in json_resp:
            if d.keys()[0] == 'test.txt':
                assert d['test.txt'] == 2

            if d.keys()[0] == 'test2.txt':
                assert d['test2.txt'] == 1

    def test_can_get_file(self):
        FileComment.objects.add_by_file_path(repo_id=self.repo.id,
                                             file_path=self.file2,
                                             author=self.user.username,
                                             comment='test comment on other file')

        FileComment.objects.add_by_file_path(repo_id=self.repo.id,
                                             file_path=self.file2,
                                             author=self.user.username,
                                             comment='test comment on other file123')
        self.file_request= reverse('api2-file-comments-counts', args=[self.repo.id]) + '?p=' + self.file2 
        resp = self.client.get(self.file_request)
        self.assertEqual(404, resp.status_code)
