Top

intern.service.boss.v1.tests.test_user module

# Copyright 2016 The Johns Hopkins University Applied Physics Laboratory
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import six
from intern.service.boss.v1.project import ProjectService_1
from intern.resource.boss.resource import *
from requests import PreparedRequest, Response, Session, HTTPError
import unittest
from mock import patch


class TestUser(unittest.TestCase):
    def setUp(self):
        self.prj = ProjectService_1()

    @patch('requests.Response', autospec=True)
    @patch('requests.Session', autospec=True)
    def test_get_success(self, mock_session, mock_resp):
        expected = ['default']
        mock_resp.status_code = 200
        mock_resp.json.return_value = expected
        mock_session.prepare_request.return_value = PreparedRequest()
        mock_session.send.return_value = mock_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        actual = self.prj.get_user(
            'johndoe', url_prefix, auth, mock_session, send_opts)
        six.assertCountEqual(self, expected, actual)

    @patch('requests.Session', autospec=True)
    def test_get_failure(self, mock_session):
        mock_session.prepare_request.return_value = PreparedRequest()
        fake_resp = Response()
        fake_resp.status_code = 403
        mock_session.send.return_value = fake_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        with self.assertRaises(HTTPError):
            self.prj.get_user(
                'johndoe', url_prefix, auth, mock_session, send_opts)

    @patch('requests.Session', autospec=True)
    def test_add_success(self, mock_session):
        mock_session.prepare_request.return_value = PreparedRequest()
        fake_resp = Response()
        fake_resp.status_code = 201
        mock_session.send.return_value = fake_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        user = 'johndoe'
        first = 'john'
        last = 'doe'
        email = 'jd@me.com'
        pw = 'password'

        self.prj.add_user(
            user, first, last, email, pw,
            url_prefix, auth, mock_session, send_opts)

    @patch('requests.Session', autospec=True)
    def test_add_failure(self, mock_session):
        mock_session.prepare_request.return_value = PreparedRequest()
        fake_resp = Response()
        fake_resp.status_code = 403
        mock_session.send.return_value = fake_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        user = 'johndoe'
        first = 'john'
        last = 'doe'
        email = 'jd@me.com'
        pw = 'password'

        with self.assertRaises(HTTPError):
            self.prj.add_user(
                user, first, last, email, pw,
                url_prefix, auth, mock_session, send_opts)

    @patch('requests.Session', autospec=True)
    def test_delete_success(self, mock_session):
        mock_session.prepare_request.return_value = PreparedRequest()
        fake_resp = Response()
        fake_resp.status_code = 204
        mock_session.send.return_value = fake_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        self.prj.delete_user(
            'johndoe', url_prefix, auth, mock_session, send_opts)



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

Classes

class TestUser

class TestUser(unittest.TestCase):
    def setUp(self):
        self.prj = ProjectService_1()

    @patch('requests.Response', autospec=True)
    @patch('requests.Session', autospec=True)
    def test_get_success(self, mock_session, mock_resp):
        expected = ['default']
        mock_resp.status_code = 200
        mock_resp.json.return_value = expected
        mock_session.prepare_request.return_value = PreparedRequest()
        mock_session.send.return_value = mock_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        actual = self.prj.get_user(
            'johndoe', url_prefix, auth, mock_session, send_opts)
        six.assertCountEqual(self, expected, actual)

    @patch('requests.Session', autospec=True)
    def test_get_failure(self, mock_session):
        mock_session.prepare_request.return_value = PreparedRequest()
        fake_resp = Response()
        fake_resp.status_code = 403
        mock_session.send.return_value = fake_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        with self.assertRaises(HTTPError):
            self.prj.get_user(
                'johndoe', url_prefix, auth, mock_session, send_opts)

    @patch('requests.Session', autospec=True)
    def test_add_success(self, mock_session):
        mock_session.prepare_request.return_value = PreparedRequest()
        fake_resp = Response()
        fake_resp.status_code = 201
        mock_session.send.return_value = fake_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        user = 'johndoe'
        first = 'john'
        last = 'doe'
        email = 'jd@me.com'
        pw = 'password'

        self.prj.add_user(
            user, first, last, email, pw,
            url_prefix, auth, mock_session, send_opts)

    @patch('requests.Session', autospec=True)
    def test_add_failure(self, mock_session):
        mock_session.prepare_request.return_value = PreparedRequest()
        fake_resp = Response()
        fake_resp.status_code = 403
        mock_session.send.return_value = fake_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        user = 'johndoe'
        first = 'john'
        last = 'doe'
        email = 'jd@me.com'
        pw = 'password'

        with self.assertRaises(HTTPError):
            self.prj.add_user(
                user, first, last, email, pw,
                url_prefix, auth, mock_session, send_opts)

    @patch('requests.Session', autospec=True)
    def test_delete_success(self, mock_session):
        mock_session.prepare_request.return_value = PreparedRequest()
        fake_resp = Response()
        fake_resp.status_code = 204
        mock_session.send.return_value = fake_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        self.prj.delete_user(
            'johndoe', url_prefix, auth, mock_session, send_opts)

Ancestors (in MRO)

  • TestUser
  • unittest.case.TestCase
  • __builtin__.object

Class variables

var failureException

var longMessage

var maxDiff

Methods

def __init__(

self, methodName='runTest')

Create an instance of the class that will use the named test
method when executed. Raises a ValueError if the instance does
not have a method with the specified name.

