def test_method_collections(self, MockHttpProvider, MockAuthProvider):
        """
        Test that collections are returned properly from method calls that return collections
        """
        response = HttpResponse(
            200, None,
            json.dumps({
                "@odata.nextLink":
                "testing",
                "value": [{
                    "name": "test1",
                    "folder": {}
                }, {
                    "name": "test2"
                }]
            }))

        instance = MockHttpProvider.return_value
        instance.send.return_value = response

        instance = MockAuthProvider.return_value
        instance.authenticate.return_value = "blah"
        instance.authenticate_request.return_value = None

        http_provider = msgraph.HttpProvider()
        auth_provider = msgraph.AuthProvider()
        client = msgraph.GraphClient("graphurl", http_provider, auth_provider)

        items = client.drives["me"].items["testitem!id"].delta().request().get(
        )
        assert type(items.next_page_request) is ItemDeltaRequest
        assert type(items.next_page_request.get()) is ItemDeltaCollectionPage
예제 #2
0
    def test_put(self, MockHttpProvider, MockAuthProvider):

        response = HttpResponse(
            200, None,
            json.dumps({
                "name": "test1",
                "folder": {},
                "id": "test!id"
            }))

        instance = MockHttpProvider.return_value
        instance.send.return_value = response

        instance = MockAuthProvider.return_value
        instance.authenticate.return_value = "blah"
        instance.authenticate_request.return_value = None

        http_provider = msgraph.HttpProvider()
        auth_provider = msgraph.AuthProvider()
        client = msgraph.GraphClient("/", http_provider, auth_provider)

        response_item = client.drives["me"].items["root"].children[
            "newFile.txt"].content.request().upload("./myPath/myFile.txt")

        assert client.http_provider.send.call_args[1][
            "path"] == "./myPath/myFile.txt"
        assert client.http_provider.send.call_args[0][
            2] == "/drives/me/items/root/children/newFile.txt/content"
        assert all(item in response_item._prop_dict.items()
                   for item in json.loads(response.content).items())
    def test_path_creation(self, MockHttpProvider, MockAuthProvider):
        """
        Tests that the path of a request is resolved correctly
        """
        http_provider = msgraph.HttpProvider()
        auth_provider = msgraph.AuthProvider()
        client = msgraph.GraphClient("graphurl/", http_provider, auth_provider)

        request = client.drives["me"].items["root"].children.request()
        assert request.request_url == "graphurl/drives/me/items/root/children"

        request = client.drives["me"].items["root"].children[
            "testfile.txt"].request()
        assert request.request_url == "graphurl/drives/me/items/root/children/testfile.txt"
    def test_polling_background_method(self, MockHttpProvider,
                                       MockAuthProvider):
        """
        Test that polling in the background actually functions as it should and polls
        on a seperate thread.
        """
        response = HttpResponse(301, {"Location": "statusLocation"}, "")
        instance_http = MockHttpProvider.return_value
        instance_http.send.return_value = response

        instance_auth = MockAuthProvider.return_value
        instance_auth.authenticate.return_value = "blah"
        instance_auth.authenticate_request.return_value = None

        http_provider = msgraph.HttpProvider()
        auth_provider = msgraph.AuthProvider()
        client = msgraph.GraphClient("graphurl/", http_provider, auth_provider)

        ref = ItemReference()
        ref.id = "testing!id"
        mock = Mock()

        copy_operation = client.drives["me"].items["testitem!id"].copy(
            parent_reference=ref, name="newName").request().post()

        response = HttpResponse(
            200, None,
            json.dumps({
                "operation": "copy",
                "percentageComplete": 0,
                "status": "In progress"
            }))
        instance_http.send.return_value = response

        time.sleep(0.2)

        assert copy_operation.item is None

        response = HttpResponse(
            200, None, json.dumps({
                "id": "testitem!id",
                "name": "newName"
            }))
        instance_http.send.return_value = response

        time.sleep(0.1)

        assert copy_operation.item is not None
    def test_path_creation_with_query(self, MockHttpProvider,
                                      MockAuthProvider):
        """
        Tests that a path is created with the correct query parameters
        """
        http_provider = msgraph.HttpProvider()
        auth_provider = msgraph.AuthProvider()
        client = msgraph.GraphClient("graphurl/", http_provider, auth_provider)

        request = client.drives["me"].items["root"].children.request(
            top=3, select="test")

        query_dict = dict(parse_qsl(urlparse(request.request_url).query))
        expected_dict = {"select": "test", "top": "3"}
        assert all(item in query_dict.items()
                   for item in expected_dict.items())
    def test_method_query_format(self, MockHttpProvider, MockAuthProvider):
        """
        Test that the parameters are correctly entered into the query string
        of the request for methods that require this
        """
        http_provider = msgraph.HttpProvider()
        auth_provider = msgraph.AuthProvider()
        client = msgraph.GraphClient("graphurl/", http_provider, auth_provider)

        changes_request = client.drives["me"].items["testitem!id"].delta(
            token="token").request()
        assert urlparse(
            changes_request.request_url
        ).path == "graphurl/drives/me/items/testitem!id/view.delta"

        query_dict = dict(
            parse_qsl(urlparse(changes_request.request_url).query))
        expected_dict = {"token": "token"}
        assert all(item in query_dict.items()
                   for item in expected_dict.items())
    def test_paging(self, MockHttpProvider, MockAuthProvider):
        """
        Test paging of a file in situations where more than one page is available
        """
        response = HttpResponse(200, None, json.dumps({"@odata.nextLink":"testing", "value":[{"name":"test1", "folder":{}}, {"name":"test2"}]}))

        instance = MockHttpProvider.return_value
        instance.send.return_value = response

        instance = MockAuthProvider.return_value
        instance.authenticate.return_value = "blah"
        instance.authenticate_request.return_value = None

        http_provider = msgraph.HttpProvider()
        auth_provider = msgraph.AuthProvider()
        client = msgraph.GraphClient("graphurl/", http_provider, auth_provider)

        items = client.drives["me"].items["root"].children.request().get()
        
        assert type(items.next_page_request) is ChildrenCollectionRequest
        assert type(items.next_page_request.get()) is ChildrenCollectionPage
