#!/usr/bin/env python
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Unit tests for verification/authors_white_list.py."""

import os
import sys
import unittest

ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.join(ROOT_DIR, '..'))

from verification import base
from verification import authors_white_list

# From tests/
import mocks


class AuthorTest(mocks.TestCase):
  def test_rejected(self):
    self.pending.owner = 'georges@micro.com'
    self._check(
        'Can\'t commit because the owner %s not in whitelist' %
        self.pending.owner)

  def test_allowed(self):
    self.pending.owner = 'georges@example.com'
    self._check(None)

  def _check(self, error_message):
    ver = authors_white_list.AuthorVerifier([r'^[\-\w]+\@example\.com$'])
    ver.verify(self.pending)
    ver.update_status([self.pending])
    name = authors_white_list.AuthorVerifier.name
    self.assertEqual(self.pending.verifications.keys(), [name])
    self.assertEqual(
        self.pending.verifications[name].error_message, error_message)
    if error_message:
      self.assertEqual(
          self.pending.verifications[name].get_state(), base.FAILED)
    else:
      self.assertEqual(
          self.pending.verifications[name].get_state(), base.SUCCEEDED)


if __name__ == '__main__':
  unittest.main()
