1- import json
21import os
32
43import pytest
5- from hubspot .cms .blogs .blog_posts .rest import RESTResponse
6- from urllib3 import HTTPResponse
74
85from hubspot_tech_writing .core import delete_blogpost , upload
6+ from tests .test_hubspot_file import response_simulator_upload
7+ from tests .util import mkresponse
98
109
11- def mkresponse (data , status = 200 , reason = "OK" ):
12- body = json .dumps (data ).encode ("utf-8" )
13- return RESTResponse (HTTPResponse (body = body , status = status , reason = reason ))
10+ def response_simulator_create (self , method , url , ** kwargs ):
11+ if method == "GET" and url == "https://api.hubapi.com/cms/v3/blogs/posts" :
12+ response = mkresponse ({"total" : 0 , "results" : []})
13+ elif method == "POST" and url == "https://api.hubapi.com/cms/v3/blogs/posts" :
14+ response = mkresponse ({"id" : "12345" }, status = 201 , reason = "Created" )
15+ elif method == "PATCH" and url == "https://api.hubapi.com/cms/v3/blogs/posts/12345" :
16+ response = mkresponse ({"id" : "12345" })
17+ else :
18+ raise ValueError (f"No HTTP conversation mock for: method={ method } , url={ url } " )
19+ return response
1420
1521
16- def response_simulator_create (self , method , url , ** kwargs ):
22+ def response_simulator_create_with_image (self , method , url , ** kwargs ):
1723 if method == "GET" and url == "https://api.hubapi.com/cms/v3/blogs/posts" :
1824 response = mkresponse ({"total" : 0 , "results" : []})
1925 elif method == "POST" and url == "https://api.hubapi.com/cms/v3/blogs/posts" :
@@ -93,7 +99,7 @@ def test_upload_blogpost_create_from_markdown(hubspot_access_token, mocker, capl
9399
94100
95101def test_upload_blogpost_update (hubspot_access_token , mocker , caplog , tmp_path ):
96- tmpfile = tmp_path / "foo.html "
102+ tmpfile = tmp_path / "foo.md "
97103 tmpfile .write_text ("# Foobar\n Franz jagt im komplett verwahrlosten Taxi quer durch Bayern." )
98104
99105 mocker .patch ("hubspot.cms.blogs.blog_posts.rest.RESTClientObject.request" , response_simulator_update )
@@ -109,6 +115,35 @@ def test_upload_blogpost_update(hubspot_access_token, mocker, caplog, tmp_path):
109115 assert "Saving blog post: HubSpotBlogPost identifier=12345, name=hstw-test" in caplog .text
110116
111117
118+ def test_upload_blogpost_with_image (hubspot_access_token , mocker , caplog , tmp_path ):
119+ mdfile = tmp_path / "foo.md"
120+ pngfile = tmp_path / "images" / "bar.png"
121+ pngfile .parent .mkdir ()
122+ mdfile .write_text ("" )
123+ pngfile .write_bytes (b"" )
124+
125+ mocker .patch ("hubspot.cms.blogs.blog_posts.rest.RESTClientObject.request" , response_simulator_create_with_image )
126+ mocker .patch ("hubspot.files.files.rest.RESTClientObject.request" , response_simulator_upload )
127+ upload (
128+ source = mdfile ,
129+ name = "hstw-test" ,
130+ content_group_id = "55844199082" ,
131+ folder_path = "/path/to/assets" ,
132+ access_token = hubspot_access_token ,
133+ )
134+
135+ assert "Uploading file:" in caplog .text
136+
137+ assert "Loading file: HubSpotFile identifier=None, name=bar.png, folder=/path/to/assets" in caplog .text
138+ assert "Searching for 'bar.png' in folder path '/path/to/assets'" in caplog .text
139+ assert "File does not exist: bar.png" in caplog .text
140+ assert "Creating: HubSpotFile identifier=None, name=bar.png, folder=/path/to/assets" in caplog .text
141+ assert "Saving file: HubSpotFile identifier=12345, name=bar.png, folder=/path/to/assets" in caplog .text
142+
143+ assert "Loading blog post: HubSpotBlogPost identifier=None, name=hstw-test" in caplog .text
144+ assert "Saving blog post: HubSpotBlogPost identifier=12345, name=hstw-test" in caplog .text
145+
146+
112147def test_delete_by_identifier (hubspot_access_token , mocker , caplog ):
113148 mocker .patch .dict (os .environ , {"CONFIRM" : "yes" })
114149 mocker .patch ("hubspot.cms.blogs.blog_posts.rest.RESTClientObject.request" , response_simulator_delete_id )
0 commit comments