# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Tests for the issueoriginal module."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import

import mock
import unittest

from framework import exceptions
from framework import permissions
from mrproto import tracker_pb2
from services import service_manager
from testing import fake
from testing import testing_helpers
from tracker import issueoriginal


STRIPPED_MSG = 'Are you sure that it is   plugged in?\n'
ORIG_MSG = ('Are you sure that it is   plugged in?\n'
            '\n'
            '> Issue 1 entered by user foo:\n'
            '> http://blah blah\n'
            '> The screen is just dark when I press power on\n')
XXX_GOOD_UNICODE_MSG = u'Thanks,\n\342\230\206*username*'.encode('utf-8')
GOOD_UNICODE_MSG = u'Thanks,\n XXX *username*'
XXX_BAD_UNICODE_MSG = ORIG_MSG + ('\xff' * 1000)
BAD_UNICODE_MSG = ORIG_MSG + 'XXX'
GMAIL_CRUFT_MSG = ORIG_MSG  # XXX .replace('   ', ' \xa0 ')


class IssueOriginalTest(unittest.TestCase):

  def setUp(self):
    self.services = service_manager.Services(
        project=fake.ProjectService(),
        config=fake.ConfigService(),
        issue=fake.IssueService(),
        user=fake.UserService())
    self.servlet = issueoriginal.IssueOriginal(services=self.services)

    self.proj = self.services.project.TestAddProject('proj', project_id=789)
    summary = 'System wont boot'
    status = 'New'
    cnxn = 'fake connection'
    self.services.user.TestAddUser('commenter@example.com', 222)

    created_issue_1 = fake.MakeTestIssue(
        789, 1, summary, status, 111, reporter_id=111)
    self.services.issue.TestAddIssue(created_issue_1)
    self.local_id_1 = created_issue_1.local_id
    comment_0 = tracker_pb2.IssueComment(
        issue_id=created_issue_1.issue_id,
        user_id=222,
        project_id=789,
        content=STRIPPED_MSG,
        inbound_message=ORIG_MSG)
    self.services.issue.InsertComment(cnxn, comment_0)
    comment_1 = tracker_pb2.IssueComment(
        issue_id=created_issue_1.issue_id,
        user_id=222,
        project_id=789,
        content=STRIPPED_MSG,
        inbound_message=BAD_UNICODE_MSG)
    self.services.issue.InsertComment(cnxn, comment_1)
    comment_2 = tracker_pb2.IssueComment(
        issue_id=created_issue_1.issue_id,
        user_id=222,
        project_id=789,
        content=STRIPPED_MSG,
        inbound_message=GMAIL_CRUFT_MSG)
    self.services.issue.InsertComment(cnxn, comment_2)
    comment_3 = tracker_pb2.IssueComment(
        issue_id=created_issue_1.issue_id,
        user_id=222,
        project_id=789,
        content=STRIPPED_MSG,
        inbound_message=GOOD_UNICODE_MSG)
    self.services.issue.InsertComment(cnxn, comment_3)
    self.issue_1 = self.services.issue.GetIssueByLocalID(
        cnxn, 789, self.local_id_1)
    self.comments = [comment_0, comment_1, comment_2, comment_3]

  @mock.patch('framework.permissions.GetPermissions')
  def testAssertBasePermission(self, mock_getpermissions):
    """Permit users who can view issue, view inbound message and delete."""
    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?id=1&seq=1',
        project=self.proj)

    # Allow the user to view the issue itself.
    mock_getpermissions.return_value = (
        permissions.CONTRIBUTOR_ACTIVE_PERMISSIONSET)

    # Someone without VIEW permission cannot view the inbound email.
    mr.perms = permissions.EMPTY_PERMISSIONSET
    self.assertRaises(permissions.PermissionException,
                      self.servlet.AssertBasePermission, mr)

    # Contributors don't have VIEW_INBOUND_MESSAGES.
    mr.perms = permissions.CONTRIBUTOR_ACTIVE_PERMISSIONSET
    self.assertRaises(permissions.PermissionException,
                      self.servlet.AssertBasePermission, mr)

    # Committers do have VIEW_INBOUND_MESSAGES.
    mr.perms = permissions.COMMITTER_ACTIVE_PERMISSIONSET
    self.servlet.AssertBasePermission(mr)

    # But, a committer cannot use that if they cannot view the issue.
    self.issue_1.labels.append('Restrict-View-Foo')
    mr.perms = permissions.CONTRIBUTOR_ACTIVE_PERMISSIONSET
    self.assertRaises(permissions.PermissionException,
                      self.servlet.AssertBasePermission, mr)

    # Project owners have VIEW_INBOUND_MESSAGES and bypass restrictions.
    mock_getpermissions.return_value = (
        permissions.OWNER_ACTIVE_PERMISSIONSET)
    mr.perms = permissions.OWNER_ACTIVE_PERMISSIONSET
    self.servlet.AssertBasePermission(mr)

  def testGatherPageData_Normal(self):
    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?id=1&seq=1',
        project=self.proj)
    page_data = self.servlet.GatherPageData(mr)
    self.assertEqual(1, page_data['local_id'])
    self.assertEqual(1, page_data['seq'])
    self.assertFalse(page_data['is_binary'])
    self.assertEqual(ORIG_MSG, page_data['message_body'])

  def testGatherPageData_GoodUnicode(self):
    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?id=1&seq=4',
        project=self.proj)
    page_data = self.servlet.GatherPageData(mr)
    self.assertEqual(1, page_data['local_id'])
    self.assertEqual(4, page_data['seq'])
    self.assertEqual(GOOD_UNICODE_MSG, page_data['message_body'])
    self.assertFalse(page_data['is_binary'])

  def testGatherPageData_BadUnicode(self):
    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?id=1&seq=2',
        project=self.proj)
    page_data = self.servlet.GatherPageData(mr)
    self.assertEqual(1, page_data['local_id'])
    self.assertEqual(2, page_data['seq'])
    # xxx: should be true if cruft was there.
    # self.assertTrue(page_data['is_binary'])

  def testGatherPageData_GmailCruft(self):
    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?id=1&seq=3',
        project=self.proj)
    page_data = self.servlet.GatherPageData(mr)
    self.assertEqual(1, page_data['local_id'])
    self.assertEqual(3, page_data['seq'])
    self.assertFalse(page_data['is_binary'])
    self.assertEqual(ORIG_MSG, page_data['message_body'])

  def testGatherPageData_404(self):
    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original',
        project=self.proj)
    with self.assertRaises(Exception) as cm:
      self.servlet.GatherPageData(mr)
    self.assertEqual(404, cm.exception.code)

    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?id=1&seq=999',
        project=self.proj)
    with self.assertRaises(Exception) as cm:
      self.servlet.GatherPageData(mr)
    self.assertEqual(404, cm.exception.code)

    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?id=999&seq=1',
        project=self.proj)
    with self.assertRaises(exceptions.NoSuchIssueException) as cm:
      self.servlet.GatherPageData(mr)

  def testGetIssueAndComment_Normal(self):
    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?id=1&seq=1',
        project=self.proj)
    issue, comment = self.servlet._GetIssueAndComment(mr)
    self.assertEqual(self.issue_1, issue)
    self.assertEqual(self.comments[1].content, comment.content)

  def testGetIssueAndComment_NoSuchComment(self):
    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?id=1&seq=99',
        project=self.proj)
    with self.assertRaises(Exception) as cm:
      self.servlet._GetIssueAndComment(mr)
    self.assertEqual(404, cm.exception.code)

  def testGetIssueAndComment_Malformed(self):
    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original',
        project=self.proj)
    with self.assertRaises(Exception) as cm:
      self.servlet._GetIssueAndComment(mr)
    self.assertEqual(404, cm.exception.code)

    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?id=1',
        project=self.proj)
    with self.assertRaises(Exception) as cm:
      self.servlet._GetIssueAndComment(mr)
    self.assertEqual(404, cm.exception.code)

    _request, mr = testing_helpers.GetRequestObjects(
        path='/p/proj/issues/original?seq=1',
        project=self.proj)
    with self.assertRaises(exceptions.NoSuchIssueException) as cm:
      self.servlet._GetIssueAndComment(mr)