def __init__(self, methodName='runTest'):
    """Create an instance of the class that will use the named test
       method when executed. Raises a ValueError if the instance does
       not have a method with the specified name.
    """
    self._testMethodName = methodName
    self._resultForDoCleanups = None
    try:
        testMethod = getattr(self, methodName)
    except AttributeError:
        raise ValueError("no such test method in %s: %s" %
              (self.__class__, methodName))
    self._testMethodDoc = testMethod.__doc__
    self._cleanups = []
    # Map types to custom assertEqual functions that will compare
    # instances of said type in more detail to generate a more useful
    # error message.
    self._type_equality_funcs = {}
    self.addTypeEqualityFunc(dict, 'assertDictEqual')
    self.addTypeEqualityFunc(list, 'assertListEqual')
    self.addTypeEqualityFunc(tuple, 'assertTupleEqual')
    self.addTypeEqualityFunc(set, 'assertSetEqual')
    self.addTypeEqualityFunc(frozenset, 'assertSetEqual')
    try:
        self.addTypeEqualityFunc(unicode, 'assertMultiLineEqual')
    except NameError:
        # No unicode support in this build
        pass

def addCleanup(

self, function, *args, **kwargs)

Add a function, with arguments, to be called when the test is
completed. Functions added are called on a LIFO basis and are
called after tearDown on test failure or success.

Cleanup items are called even if setUp fails (unlike tearDown).

def addCleanup(self, function, *args, **kwargs):
    """Add a function, with arguments, to be called when the test is
    completed. Functions added are called on a LIFO basis and are
    called after tearDown on test failure or success.
    Cleanup items are called even if setUp fails (unlike tearDown)."""
    self._cleanups.append((function, args, kwargs))

def addTypeEqualityFunc(

self, typeobj, function)

Add a type specific assertEqual style function to compare a type.

This method is for use by TestCase subclasses that need to register
their own type equality functions to provide nicer error messages.

Args:
    typeobj: The data type to call this function on when both values
are of the same type in assertEqual().
    function: The callable taking two arguments and an optional
msg= argument that raises self.failureException with a
useful error message when the two arguments are not equal.

def addTypeEqualityFunc(self, typeobj, function):
    """Add a type specific assertEqual style function to compare a type.
    This method is for use by TestCase subclasses that need to register
    their own type equality functions to provide nicer error messages.
    Args:
        typeobj: The data type to call this function on when both values
                are of the same type in assertEqual().
        function: The callable taking two arguments and an optional
                msg= argument that raises self.failureException with a
                useful error message when the two arguments are not equal.
    """
    self._type_equality_funcs[typeobj] = function

def assertAlmostEqual(

self, first, second, places=None, msg=None, delta=None)

Fail if the two objects are unequal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero, or by comparing that the
between the two objects is more than the given delta.

Note that decimal places (from zero) are usually not the same
as significant digits (measured from the most signficant digit).

If the two objects compare equal then they will automatically
compare almost equal.

def assertAlmostEqual(self, first, second, places=None, msg=None, delta=None):
    """Fail if the two objects are unequal as determined by their
       difference rounded to the given number of decimal places
       (default 7) and comparing to zero, or by comparing that the
       between the two objects is more than the given delta.
       Note that decimal places (from zero) are usually not the same
       as significant digits (measured from the most signficant digit).
       If the two objects compare equal then they will automatically
       compare almost equal.
    """
    if first == second:
        # shortcut
        return
    if delta is not None and places is not None:
        raise TypeError("specify delta or places not both")
    if delta is not None:
        if abs(first - second) <= delta:
            return
        standardMsg = '%s != %s within %s delta' % (safe_repr(first),
                                                    safe_repr(second),
                                                    safe_repr(delta))
    else:
        if places is None:
            places = 7
        if round(abs(second-first), places) == 0:
            return
        standardMsg = '%s != %s within %r places' % (safe_repr(first),
                                                      safe_repr(second),
                                                      places)
    msg = self._formatMessage(msg, standardMsg)
    raise self.failureException(msg)

def assertAlmostEquals(

self, first, second, places=None, msg=None, delta=None)

Fail if the two objects are unequal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero, or by comparing that the
between the two objects is more than the given delta.

Note that decimal places (from zero) are usually not the same
as significant digits (measured from the most signficant digit).

If the two objects compare equal then they will automatically
compare almost equal.

def assertAlmostEqual(self, first, second, places=None, msg=None, delta=None):
    """Fail if the two objects are unequal as determined by their
       difference rounded to the given number of decimal places
       (default 7) and comparing to zero, or by comparing that the
       between the two objects is more than the given delta.
       Note that decimal places (from zero) are usually not the same
       as significant digits (measured from the most signficant digit).
       If the two objects compare equal then they will automatically
       compare almost equal.
    """
    if first == second:
        # shortcut
        return
    if delta is not None and places is not None:
        raise TypeError("specify delta or places not both")
    if delta is not None:
        if abs(first - second) <= delta:
            return
        standardMsg = '%s != %s within %s delta' % (safe_repr(first),
                                                    safe_repr(second),
                                                    safe_repr(delta))
    else:
        if places is None:
            places = 7
        if round(abs(second-first), places) == 0:
            return
        standardMsg = '%s != %s within %r places' % (safe_repr(first),
                                                      safe_repr(second),
                                                      places)
    msg = self._formatMessage(msg, standardMsg)
    raise self.failureException(msg)

def assertDictContainsSubset(

self, expected, actual, msg=None)

Checks whether actual is a superset of expected.

