import unittest
import re

from endpoints.trigger import matches_ref

class TestRegex(unittest.TestCase):
  def assertDoesNotMatch(self, ref, filt):
    self.assertFalse(matches_ref(ref, re.compile(filt)))

  def assertMatches(self, ref, filt):
    self.assertTrue(matches_ref(ref, re.compile(filt)))

  def test_matches_ref(self):
    self.assertMatches('ref/heads/master', '.+')
    self.assertMatches('ref/heads/master', 'heads/.+')
    self.assertMatches('ref/heads/master', 'heads/master')

    self.assertDoesNotMatch('ref/heads/foobar', 'heads/master')
    self.assertDoesNotMatch('ref/heads/master', 'tags/master')

    self.assertMatches('ref/heads/master', '(((heads/alpha)|(heads/beta))|(heads/gamma))|(heads/master)')
    self.assertMatches('ref/heads/alpha', '(((heads/alpha)|(heads/beta))|(heads/gamma))|(heads/master)')
    self.assertMatches('ref/heads/beta', '(((heads/alpha)|(heads/beta))|(heads/gamma))|(heads/master)')
    self.assertMatches('ref/heads/gamma', '(((heads/alpha)|(heads/beta))|(heads/gamma))|(heads/master)')

    self.assertDoesNotMatch('ref/heads/delta', '(((heads/alpha)|(heads/beta))|(heads/gamma))|(heads/master)')

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