# Path: k8s/client.py
# class NotFound(K8sClientException):
#     """The resource was not found, and the operation could not be completed"""
# 
# Path: k8s/models/common.py
# class ObjectMeta(Model):
#     annotations = Field(dict)
#     creationTimestamp = ReadOnlyField(datetime.datetime)
#     deletionGracePeriodSeconds = ReadOnlyField(int)
#     deletionTimestamp = ReadOnlyField(datetime.datetime)
#     finalizers = ListField(six.text_type)
#     generateName = Field(six.text_type)
#     generation = ReadOnlyField(int)
#     labels = Field(dict)
#     name = Field(six.text_type)
#     namespace = Field(six.text_type, "default")
#     ownerReferences = ListField(OwnerReference)
#     resourceVersion = ReadOnlyField(six.text_type)
#     selfLink = ReadOnlyField(six.text_type)
#     uid = ReadOnlyField(six.text_type)
# 
# Path: k8s/models/role_binding.py
# class RoleBinding(Model):
#     class Meta:
#         list_url = "/apis/rbac.authorization.k8s.io/v1/rolebindings"
#         url_template = "/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}"
# 
#     metadata = Field(ObjectMeta)
#     roleRef = Field(RoleRef)
#     subjects = ListField(Subject)
# 
# class RoleRef(Model):
#     apiGroup = Field(six.text_type)
#     kind = Field(six.text_type)
#     name = Field(six.text_type)
# 
# class Subject(Model):
#     kind = Field(six.text_type)
#     name = Field(six.text_type)
#     apiGroup = Field(six.text_type)
#     namespace = Field(six.text_type)


import mock
import pytest
from k8s.client import NotFound
from k8s.models.common import ObjectMeta
from k8s.models.role_binding import RoleBinding, RoleRef, Subject

@pytest.mark.usefixtures("k8s_config")
class TestRoleBinding(object):
    def test_created_if_not_exists(self, post, api_get):
        api_get.side_effect = NotFound()
        role_binding = _create_default_role_binding()
        call_params = role_binding.as_dict()
        post.return_value.json.return_value = call_params

        assert role_binding._new
        role_binding.save()
        assert not role_binding._new

        pytest.helpers.assert_any_call(post, _uri(NAMESPACE), call_params)

    def test_updated_if_exists(self, get, put):
        mock_response = _create_mock_response()
        get.return_value = mock_response
        role_binding = _create_default_role_binding()

        from_api = RoleBinding.get_or_create(
            metadata=role_binding.metadata,
            roleRef=role_binding.roleRef,
            subjects=role_binding.subjects,
        )
        assert not from_api._new
        assert from_api.roleRef == role_binding.roleRef
        assert from_api.subjects == role_binding.subjects

    def test_deleted(self, delete):

# Path: k8s/client.py
# class NotFound(K8sClientException):
#     """The resource was not found, and the operation could not be completed"""
# 
# Path: k8s/models/common.py
# class ObjectMeta(Model):
#     annotations = Field(dict)
#     creationTimestamp = ReadOnlyField(datetime.datetime)
#     deletionGracePeriodSeconds = ReadOnlyField(int)
#     deletionTimestamp = ReadOnlyField(datetime.datetime)
#     finalizers = ListField(six.text_type)
#     generateName = Field(six.text_type)
#     generation = ReadOnlyField(int)
#     labels = Field(dict)
#     name = Field(six.text_type)
#     namespace = Field(six.text_type, "default")
#     ownerReferences = ListField(OwnerReference)
#     resourceVersion = ReadOnlyField(six.text_type)
#     selfLink = ReadOnlyField(six.text_type)
#     uid = ReadOnlyField(six.text_type)
# 
# Path: k8s/models/role_binding.py
# class RoleBinding(Model):
#     class Meta:
#         list_url = "/apis/rbac.authorization.k8s.io/v1/rolebindings"
#         url_template = "/apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}"
# 
#     metadata = Field(ObjectMeta)
#     roleRef = Field(RoleRef)
#     subjects = ListField(Subject)
# 
# class RoleRef(Model):
#     apiGroup = Field(six.text_type)
#     kind = Field(six.text_type)
#     name = Field(six.text_type)
# 
# class Subject(Model):
#     kind = Field(six.text_type)
#     name = Field(six.text_type)
#     apiGroup = Field(six.text_type)
#     namespace = Field(six.text_type)


# Path: tests/k8s/test_role_binding.py
import mock
import pytest
from k8s.client import NotFound
from k8s.models.common import ObjectMeta
from k8s.models.role_binding import RoleBinding, RoleRef, Subject


@pytest.mark.usefixtures("k8s_config")
class TestRoleBinding(object):
    def test_created_if_not_exists(self, post, api_get):
        api_get.side_effect = NotFound()
        role_binding = _create_default_role_binding()
        call_params = role_binding.as_dict()
        post.return_value.json.return_value = call_params

        assert role_binding._new
        role_binding.save()
        assert not role_binding._new

        pytest.helpers.assert_any_call(post, _uri(NAMESPACE), call_params)

    def test_updated_if_exists(self, get, put):
        mock_response = _create_mock_response()
        get.return_value = mock_response
        role_binding = _create_default_role_binding()

        from_api = RoleBinding.get_or_create(
            metadata=role_binding.metadata,
            roleRef=role_binding.roleRef,
            subjects=role_binding.subjects,
        )
        assert not from_api._new
        assert from_api.roleRef == role_binding.roleRef
        assert from_api.subjects == role_binding.subjects

    def test_deleted(self, delete):

        RoleBinding.delete(NAME, namespace=NAMESPACE)