def assertDictContainsSubset(self, expected, actual, msg=None):
    """Checks whether actual is a superset of expected."""
    missing = []
    mismatched = []
    for key, value in expected.iteritems():
        if key not in actual:
            missing.append(key)
        elif value != actual[key]:
            mismatched.append('%s, expected: %s, actual: %s' %
                              (safe_repr(key), safe_repr(value),
                               safe_repr(actual[key])))
    if not (missing or mismatched):
        return
    standardMsg = ''
    if missing:
        standardMsg = 'Missing: %s' % ','.join(safe_repr(m) for m in
                                                missing)
    if mismatched:
        if standardMsg:
            standardMsg += '; '
        standardMsg += 'Mismatched values: %s' % ','.join(mismatched)
    self.fail(self._formatMessage(msg, standardMsg))

def assertDictEqual(

self, d1, d2, msg=None)

def assertDictEqual(self, d1, d2, msg=None):
    self.assertIsInstance(d1, dict, 'First argument is not a dictionary')
    self.assertIsInstance(d2, dict, 'Second argument is not a dictionary')
    if d1 != d2:
        standardMsg = '%s != %s' % (safe_repr(d1, True), safe_repr(d2, True))
        diff = ('\n' + '\n'.join(difflib.ndiff(
                       pprint.pformat(d1).splitlines(),
                       pprint.pformat(d2).splitlines())))
        standardMsg = self._truncateMessage(standardMsg, diff)
        self.fail(self._formatMessage(msg, standardMsg))

def assertEqual(

self, first, second, msg=None)

Fail if the two objects are unequal as determined by the '=='
operator.

def assertEqual(self, first, second, msg=None):
    """Fail if the two objects are unequal as determined by the '=='
       operator.
    """
    assertion_func = self._getAssertEqualityFunc(first, second)
    assertion_func(first, second, msg=msg)

def assertEquals(

self, first, second, msg=None)

Fail if the two objects are unequal as determined by the '=='
operator.

def assertEqual(self, first, second, msg=None):
    """Fail if the two objects are unequal as determined by the '=='
       operator.
    """
    assertion_func = self._getAssertEqualityFunc(first, second)
    assertion_func(first, second, msg=msg)

def assertFalse(

self, expr, msg=None)

Check that the expression is false.

def assertFalse(self, expr, msg=None):
    """Check that the expression is false."""
    if expr:
        msg = self._formatMessage(msg, "%s is not false" % safe_repr(expr))
        raise self.failureException(msg)

def assertGreater(

self, a, b, msg=None)

Just like self.assertTrue(a > b), but with a nicer default message.

def assertGreater(self, a, b, msg=None):
    """Just like self.assertTrue(a > b), but with a nicer default message."""
    if not a > b:
        standardMsg = '%s not greater than %s' % (safe_repr(a), safe_repr(b))
        self.fail(self._formatMessage(msg, standardMsg))

def assertGreaterEqual(

self, a, b, msg=None)

Just like self.assertTrue(a >= b), but with a nicer default message.

def assertGreaterEqual(self, a, b, msg=None):
    """Just like self.assertTrue(a >= b), but with a nicer default message."""
    if not a >= b:
        standardMsg = '%s not greater than or equal to %s' % (safe_repr(a), safe_repr(b))
        self.fail(self._formatMessage(msg, standardMsg))

def assertIn(

self, member, container, msg=None)

Just like self.assertTrue(a in b), but with a nicer default message.

def assertIn(self, member, container, msg=None):
    """Just like self.assertTrue(a in b), but with a nicer default message."""
    if member not in container:
        standardMsg = '%s not found in %s' % (safe_repr(member),
                                              safe_repr(container))
        self.fail(self._formatMessage(msg, standardMsg))

def assertIs(

self, expr1, expr2, msg=None)

Just like self.assertTrue(a is b), but with a nicer default message.

def assertIs(self, expr1, expr2, msg=None):
    """Just like self.assertTrue(a is b), but with a nicer default message."""
    if expr1 is not expr2:
        standardMsg = '%s is not %s' % (safe_repr(expr1),
                                         safe_repr(expr2))
        self.fail(self._formatMessage(msg, standardMsg))

def assertIsInstance(

self, obj, cls, msg=None)

Same as self.assertTrue(isinstance(obj, cls)), with a nicer
default message.

def assertIsInstance(self, obj, cls, msg=None):
    """Same as self.assertTrue(isinstance(obj, cls)), with a nicer
    default message."""
    if not isinstance(obj, cls):
        standardMsg = '%s is not an instance of %r' % (safe_repr(obj), cls)
        self.fail(self._formatMessage(msg, standardMsg))

def assertIsNone(

self, obj, msg=None)

Same as self.assertTrue(obj is None), with a nicer default message.

def assertIsNone(self, obj, msg=None):
    """Same as self.assertTrue(obj is None), with a nicer default message."""
    if obj is not None:
        standardMsg = '%s is not None' % (safe_repr(obj),)
        self.fail(self._formatMessage(msg, standardMsg))

def assertIsNot(

self, expr1, expr2, msg=None)

Just like self.assertTrue(a is not b), but with a nicer default message.

def assertIsNot(self, expr1, expr2, msg=None):
    """Just like self.assertTrue(a is not b), but with a nicer default message."""
    if expr1 is expr2:
        standardMsg = 'unexpectedly identical: %s' % (safe_repr(expr1),)
        self.fail(self._formatMessage(msg, standardMsg))

def assertIsNotNone(

self, obj, msg=None)

Included for symmetry with assertIsNone.

def assertIsNotNone(self, obj, msg=None):
    """Included for symmetry with assertIsNone."""
    if obj is None:
        standardMsg = 'unexpectedly None'
        self.fail(self._formatMessage(msg, standardMsg))

