TestCreateSwarmReview.py #2

  • //
  • guest/
  • perforce_software/
  • sdp/
  • dev/
  • Server/
  • Unix/
  • p4/
  • common/
  • bin/
  • triggers/
  • TestCreateSwarmReview.py
  • View
  • Commits
  • Open Download .zip Download (5 KB)
# -*- encoding: UTF8 -*-
# Test harness for CreateSwarmReview.py

from __future__ import print_function

import sys
import unittest
import os
import re

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import testp4
import P4
import logging
import subprocess

from CreateSwarmReview import CreateSwarmReview

os.environ["LOGS"] = "."
LOGGER_NAME = "TestCreateSwarmReview"
LOG_FILE = "log-CreateSwarmReview.log"

python3 = sys.version_info[0] >= 3

if python3:
    from unittest.mock import patch, Mock
else:
    from mock import patch, Mock

def ensureDirectory(directory):
    if not os.path.isdir(directory):
        os.makedirs(directory)

def localDirectory(root, *dirs):
    "Create and ensure it exists"
    dir_path = os.path.join(root, *dirs)
    ensureDirectory(dir_path)
    return dir_path

def create_file(file_name, contents):
    "Create file with specified contents"
    ensureDirectory(os.path.dirname(file_name))
    if python3:
        contents = bytes(contents.encode())
    with open(file_name, 'wb') as f:
        f.write(contents)

def append_to_file(file_name, contents):
    "Append contents to file"
    if python3:
        contents = bytes(contents.encode())
    with open(file_name, 'ab+') as f:
        f.write(contents)

class TestCreateSwarmReview(unittest.TestCase):
    def __init__(self, methodName='runTest'):
        super(TestCreateSwarmReview, self).__init__(methodName=methodName)
        self.logger = logging.getLogger(LOGGER_NAME)
        self.logger.setLevel(logging.DEBUG)
        logformat = '%(levelname)s [%(asctime)s] [%(filename)s : %(lineno)d] - %(message)s'
        logging.basicConfig(format=logformat, filename=LOG_FILE, level=logging.DEBUG)

    def assertRegex(self, *args, **kwargs):
        if python3:
            return super(TestCreateSwarmReview, self).assertRegex(*args, **kwargs)
        else:
            return super(TestCreateSwarmReview, self).assertRegexpMatches(*args, **kwargs)

    def setUp(self):
        pass

    def tearDown(self):
        pass

    @patch('CreateSwarmReview.requests')
    def testCreateSwarmReview(self, requests_mock):
        """trigger fires and sends expected info to Swarm"""
        config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "~test_config.yaml")
        with open(config_path, "w") as f:
            f.write("""
api: "api/v6"
user: swarmtest
ticket: A123453
review_description: "Please review me!\nDon't forget to check YYYY"
paths:
- //depot/inside/...
""")

        args = ["-c", config_path, "--test-mode", "123"]
        trig = CreateSwarmReview(*args)
        result = trig.run()
        self.assertTrue(requests_mock.post.called)
        args, kwargs = requests_mock.post.call_args_list[0]
        self.assertEqual(('http://swarm.dev/api/v6/reviews',), args)
        self.assertDictEqual({'auth': ('swarmtest', 'A123453'),
                'data': {'description': "Please review me! Don't forget to check YYYY", 'change': '123'}}, kwargs)

#     def testCreateSwarmReview(self, requests_mock):
#         """trigger fires and sends expected info to Swarm"""
#         self.server = testp4.P4Server()
#         trig_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "CreateSwarmReview.py")
#         config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "test_config.yaml")
#         p4 = self.server.p4
#         p4.logger = self.logger
#         # This works if no spaces in server root pathname!
#         port = p4.port.replace('"', '')
#         self.logger.debug("port: |%s|" % port)
#         triggers = p4.fetch_triggers()
#         triggers['Triggers'] = ['create_swarm_review change-commit //... " python ' + trig_path +
#                                 " -p %quote%" + port + "%quote% -u " + p4.user +
#                                 " -c %s " % config_path +
#                                '  %change% "']
#         self.logger.debug(triggers)
#         p4.save_triggers(triggers)
#         # Reconnect to pick up changes
#         p4.disconnect()
#         p4.connect()

#         with open(config_path, "w") as f:
#             f.write("""
# api: "api/v6"
# user: perforce
# ticket: AA1233C0FD5EF69605B08070AFB86711
# review_description: "Please review me!\nDon't forget to check XXX"
# paths:
# - //depot/inside/...
# """)
#         inside = localDirectory(self.server.client_root, "inside")
#         inside_file1 = os.path.join(inside, "inside_file1")
#         create_file(inside_file1, 'Test content')

#         p4.run('add', inside_file1)
#         result = p4.run('submit', '-d', 'inside_file1 added')
#         self.assertEquals("Review created", result)

#         outside = localDirectory(self.server.client_root, "outside")
#         outside_file1 = os.path.join(inside, "outside_file1")
#         create_file(outside_file1, 'Test content')

#         p4.run('add', outside_file1)
#         result = p4.run('submit', '-d', 'outside_file1 added')
#         self.assertEquals("Review not created", result)

if __name__ == '__main__':
    unittest.main()
# Change User Description Committed
#6 23150 Robert Cowham Refactor to move tests into subdir
#5 23138 Robert Cowham Refactored tests
#4 23132 Robert Cowham Search for jobs and update existing review
Also add default reviewers
#3 23122 Robert Cowham Add functionality to allow depot paths to be specified in groups
#2 23073 Robert Cowham Use mocks for unit tests
#1 23070 Robert Cowham Initial versions