Skip to content

Commit 19a3249

Browse files
committed
Add WIP tests for content item repository
1 parent 5e60fce commit 19a3249

File tree

2 files changed

+135
-1
lines changed

2 files changed

+135
-1
lines changed

src/posit/connect/content.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ class ContentItemRepository(ApiDictEndpoint):
5151
See Also
5252
--------
5353
* Get info: https://docs.posit.co/connect/api/#get-/v1/content/-guid-/repository
54-
* Set info: https://docs.posit.co/connect/api/#put-/v1/content/-guid-/repository
5554
* Delete info: https://docs.posit.co/connect/api/#delete-/v1/content/-guid-/repository
5655
* Update info: https://docs.posit.co/connect/api/#patch-/v1/content/-guid-/repository
5756
"""

tests/posit/connect/test_content.py

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import pytest
2+
import requests
23
import responses
34
from responses import matchers
45

56
from posit.connect.client import Client
7+
from posit.connect.content import ContentItem, ContentItemRepository
8+
from posit.connect.context import Context
9+
from posit.connect.resources import ResourceParameters
10+
from posit.connect.urls import Url
611

712
from .api import load_mock # type: ignore
813

@@ -542,3 +547,133 @@ def test_app_mode_is_other(self):
542547
# assert
543548
assert mock_get_content.call_count == 1
544549
assert mock_patch_content.call_count == 1
550+
551+
552+
class TestContentRepository:
553+
@property
554+
def base_url(self):
555+
return "http://connect.example"
556+
557+
@property
558+
def content_guid(self):
559+
return "8ce6eaca-60af-4c2f-93a0-f5f3cddf5ee5"
560+
561+
@property
562+
def endpoint(self):
563+
return f"{self.base_url}/__api__/v1/content/{self.content_guid}/repository"
564+
565+
@property
566+
def get_value(self):
567+
return {
568+
"repository": "https://github.com/posit-dev/posit-sdk-py/",
569+
"branch": "main",
570+
"directory": "integration/resources/connect/bundles/example-flask-minimal",
571+
"polling": True,
572+
}
573+
574+
@property
575+
def patch_value(self):
576+
ret = {**self.get_value}
577+
ret["branch"] = "testing-main"
578+
return ret
579+
580+
@property
581+
def ctx(self):
582+
return Context(requests.Session(), Url(self.base_url))
583+
584+
@property
585+
def params(self):
586+
return ResourceParameters(self.ctx.session, self.ctx.url)
587+
588+
@responses.activate
589+
def test_repository_getter_returns_repository(self):
590+
mock_get = responses.get(self.endpoint, json=self.get_value)
591+
592+
content_item = ContentItem(self.params, guid=self.content_guid)
593+
594+
assert mock_get.call_count == 0
595+
596+
repository_info = content_item.repository
597+
assert isinstance(repository_info, ContentItemRepository)
598+
assert mock_get.call_count == 1
599+
600+
@responses.activate
601+
def test_repository_update(self):
602+
mock_patch = responses.patch(self.endpoint, json=self.patch_value)
603+
604+
# TODO-barret; Implement
605+
606+
@responses.activate
607+
def test_repository_delete(self):
608+
mock_delete = responses.delete(self.endpoint)
609+
# TODO-barret; Implement
610+
611+
612+
# # TODO-barret; Remove all tests below this line
613+
614+
615+
# class TestVanityMixin:
616+
# @responses.activate
617+
# def test_vanity_getter_returns_vanity(self):
618+
# guid = "12345678-1234-1234-1234-1234567890ab"
619+
# base_url = "http://connect.example/__api__"
620+
# endpoint = f"{base_url}/v1/content/{guid}/repository"
621+
# mock_get = responses.get(
622+
# endpoint,
623+
# json={
624+
# "repository": "git-owner/git-repo",
625+
# "branch": "testing-main",
626+
# "directory": "test_path",
627+
# "polling": False,
628+
# },
629+
# )
630+
631+
# session = requests.Session()
632+
# url = Url(base_url)
633+
# params = ResourceParameters(session, url)
634+
# content = VanityMixin(params, guid=guid)
635+
636+
# assert content
637+
638+
# assert content.vanity == "my-dashboard"
639+
# assert mock_get.call_count == 1
640+
641+
# @responses.activate
642+
# def test_vanity_setter_with_string(self):
643+
# guid = "8ce6eaca-60af-4c2f-93a0-f5f3cddf5ee5"
644+
# base_url = "http://connect.example/__api__"
645+
# endpoint = f"{base_url}/v1/content/{guid}/vanity"
646+
# path = "example"
647+
# mock_put = responses.put(
648+
# endpoint,
649+
# json={"content_guid": guid, "path": path},
650+
# match=[matchers.json_params_matcher({"path": path})],
651+
# )
652+
653+
# session = requests.Session()
654+
# url = Url(base_url)
655+
# params = ResourceParameters(session, url)
656+
# content = VanityMixin(params, guid=guid)
657+
# content.vanity = path
658+
# assert content.vanity == path
659+
660+
# assert mock_put.call_count == 1
661+
662+
# @responses.activate
663+
# def test_vanity_deleter(self):
664+
# guid = "12345678-1234-1234-1234-1234567890ab"
665+
# base_url = "http://connect.example/__api__"
666+
# endpoint = f"{base_url}/v1/content/{guid}/repository"
667+
# mock_delete = responses.delete(endpoint)
668+
669+
# session = requests.Session()
670+
# url = Url(base_url)
671+
# params = ResourceParameters(session, url)
672+
# content = VanityMixin(params, guid=guid)
673+
# content._vanity = Vanity(
674+
# params, path=mock.Mock(), content_guid=guid, created_time=mock.Mock()
675+
# )
676+
# del content.vanity
677+
678+
# assert content._vanity is None
679+
# assert mock_delete.call_count == 1

0 commit comments

Comments
 (0)