def assertItemsEqual(

self, expected_seq, actual_seq, msg=None)

An unordered sequence specific comparison. It asserts that
actual_seq and expected_seq have the same element counts.
Equivalent to::

self.assertEqual(Counter(iter(actual_seq)),
                 Counter(iter(expected_seq)))

Asserts that each element has the same count in both sequences.
Example:
- [0, 1, 1] and [1, 0, 1] compare equal.
- [0, 0, 1] and [0, 1] compare unequal.

def assertItemsEqual(self, expected_seq, actual_seq, msg=None):
    """An unordered sequence specific comparison. It asserts that
    actual_seq and expected_seq have the same element counts.
    Equivalent to::
        self.assertEqual(Counter(iter(actual_seq)),
                         Counter(iter(expected_seq)))
    Asserts that each element has the same count in both sequences.
    Example:
        - [0, 1, 1] and [1, 0, 1] compare equal.
        - [0, 0, 1] and [0, 1] compare unequal.
    """
    first_seq, second_seq = list(expected_seq), list(actual_seq)
    with warnings.catch_warnings():
        if sys.py3kwarning:
            # Silence Py3k warning raised during the sorting
            for _msg in ["(code|dict|type) inequality comparisons",
                         "builtin_function_or_method order comparisons",
                         "comparing unequal types"]:
                warnings.filterwarnings("ignore", _msg, DeprecationWarning)
        try:
            first = collections.Counter(first_seq)
            second = collections.Counter(second_seq)
        except TypeError:
            # Handle case with unhashable elements
            differences = _count_diff_all_purpose(first_seq, second_seq)
        else:
            if first == second:
                return
            differences = _count_diff_hashable(first_seq, second_seq)
    if differences:
        standardMsg = 'Element counts were not equal:\n'
        lines = ['First has %d, Second has %d:  %r' % diff for diff in differences]
        diffMsg = '\n'.join(lines)
        standardMsg = self._truncateMessage(standardMsg, diffMsg)
        msg = self._formatMessage(msg, standardMsg)
        self.fail(msg)

def assertLess(

self, a, b, msg=None)

Just like self.assertTrue(a < b), but with a nicer default message.

def assertLess(self, a, b, msg=None):
    """Just like self.assertTrue(a < b), but with a nicer default message."""
    if not a < b:
        standardMsg = '%s not less than %s' % (safe_repr(a), safe_repr(b))
        self.fail(self._formatMessage(msg, standardMsg))

def assertLessEqual(

self, a, b, msg=None)

Just like self.assertTrue(a <= b), but with a nicer default message.

def assertLessEqual(self, a, b, msg=None):
    """Just like self.assertTrue(a <= b), but with a nicer default message."""
    if not a <= b:
        standardMsg = '%s not less than or equal to %s' % (safe_repr(a), safe_repr(b))
        self.fail(self._formatMessage(msg, standardMsg))

def assertListEqual(

self, list1, list2, msg=None)

A list-specific equality assertion.

Args:
    list1: The first list to compare.
    list2: The second list to compare.
    msg: Optional message to use on failure instead of a list of
differences.

def assertListEqual(self, list1, list2, msg=None):
    """A list-specific equality assertion.
    Args:
        list1: The first list to compare.
        list2: The second list to compare.
        msg: Optional message to use on failure instead of a list of
                differences.
    """
    self.assertSequenceEqual(list1, list2, msg, seq_type=list)

def assertMultiLineEqual(

self, first, second, msg=None)

Assert that two multi-line strings are equal.

def assertMultiLineEqual(self, first, second, msg=None):
    """Assert that two multi-line strings are equal."""
    self.assertIsInstance(first, basestring,
            'First argument is not a string')
    self.assertIsInstance(second, basestring,
            'Second argument is not a string')
    if first != second:
        # don't use difflib if the strings are too long
        if (len(first) > self._diffThreshold or
            len(second) > self._diffThreshold):
            self._baseAssertEqual(first, second, msg)
        firstlines = first.splitlines(True)
        secondlines = second.splitlines(True)
        if len(firstlines) == 1 and first.strip('\r\n') == first:
            firstlines = [first + '\n']
            secondlines = [second + '\n']
        standardMsg = '%s != %s' % (safe_repr(first, True),
                                    safe_repr(second, True))
        diff = '\n' + ''.join(difflib.ndiff(firstlines, secondlines))
        standardMsg = self._truncateMessage(standardMsg, diff)
        self.fail(self._formatMessage(msg, standardMsg))

def assertNotAlmostEqual(

self, first, second, places=None, msg=None, delta=None)

Fail if the two objects are equal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero, or by comparing that the
between the two objects is less than the given delta.

Note that decimal places (from zero) are usually not the same
as significant digits (measured from the most signficant digit).

Objects that are equal automatically fail.

def assertNotAlmostEqual(self, first, second, places=None, msg=None, delta=None):
    """Fail if the two objects are equal as determined by their
       difference rounded to the given number of decimal places
       (default 7) and comparing to zero, or by comparing that the
       between the two objects is less than the given delta.
       Note that decimal places (from zero) are usually not the same
       as significant digits (measured from the most signficant digit).
       Objects that are equal automatically fail.
    """
    if delta is not None and places is not None:
        raise TypeError("specify delta or places not both")
    if delta is not None:
        if not (first == second) and abs(first - second) > delta:
            return
        standardMsg = '%s == %s within %s delta' % (safe_repr(first),
                                                    safe_repr(second),
                                                    safe_repr(delta))
    else:
        if places is None:
            places = 7
        if not (first == second) and round(abs(second-first), places) != 0:
            return
        standardMsg = '%s == %s within %r places' % (safe_repr(first),
                                                     safe_repr(second),
                                                     places)
    msg = self._formatMessage(msg, standardMsg)
    raise self.failureException(msg)