예제 #8
0
    def test_download(self, MockHttpProvider, MockAuthProvider):

        path = "./myPath/myFile.txt"
        response = HttpResponse(200, None, None)

        instance = MockHttpProvider.return_value
        instance.download.return_value = response

        instance = MockAuthProvider.return_value
        instance.authenticate.return_value = "blah"
        instance.authenticate_request.return_value = None

        http_provider = msgraph.HttpProvider()
        auth_provider = msgraph.AuthProvider()
        client = msgraph.GraphClient("/", http_provider, auth_provider)
        client.drives["me"].items["root"].children[
            "newFile.txt"].content.request().download(path)

        assert client.http_provider.download.call_args[0][2] == path
        assert client.http_provider.download.call_args[0][
            1] == "/drives/me/items/root/children/newFile.txt/content"
    def test_page_creation(self, MockHttpProvider, MockAuthProvider):
        """
        Test page creation when there is no nextLink attached to the collection
        """
        response = HttpResponse(200, None, json.dumps({"value":[{"name":"test1", "folder":{}}, {"name":"test2"}]}))

        instance = MockHttpProvider.return_value
        instance.send.return_value = response

        instance = MockAuthProvider.return_value
        instance.authenticate.return_value = "blah"
        instance.authenticate_request.return_value = None

        http_provider = msgraph.HttpProvider()
        auth_provider = msgraph.AuthProvider()
        client = msgraph.GraphClient("graphurl/", http_provider, auth_provider)

        items = client.drives["me"].items["root"].children.request().get()
        
        assert len(items) == 2
        assert type(items) is ChildrenCollectionPage
        assert items[0].name == "test1"
        assert type(items[0].folder) is Folder
        assert items[1].folder is None
    def test_method_body_format(self, MockHttpProvider, MockAuthProvider):
        """
        Test that the parameters are correctly entered into the body of the message
        of methods that require this
        """
        http_provider = msgraph.HttpProvider()
        auth_provider = msgraph.AuthProvider()
        client = msgraph.GraphClient("graphurl/", http_provider, auth_provider)

        ref = ItemReference()
        ref.id = "testing!id"

        copy_request = client.drives["me"].items["testitem!id"].copy(
            parent_reference=ref, name="newName").request()
        assert copy_request.request_url == "graphurl/drives/me/items/testitem!id/action.copy"

        expected_dict = {
            "parentReference": {
                "id": "testing!id"
            },
            "name": "newName"
        }
        assert all(item in copy_request.body_options.items()
                   for item in expected_dict.items())