|
1 | 1 | import pytest |
| 2 | +import requests |
2 | 3 | import responses |
3 | 4 | from responses import matchers |
4 | 5 |
|
5 | 6 | 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 |
6 | 11 |
|
7 | 12 | from .api import load_mock # type: ignore |
8 | 13 |
|
@@ -542,3 +547,133 @@ def test_app_mode_is_other(self): |
542 | 547 | # assert |
543 | 548 | assert mock_get_content.call_count == 1 |
544 | 549 | 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