def assertNotAlmostEquals(

self, first, second, places=None, msg=None, delta=None)

Fail if the two objects are equal as determined by their
difference rounded to the given number of decimal places
(default 7) and comparing to zero, or by comparing that the
between the two objects is less than the given delta.

Note that decimal places (from zero) are usually not the same
as significant digits (measured from the most signficant digit).

Objects that are equal automatically fail.

def assertNotAlmostEqual(self, first, second, places=None, msg=None, delta=None):
    """Fail if the two objects are equal as determined by their
       difference rounded to the given number of decimal places
       (default 7) and comparing to zero, or by comparing that the
       between the two objects is less than the given delta.
       Note that decimal places (from zero) are usually not the same
       as significant digits (measured from the most signficant digit).
       Objects that are equal automatically fail.
    """
    if delta is not None and places is not None:
        raise TypeError("specify delta or places not both")
    if delta is not None:
        if not (first == second) and abs(first - second) > delta:
            return
        standardMsg = '%s == %s within %s delta' % (safe_repr(first),
                                                    safe_repr(second),
                                                    safe_repr(delta))
    else:
        if places is None:
            places = 7
        if not (first == second) and round(abs(second-first), places) != 0:
            return
        standardMsg = '%s == %s within %r places' % (safe_repr(first),
                                                     safe_repr(second),
                                                     places)
    msg = self._formatMessage(msg, standardMsg)
    raise self.failureException(msg)

def assertNotEqual(

self, first, second, msg=None)

Fail if the two objects are equal as determined by the '!='
operator.

def assertNotEqual(self, first, second, msg=None):
    """Fail if the two objects are equal as determined by the '!='
       operator.
    """
    if not first != second:
        msg = self._formatMessage(msg, '%s == %s' % (safe_repr(first),
                                                      safe_repr(second)))
        raise self.failureException(msg)

def assertNotEquals(

self, first, second, msg=None)

Fail if the two objects are equal as determined by the '!='
operator.

def assertNotEqual(self, first, second, msg=None):
    """Fail if the two objects are equal as determined by the '!='
       operator.
    """
    if not first != second:
        msg = self._formatMessage(msg, '%s == %s' % (safe_repr(first),
                                                      safe_repr(second)))
        raise self.failureException(msg)

def assertNotIn(

self, member, container, msg=None)

Just like self.assertTrue(a not in b), but with a nicer default message.

def assertNotIn(self, member, container, msg=None):
    """Just like self.assertTrue(a not in b), but with a nicer default message."""
    if member in container:
        standardMsg = '%s unexpectedly found in %s' % (safe_repr(member),
                                                    safe_repr(container))
        self.fail(self._formatMessage(msg, standardMsg))

def assertNotIsInstance(

self, obj, cls, msg=None)

Included for symmetry with assertIsInstance.

def assertNotIsInstance(self, obj, cls, msg=None):
    """Included for symmetry with assertIsInstance."""
    if isinstance(obj, cls):
        standardMsg = '%s is an instance of %r' % (safe_repr(obj), cls)
        self.fail(self._formatMessage(msg, standardMsg))

def assertNotRegexpMatches(

self, text, unexpected_regexp, msg=None)

Fail the test if the text matches the regular expression.

def assertNotRegexpMatches(self, text, unexpected_regexp, msg=None):
    """Fail the test if the text matches the regular expression."""
    if isinstance(unexpected_regexp, basestring):
        unexpected_regexp = re.compile(unexpected_regexp)
    match = unexpected_regexp.search(text)
    if match:
        msg = msg or "Regexp matched"
        msg = '%s: %r matches %r in %r' % (msg,
                                           text[match.start():match.end()],
                                           unexpected_regexp.pattern,
                                           text)
        raise self.failureException(msg)

def assertRaises(

self, excClass, callableObj=<function _sentinel at 0x10f6f6230>, *args, **kwargs)

Fail unless an exception of class excClass is raised
by callableObj when invoked with arguments args and keyword
arguments kwargs. If a different type of exception is
raised, it will not be caught, and the test case will be
deemed to have suffered an error, exactly as for an
unexpected exception.

If called with callableObj omitted, will return a
context object used like this::

 with self.assertRaises(SomeException):
     do_something()

The context manager keeps a reference to the exception as
the 'exception' attribute. This allows you to inspect the
exception after the assertion::

with self.assertRaises(SomeException) as cm:
    do_something()
the_exception = cm.exception
self.assertEqual(the_exception.error_code, 3)
def assertRaises(self, excClass, callableObj=_sentinel, *args, **kwargs):
    """Fail unless an exception of class excClass is raised
       by callableObj when invoked with arguments args and keyword
       arguments kwargs. If a different type of exception is
       raised, it will not be caught, and the test case will be
       deemed to have suffered an error, exactly as for an
       unexpected exception.
       If called with callableObj omitted, will return a
       context object used like this::
            with self.assertRaises(SomeException):
                do_something()
       The context manager keeps a reference to the exception as
       the 'exception' attribute. This allows you to inspect the
       exception after the assertion::
           with self.assertRaises(SomeException) as cm:
               do_something()
           the_exception = cm.exception
           self.assertEqual(the_exception.error_code, 3)
    """
    context = _AssertRaisesContext(excClass, self)
    if callableObj is _sentinel:
        return context
    with context:
        callableObj(*args, **kwargs)

