|
2 | 2 | import os |
3 | 3 | import time |
4 | 4 | import unittest |
| 5 | +import json |
5 | 6 |
|
6 | 7 | from integration_tests.env_variable_names import SLACK_SDK_TEST_BOT_TOKEN |
7 | | -from slack_sdk.models.metadata import Metadata, EventAndEntityMetadata, EntityMetadata, EntityType, ExternalRef |
| 8 | +from slack_sdk.models.metadata import ( |
| 9 | + Metadata, EventAndEntityMetadata, EntityMetadata, EntityType, ExternalRef, |
| 10 | + EntityPayload, EntityAttributes, EntityTitle, TaskEntityFields, EntityStringField, |
| 11 | + EntityTitle, EntityAttributes, EntityFullSizePreview, |
| 12 | + TaskEntityFields, EntityTypedField, EntityStringField, EntityTimestampField, |
| 13 | + EntityEditSupport, EntityEditTextConfig, EntityCustomField, EntityUserIDField, |
| 14 | + EntityIconField, ExternalRef as CustomExternalRef |
| 15 | +) |
8 | 16 | from slack_sdk.web import WebClient |
9 | 17 |
|
10 | 18 |
|
@@ -126,21 +134,122 @@ def test_publishing_message_metadata_using_models(self): |
126 | 134 | self.assertIsNone(scheduled.get("error")) |
127 | 135 | self.assertIsNotNone(scheduled.get("message").get("metadata")) |
128 | 136 |
|
129 | | - def test_publishing_message_entity_metadata_using_models(self): |
| 137 | + def test_publishing_entity_metadata(self): |
| 138 | + client: WebClient = WebClient(token=self.bot_token,base_url='https://dev.slack.com/api/') |
| 139 | + new_message = client.chat_postMessage( |
| 140 | + channel="C014KLZN9M0", |
| 141 | + text="Message with entity metadata", |
| 142 | + metadata={"entities": [{ |
| 143 | + "entity_type": "slack#/entities/task", |
| 144 | + "url": "https://abc.com/123", |
| 145 | + "external_ref": {"id": "123"}, |
| 146 | + "entity_payload": { |
| 147 | + "attributes": { |
| 148 | + "title": {"text": "My task"}, |
| 149 | + "product_name": "We reference only" |
| 150 | + }, |
| 151 | + "fields": { |
| 152 | + "due_date": { |
| 153 | + "value": "2026-06-06", |
| 154 | + "type": "slack#/types/date", |
| 155 | + "edit": {"enabled": True} |
| 156 | + }, |
| 157 | + "created_by": { |
| 158 | + "type": "slack#/types/user", |
| 159 | + "user": {"user_id": "U014KLZE350"} |
| 160 | + }, |
| 161 | + "date_created": {"value": 1760629278} |
| 162 | + }, |
| 163 | + "custom_fields": [ |
| 164 | + { |
| 165 | + "label": "img", |
| 166 | + "key": "img", |
| 167 | + "type": "slack#/types/image", |
| 168 | + "image_url": "https://s3-media2.fl.yelpcdn.com/bphoto/korel-1YjNtFtJlMTaC26A/o.jpg" |
| 169 | + } |
| 170 | + ] |
| 171 | + } |
| 172 | + }]} |
| 173 | + ) |
| 174 | + |
| 175 | + self.assertIsNone(new_message.get("error")) |
| 176 | + print(new_message.get("response_metadata")) |
| 177 | + self.assertIsNone(new_message.get("warning")) |
| 178 | + |
| 179 | + def test_publishing_entity_metadata_using_models(self): |
130 | 180 |
|
131 | | - payload = { "attributes": { "title": { "text": "Work References" }, "product_name": "We reference only", "metadata_last_modified": 1760999279, "full_size_preview": { "is_supported": True } }, "fields": { "due_date": { "value": "2026-06-06", "type": "slack#/types/date", "edit": { "enabled": True } }, "created_by": { "type": "slack#/types/user", "user": { "user_id": "U014KLZE350" }, "edit": { "enabled": True } }, "description": { "value": "Initial task work object for test test test", "format": "markdown", "long": True, "edit": { "enabled": True, "text": { "min_length": 1, "max_length": 100 } } }, "date_created": { "value": 1760629278 }, "date_updated": { "value": 1760999279 } }, "custom_fields": [ { "label": "img", "key": "img", "type": "slack#/types/image", "image_url": "https://cdn.shopify.com/s/files/1/0156/3796/files/shutterstock_54266797_large.jpg?v=1549042211" }, { "label": "Reference tasks", "key": "ref-tasks", "type": "slack#/types/entity_ref", "entity_ref": { "entity_url": "https://app-one-app-two-auth-dev.tinyspeck.com/admin/slack/workobject/129/change/", "external_ref": { "id": "129" }, "title": "Radiant task", "display_type": "tasks", "icon": { "alt_text": "img", "url": "https://avatars.slack-edge.com/2024-09-05/7707480927360_791cc0c5cdf5b6720b21_512.png" } } }, { "label": "All related references", "key": "related-refs", "type": "array", "item_type": "slack#/types/entity_ref", "value": [ { "entity_ref": { "entity_url": "https://app-one-app-two-auth-dev.tinyspeck.com/admin/slack/workobject/131/change/", "external_ref": { "id": "131" }, "title": "Work object planner", "icon": { "alt_text": "img", "url": "https://avatars.slack-edge.com/2024-09-05/7707480927360_791cc0c5cdf5b6720b21_512.png" } } }, { "entity_ref": { "entity_url": "https://app-one-app-two-auth-dev.tinyspeck.com/admin/slack/workobject/133/change/", "external_ref": { "id": "133" }, "title": "Test" } }, { "entity_ref": { "entity_url": "https://app-one-app-two-auth-dev.tinyspeck.com/admin/slack/workobject/142/change/", "external_ref": { "id": "142" }, "title": "Test" } } ] } ] } |
| 181 | + # Build the metadata |
132 | 182 |
|
133 | | - client: WebClient = WebClient(token=self.bot_token,base_url='https://dev2378.slack.com/api/') |
| 183 | + title = EntityTitle(text="My title") |
| 184 | + full_size_preview = EntityFullSizePreview( |
| 185 | + is_supported=True, |
| 186 | + preview_url="https://s3-media3.fl.yelpcdn.com/bphoto/c7ed05m9lC2EmA3Aruue7A/o.jpg", |
| 187 | + mime_type="image/jpeg" |
| 188 | + ) |
| 189 | + attributes = EntityAttributes( |
| 190 | + title=title, |
| 191 | + product_name="My Product", |
| 192 | + full_size_preview=full_size_preview |
| 193 | + ) |
| 194 | + description = EntityStringField( |
| 195 | + value="Description of the task.", |
| 196 | + long=True, |
| 197 | + edit=EntityEditSupport( |
| 198 | + enabled=True, |
| 199 | + text=EntityEditTextConfig( |
| 200 | + min_length=5, |
| 201 | + max_length=100 |
| 202 | + ) |
| 203 | + ) |
| 204 | + ) |
| 205 | + due_date = EntityTypedField( |
| 206 | + value="2026-06-06", |
| 207 | + type="slack#/types/date", |
| 208 | + edit=EntityEditSupport(enabled=True) |
| 209 | + ) |
| 210 | + created_by = EntityTypedField( |
| 211 | + type="slack#/types/user", |
| 212 | + user=EntityUserIDField(user_id="USLACKBOT"), |
| 213 | + ) |
| 214 | + date_created = EntityTimestampField( |
| 215 | + value=1762450663, |
| 216 | + type="slack#/types/timestamp" |
| 217 | + ) |
| 218 | + date_updated = EntityTimestampField( |
| 219 | + value=1762450663, |
| 220 | + type="slack#/types/timestamp" |
| 221 | + ) |
| 222 | + fields = TaskEntityFields( |
| 223 | + description=description, |
| 224 | + due_date=due_date, |
| 225 | + created_by=created_by, |
| 226 | + date_created=date_created, |
| 227 | + date_updated=date_updated |
| 228 | + ) |
| 229 | + custom_fields = [] |
| 230 | + custom_fields.append(EntityCustomField( |
| 231 | + label="My Image", |
| 232 | + key="my-image", |
| 233 | + type="slack#/types/image", |
| 234 | + image_url="https://s3-media3.fl.yelpcdn.com/bphoto/c7ed05m9lC2EmA3Aruue7A/o.jpg" |
| 235 | + )) |
| 236 | + entity = EntityPayload( |
| 237 | + attributes=attributes, |
| 238 | + fields=fields, |
| 239 | + custom_fields=custom_fields |
| 240 | + ) |
| 241 | + |
| 242 | + client: WebClient = WebClient(token=self.bot_token,base_url='https://dev.slack.com/api/') |
134 | 243 | new_message = client.chat_postMessage( |
135 | 244 | channel="C014KLZN9M0", |
136 | | - text="dbl check message with metadata", |
| 245 | + text="Message with entity metadata", |
137 | 246 | metadata=EventAndEntityMetadata( |
138 | 247 | entities=[ |
139 | 248 | EntityMetadata( |
140 | 249 | entity_type=EntityType.TASK, |
141 | 250 | external_ref=ExternalRef(id="abc123"), |
142 | 251 | url="https://myappdomain.com", |
143 | | - entity_payload=payload, |
| 252 | + entity_payload=entity, |
144 | 253 | )]), |
145 | 254 | ) |
146 | 255 |
|
|
0 commit comments