def assertRaisesRegexp(

self, expected_exception, expected_regexp, callable_obj=<function _sentinel at 0x10f6f6230>, *args, **kwargs)

Asserts that the message in a raised exception matches a regexp.

Args:
    expected_exception: Exception class expected to be raised.
    expected_regexp: Regexp (re pattern object or string) expected
to be found in error message.
    callable_obj: Function to be called.
    args: Extra args.
    kwargs: Extra kwargs.

def assertRaisesRegexp(self, expected_exception, expected_regexp,
                       callable_obj=_sentinel, *args, **kwargs):
    """Asserts that the message in a raised exception matches a regexp.
    Args:
        expected_exception: Exception class expected to be raised.
        expected_regexp: Regexp (re pattern object or string) expected
                to be found in error message.
        callable_obj: Function to be called.
        args: Extra args.
        kwargs: Extra kwargs.
    """
    if expected_regexp is not None:
        expected_regexp = re.compile(expected_regexp)
    context = _AssertRaisesContext(expected_exception, self, expected_regexp)
    if callable_obj is _sentinel:
        return context
    with context:
        callable_obj(*args, **kwargs)

def assertRegexpMatches(

self, text, expected_regexp, msg=None)

Fail the test unless the text matches the regular expression.

def assertRegexpMatches(self, text, expected_regexp, msg=None):
    """Fail the test unless the text matches the regular expression."""
    if isinstance(expected_regexp, basestring):
        expected_regexp = re.compile(expected_regexp)
    if not expected_regexp.search(text):
        msg = msg or "Regexp didn't match"
        msg = '%s: %r not found in %r' % (msg, expected_regexp.pattern, text)
        raise self.failureException(msg)

def assertSequenceEqual(

self, seq1, seq2, msg=None, seq_type=None)

An equality assertion for ordered sequences (like lists and tuples).

For the purposes of this function, a valid ordered sequence type is one
which can be indexed, has a length, and has an equality operator.

Args:
    seq1: The first sequence to compare.
    seq2: The second sequence to compare.
    seq_type: The expected datatype of the sequences, or None if no
datatype should be enforced.
    msg: Optional message to use on failure instead of a list of
differences.

def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None):
    """An equality assertion for ordered sequences (like lists and tuples).
    For the purposes of this function, a valid ordered sequence type is one
    which can be indexed, has a length, and has an equality operator.
    Args:
        seq1: The first sequence to compare.
        seq2: The second sequence to compare.
        seq_type: The expected datatype of the sequences, or None if no
                datatype should be enforced.
        msg: Optional message to use on failure instead of a list of
                differences.
    """
    if seq_type is not None:
        seq_type_name = seq_type.__name__
        if not isinstance(seq1, seq_type):
            raise self.failureException('First sequence is not a %s: %s'
                                    % (seq_type_name, safe_repr(seq1)))
        if not isinstance(seq2, seq_type):
            raise self.failureException('Second sequence is not a %s: %s'
                                    % (seq_type_name, safe_repr(seq2)))
    else:
        seq_type_name = "sequence"
    differing = None
    try:
        len1 = len(seq1)
    except (TypeError, NotImplementedError):
        differing = 'First %s has no length.    Non-sequence?' % (
                seq_type_name)
    if differing is None:
        try:
            len2 = len(seq2)
        except (TypeError, NotImplementedError):
            differing = 'Second %s has no length.    Non-sequence?' % (
                    seq_type_name)
    if differing is None:
        if seq1 == seq2:
            return
        seq1_repr = safe_repr(seq1)
        seq2_repr = safe_repr(seq2)
        if len(seq1_repr) > 30:
            seq1_repr = seq1_repr[:30] + '...'
        if len(seq2_repr) > 30:
            seq2_repr = seq2_repr[:30] + '...'
        elements = (seq_type_name.capitalize(), seq1_repr, seq2_repr)
        differing = '%ss differ: %s != %s\n' % elements
        for i in xrange(min(len1, len2)):
            try:
                item1 = seq1[i]
            except (TypeError, IndexError, NotImplementedError):
                differing += ('\nUnable to index element %d of first %s\n' %
                             (i, seq_type_name))
                break
            try:
                item2 = seq2[i]
            except (TypeError, IndexError, NotImplementedError):
                differing += ('\nUnable to index element %d of second %s\n' %
                             (i, seq_type_name))
                break
            if item1 != item2:
                differing += ('\nFirst differing element %d:\n%s\n%s\n' %
                             (i, item1, item2))
                break
        else:
            if (len1 == len2 and seq_type is None and
                type(seq1) != type(seq2)):
                # The sequences are the same, but have differing types.
                return
        if len1 > len2:
            differing += ('\nFirst %s contains %d additional '
                         'elements.\n' % (seq_type_name, len1 - len2))
            try:
                differing += ('First extra element %d:\n%s\n' %
                              (len2, seq1[len2]))
            except (TypeError, IndexError, NotImplementedError):
                differing += ('Unable to index element %d '
                              'of first %s\n' % (len2, seq_type_name))
        elif len1 < len2:
            differing += ('\nSecond %s contains %d additional '
                         'elements.\n' % (seq_type_name, len2 - len1))
            try:
                differing += ('First extra element %d:\n%s\n' %
                              (len1, seq2[len1]))
            except (TypeError, IndexError, NotImplementedError):
                differing += ('Unable to index element %d '
                              'of second %s\n' % (len1, seq_type_name))
    standardMsg = differing
    diffMsg = '\n' + '\n'.join(
        difflib.ndiff(pprint.pformat(seq1).splitlines(),
                      pprint.pformat(seq2).splitlines()))
    standardMsg = self._truncateMessage(standardMsg, diffMsg)
    msg = self._formatMessage(msg, standardMsg)
    self.fail(msg)

def assertSetEqual(

self, set1, set2, msg=None)

A set-specific equality assertion.

Args:
    set1: The first set to compare.
    set2: The second set to compare.
    msg: Optional message to use on failure instead of a list of
differences.

assertSetEqual uses ducktyping to support different types of sets, and
is optimized for sets specifically (parameters must support a
difference method).

def assertSetEqual(self, set1, set2, msg=None):
    """A set-specific equality assertion.
    Args:
        set1: The first set to compare.
        set2: The second set to compare.
        msg: Optional message to use on failure instead of a list of
                differences.
    assertSetEqual uses ducktyping to support different types of sets, and
    is optimized for sets specifically (parameters must support a
    difference method).
    """
    try:
        difference1 = set1.difference(set2)
    except TypeError, e:
        self.fail('invalid type when attempting set difference: %s' % e)
    except AttributeError, e:
        self.fail('first argument does not support set difference: %s' % e)
    try:
        difference2 = set2.difference(set1)
    except TypeError, e:
        self.fail('invalid type when attempting set difference: %s' % e)
    except AttributeError, e:
        self.fail('second argument does not support set difference: %s' % e)
    if not (difference1 or difference2):
        return
    lines = []
    if difference1:
        lines.append('Items in the first set but not the second:')
        for item in difference1:
            lines.append(repr(item))
    if difference2:
        lines.append('Items in the second set but not the first:')
        for item in difference2:
            lines.append(repr(item))
    standardMsg = '\n'.join(lines)
    self.fail(self._formatMessage(msg, standardMsg))

def assertTrue(

self, expr, msg=None)

Check that the expression is true.

def assertTrue(self, expr, msg=None):
    """Check that the expression is true."""
    if not expr:
        msg = self._formatMessage(msg, "%s is not true" % safe_repr(expr))
        raise self.failureException(msg)

def assertTupleEqual(

self, tuple1, tuple2, msg=None)

A tuple-specific equality assertion.

Args:
    tuple1: The first tuple to compare.
    tuple2: The second tuple to compare.
    msg: Optional message to use on failure instead of a list of
differences.

def assertTupleEqual(self, tuple1, tuple2, msg=None):
    """A tuple-specific equality assertion.
    Args:
        tuple1: The first tuple to compare.
        tuple2: The second tuple to compare.
        msg: Optional message to use on failure instead of a list of
                differences.
    """
    self.assertSequenceEqual(tuple1, tuple2, msg, seq_type=tuple)

def assert_(

self, expr, msg=None)

Check that the expression is true.

def assertTrue(self, expr, msg=None):
    """Check that the expression is true."""
    if not expr:
        msg = self._formatMessage(msg, "%s is not true" % safe_repr(expr))
        raise self.failureException(msg)

def countTestCases(

self)

def countTestCases(self):
    return 1

def debug(

self)

Run the test without collecting errors in a TestResult

def debug(self):
    """Run the test without collecting errors in a TestResult"""
    self.setUp()
    getattr(self, self._testMethodName)()
    self.tearDown()
    while self._cleanups:
        function, args, kwargs = self._cleanups.pop(-1)
        function(*args, **kwargs)

def defaultTestResult(

self)

def defaultTestResult(self):
    return result.TestResult()

def doCleanups(

self)

Execute all cleanup functions. Normally called for you after
tearDown.

def doCleanups(self):
    """Execute all cleanup functions. Normally called for you after
    tearDown."""
    result = self._resultForDoCleanups
    ok = True
    while self._cleanups:
        function, args, kwargs = self._cleanups.pop(-1)
        try:
            function(*args, **kwargs)
        except KeyboardInterrupt:
            raise
        except:
            ok = False
            result.addError(self, sys.exc_info())
    return ok

def fail(

self, msg=None)

Fail immediately, with the given message.

def fail(self, msg=None):
    """Fail immediately, with the given message."""
    raise self.failureException(msg)

def failIf(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failIfAlmostEqual(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failIfEqual(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failUnless(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failUnlessAlmostEqual(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failUnlessEqual(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failUnlessRaises(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def id(

self)

def id(self):
    return "%s.%s" % (strclass(self.__class__), self._testMethodName)

def run(

self, result=None)

def run(self, result=None):
    orig_result = result
    if result is None:
        result = self.defaultTestResult()
        startTestRun = getattr(result, 'startTestRun', None)
        if startTestRun is not None:
            startTestRun()
    self._resultForDoCleanups = result
    result.startTest(self)
    testMethod = getattr(self, self._testMethodName)
    if (getattr(self.__class__, "__unittest_skip__", False) or
        getattr(testMethod, "__unittest_skip__", False)):
        # If the class or method was skipped.
        try:
            skip_why = (getattr(self.__class__, '__unittest_skip_why__', '')
                        or getattr(testMethod, '__unittest_skip_why__', ''))
            self._addSkip(result, skip_why)
        finally:
            result.stopTest(self)
        return
    try:
        success = False
        try:
            self.setUp()
        except SkipTest as e:
            self._addSkip(result, str(e))
        except KeyboardInterrupt:
            raise
        except:
            result.addError(self, sys.exc_info())
        else:
            try:
                testMethod()
            except KeyboardInterrupt:
                raise
            except self.failureException:
                result.addFailure(self, sys.exc_info())
            except _ExpectedFailure as e:
                addExpectedFailure = getattr(result, 'addExpectedFailure', None)
                if addExpectedFailure is not None:
                    addExpectedFailure(self, e.exc_info)
                else:
                    warnings.warn("TestResult has no addExpectedFailure method, reporting as passes",
                                  RuntimeWarning)
                    result.addSuccess(self)
            except _UnexpectedSuccess:
                addUnexpectedSuccess = getattr(result, 'addUnexpectedSuccess', None)
                if addUnexpectedSuccess is not None:
                    addUnexpectedSuccess(self)
                else:
                    warnings.warn("TestResult has no addUnexpectedSuccess method, reporting as failures",
                                  RuntimeWarning)
                    result.addFailure(self, sys.exc_info())
            except SkipTest as e:
                self._addSkip(result, str(e))
            except:
                result.addError(self, sys.exc_info())
            else:
                success = True
            try:
                self.tearDown()
            except KeyboardInterrupt:
                raise
            except:
                result.addError(self, sys.exc_info())
                success = False
        cleanUpSuccess = self.doCleanups()
        success = success and cleanUpSuccess
        if success:
            result.addSuccess(self)
    finally:
        result.stopTest(self)
        if orig_result is None:
            stopTestRun = getattr(result, 'stopTestRun', None)
            if stopTestRun is not None:
                stopTestRun()

def setUp(

self)

def setUp(self):
    self.prj = ProjectService_1()

def setUpClass(

cls)

Hook method for setting up class fixture before running tests in the class.

@classmethod
def setUpClass(cls):
    "Hook method for setting up class fixture before running tests in the class."

def shortDescription(

self)

Returns a one-line description of the test, or None if no
description has been provided.

The default implementation of this method returns the first line of
the specified test method's docstring.

def shortDescription(self):
    """Returns a one-line description of the test, or None if no
    description has been provided.
    The default implementation of this method returns the first line of
    the specified test method's docstring.
    """
    doc = self._testMethodDoc
    return doc and doc.split("\n")[0].strip() or None

def skipTest(

self, reason)

Skip this test.

def skipTest(self, reason):
    """Skip this test."""
    raise SkipTest(reason)

def tearDown(

self)

Hook method for deconstructing the test fixture after testing it.

def tearDown(self):
    "Hook method for deconstructing the test fixture after testing it."
    pass

def tearDownClass(

cls)

Hook method for deconstructing the class fixture after running all tests in the class.

@classmethod
def tearDownClass(cls):
    "Hook method for deconstructing the class fixture after running all tests in the class."

def test_add_failure(

*args, **keywargs)

@patch('requests.Session', autospec=True)
def test_add_failure(self, mock_session):
    mock_session.prepare_request.return_value = PreparedRequest()
    fake_resp = Response()
    fake_resp.status_code = 403
    mock_session.send.return_value = fake_resp
    url_prefix = 'https://api.theboss.io'
    auth = 'mytoken'
    send_opts = {}
    user = 'johndoe'
    first = 'john'
    last = 'doe'
    email = 'jd@me.com'
    pw = 'password'
    with self.assertRaises(HTTPError):
        self.prj.add_user(
            user, first, last, email, pw,
            url_prefix, auth, mock_session, send_opts)

def test_add_success(

*args, **keywargs)

@patch('requests.Session', autospec=True)
def test_add_success(self, mock_session):
    mock_session.prepare_request.return_value = PreparedRequest()
    fake_resp = Response()
    fake_resp.status_code = 201
    mock_session.send.return_value = fake_resp
    url_prefix = 'https://api.theboss.io'
    auth = 'mytoken'
    send_opts = {}
    user = 'johndoe'
    first = 'john'
    last = 'doe'
    email = 'jd@me.com'
    pw = 'password'
    self.prj.add_user(
        user, first, last, email, pw,
        url_prefix, auth, mock_session, send_opts)

def test_delete_success(

*args, **keywargs)

@patch('requests.Session', autospec=True)
def test_delete_success(self, mock_session):
    mock_session.prepare_request.return_value = PreparedRequest()
    fake_resp = Response()
    fake_resp.status_code = 204
    mock_session.send.return_value = fake_resp
    url_prefix = 'https://api.theboss.io'
    auth = 'mytoken'
    send_opts = {}
    self.prj.delete_user(
        'johndoe', url_prefix, auth, mock_session, send_opts)

def test_get_failure(

*args, **keywargs)

@patch('requests.Session', autospec=True)
def test_get_failure(self, mock_session):
    mock_session.prepare_request.return_value = PreparedRequest()
    fake_resp = Response()
    fake_resp.status_code = 403
    mock_session.send.return_value = fake_resp
    url_prefix = 'https://api.theboss.io'
    auth = 'mytoken'
    send_opts = {}
    with self.assertRaises(HTTPError):
        self.prj.get_user(
            'johndoe', url_prefix, auth, mock_session, send_opts)

def test_get_success(

*args, **keywargs)

@patch('requests.Response', autospec=True)
@patch('requests.Session', autospec=True)
def test_get_success(self, mock_session, mock_resp):
    expected = ['default']
    mock_resp.status_code = 200
    mock_resp.json.return_value = expected
    mock_session.prepare_request.return_value = PreparedRequest()
    mock_session.send.return_value = mock_resp
    url_prefix = 'https://api.theboss.io'
    auth = 'mytoken'
    send_opts = {}
    actual = self.prj.get_user(
        'johndoe', url_prefix, auth, mock_session, send_opts)
    six.assertCountEqual(self, expected, actual)